{"slug":"x402-agent-tools-nerolabs-workers-dev-data-merge-dedupe-92c9f4","title":"Merges two or more lists of JSON rows (for example leads from Google Maps, a CRM","host":"x402-agent-tools.nerolabs.workers.dev","method":"POST","resource":"https://x402-agent-tools.nerolabs.workers.dev/data/merge-dedupe","category":"other","description":"Merges two or more lists of JSON rows (for example leads from Google Maps, a CRM export and a spreadsheet) into one list and removes the duplicates between them by a key such as phone, email or website, ignoring spacing, case and http/www. Keeps the most complete row, fills its blanks from the dupli","price_listed":0.002,"price_asked":0.002,"state":"answering","state_label":"Answering","checks_7d":1,"answered_7d":1,"latency_ms_median":59,"reported_calls_30d":0,"reported_payers_30d":0,"networks":["eip155:8453"],"badge":"unverified","paid_checks_7d":0,"paid_ok_7d":0,"example_input":{"body":{"dedupKeys":["phone"],"lists":[{"name":"Google Maps","rows":[{"name":"Acme Plumbing","phone":"0117 496 0012","website":""}]},{"name":"CRM","rows":[{"name":"ACME PLUMBING","phone":"01174960012","website":"https://www.acme.co.uk/"}]}]},"bodyType":"json","method":"POST","type":"http"},"output_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"input":{"additionalProperties":false,"properties":{"body":{"additionalProperties":false,"properties":{"dedupKeys":{"description":"Fields that identify the same record, for example [\"phone\"] or [\"website\"]. Leave out to compare whole rows.","items":{"type":"string"},"type":"array"},"dedupMode":{"description":"normalized (default) ignores case, spaces, punctuation and http/www, so \"0117 496 0012\" matches \"01174960012\". fuzzy also catches near matches (100 rows at most). none only merges, no dedupe.","enum":["exact","normalized","fuzzy","none"],"type":"string"},"fillBlanksFromDuplicates":{"description":"Default true: copy values the kept row is missing from the duplicates it replaced.","type":"boolean"},"keepStrategy":{"description":"Which duplicate to keep: most_complete (default, the row with the most filled fields), first or last.","enum":["most_complete","first","last"],"type":"string"},"lists":{"description":"Two or more lists to merge, each {\"name\":\"Google Maps\",\"rows\":[{...},{...}]}. Every row is a JSON object. The name is returned on each row as the list it came from.","items":{"type":"object"},"type":"array"},"similarityThreshold":{"description":"fuzzy only, 0.5 to 1. Default 0.9.","type":"number"}},"required":["lists"],"type":"object"},"bodyType":{"enum":["json","form-data","text"],"type":"string"},"method":{"enum":["POST"],"type":"string"},"type":{"const":"http","type":"string"}},"required":["type","method","bodyType","body"],"type":"object"},"output":{"properties":{"example":{"type":"object"},"type":{"type":"string"}},"required":["type"],"type":"object"}},"required":["input"],"type":"object"},"history":[{"day":"2026-10-21","reachable":true,"status":402,"valid_402":true,"asked_usdc":0.002,"price_match":true,"latency_ms":59,"error":null}],"description_full":"Merges two or more lists of JSON rows (for example leads from Google Maps, a CRM export and a spreadsheet) into one list and removes the duplicates between them by a key such as phone, email or website, ignoring spacing, case and http/www. Keeps the most complete row, fills its blanks from the duplicates and labels which lists each record was in. Up to 500 rows in all. $0.001 per row sent, $0.002 minimum.","last_updated":"2026-10-21T14:15:20.804Z","schemes":["exact"]}