{"name":"Dedupely free CSV tools","description":"Dedupe, split, normalize and merge contact lists over a plain JSON API or MCP. Free within limits, no key needed. Nothing sent here is stored.","docs":"https://dedupe.ly/tools","openapi":"https://dedupe.ly/tools/api/openapi.json","mcp":{"transport":"streamable-http","url":"https://dedupe.ly/tools/mcp","manifest":"https://dedupe.ly/tools/mcp/server.json"},"llms_txt":"https://dedupe.ly/llms.txt","api_catalog":"https://dedupe.ly/.well-known/api-catalog","limits":{"rows":2000,"browserRunsPerDay":10,"browserFileBytes":2097152,"apiBodyBytes":2097152,"apiPerHour":60,"apiPerDay":300,"over_limit":"Responses carry error \"limit\" with a message asking the user to sign up at https://v2.app.dedupe.ly/signup."},"tools":[{"slug":"csv-dedupe","mcp_name":"dedupe_csv","title":"CSV quick dedupe","description":"Remove duplicate rows from a CSV. Choose the columns that decide a match; case, punctuation and spacing are ignored. Returns the deduped table, the rows removed and the duplicate groups.","endpoint":"https://dedupe.ly/tools/api/csv-dedupe","page":"https://dedupe.ly/tools/csv-dedupe","input":{"type":"object","properties":{"csv":{"type":"string","description":"The file as CSV text, header row first. Comma, semicolon, tab and pipe delimiters are detected."},"rows":{"type":"array","items":{"type":"object","additionalProperties":{"type":"string"}},"description":"Alternative to csv: the rows as objects keyed by column name."},"columns":{"type":"array","items":{"type":"string"},"description":"Column names that together identify a duplicate. Default: every column."},"keep":{"type":"string","enum":["first","last","most-complete"],"description":"Which row of a duplicate group survives. Default first."},"ignoreCase":{"type":"boolean","description":"Default true."},"ignorePunctuation":{"type":"boolean","description":"Default true."}}}},{"slug":"name-splitter","mcp_name":"split_names","title":"First and last name splitter","description":"Split a full-name column into first, middle and last name, with prefixes (Dr, Mrs) and suffixes (Jr, PhD) set aside. Handles \"Last, First\" order and surname particles such as van der or de la.","endpoint":"https://dedupe.ly/tools/api/name-splitter","page":"https://dedupe.ly/tools/name-splitter","input":{"type":"object","properties":{"csv":{"type":"string","description":"The file as CSV text, header row first. Comma, semicolon, tab and pipe delimiters are detected."},"rows":{"type":"array","items":{"type":"object","additionalProperties":{"type":"string"}},"description":"Alternative to csv: the rows as objects keyed by column name."},"names":{"type":"array","items":{"type":"string"},"description":"Alternative: a plain list of full names."},"column":{"type":"string","description":"The full-name column. Default: the first column with \"name\" in its header."},"fixCase":{"type":"boolean","description":"Title-case names written in all caps or all lowercase. Default false."}}}},{"slug":"email-normalizer","mcp_name":"normalize_emails","title":"Email normalizer","description":"Normalize an email column: lowercase, strip plus tags and Gmail dots, fix typo domains such as gamil.com, and flag role addresses, disposable domains and invalid values. Adds Email (normalized), Email Changes and Email Flags columns.","endpoint":"https://dedupe.ly/tools/api/email-normalizer","page":"https://dedupe.ly/tools/email-normalizer","input":{"type":"object","properties":{"csv":{"type":"string","description":"The file as CSV text, header row first. Comma, semicolon, tab and pipe delimiters are detected."},"rows":{"type":"array","items":{"type":"object","additionalProperties":{"type":"string"}},"description":"Alternative to csv: the rows as objects keyed by column name."},"emails":{"type":"array","items":{"type":"string"},"description":"Alternative: a plain list of addresses."},"column":{"type":"string","description":"The email column. Default: the first column with \"email\" in its header."},"stripPlusTags":{"type":"boolean","description":"Default true."},"fixTypos":{"type":"boolean","description":"Default true."},"removeDots":{"type":"boolean","description":"Remove dots in Gmail local parts. Default true."},"dropInvalid":{"type":"boolean","description":"Leave invalid addresses out of the result. Default false."}}}},{"slug":"list-merger","mcp_name":"merge_lists","title":"Contact list merger","description":"Merge two CSV lists into one. Columns are aligned by name, both lists are combined, and rows that match on the key columns (default: the shared email column) are collapsed to one.","endpoint":"https://dedupe.ly/tools/api/list-merger","page":"https://dedupe.ly/tools/list-merger","input":{"type":"object","properties":{"csvA":{"type":"string","description":"List A as CSV text."},"csvB":{"type":"string","description":"List B as CSV text."},"rowsA":{"type":"array","items":{"type":"object"},"description":"Alternative to csvA."},"rowsB":{"type":"array","items":{"type":"object"},"description":"Alternative to csvB."},"keyColumns":{"type":"array","items":{"type":"string"},"description":"Columns present in both lists that decide a duplicate. Default: the shared email column, else every shared column."},"keep":{"type":"string","enum":["first","last","most-complete"],"description":"first keeps list A's row when both lists have a contact. Default first."}}}},{"slug":"domain-extractor","mcp_name":"extract_domains","title":"Domain extractor","description":"Turn email addresses, URLs or hostnames into clean root domains: scheme, www, paths, ports and subdomains removed, with co.uk-style suffixes handled. Adds a Domain column, or returns the unique domains with counts.","endpoint":"https://dedupe.ly/tools/api/domain-extractor","page":"https://dedupe.ly/tools/domain-extractor","input":{"type":"object","properties":{"csv":{"type":"string","description":"The file as CSV text, header row first. Comma, semicolon, tab and pipe delimiters are detected."},"rows":{"type":"array","items":{"type":"object","additionalProperties":{"type":"string"}},"description":"Alternative to csv: the rows as objects keyed by column name."},"values":{"type":"array","items":{"type":"string"},"description":"Alternative: a plain list of emails or URLs."},"column":{"type":"string","description":"The column to read. Default: the first column with email, website, url or domain in its header."},"unique":{"type":"boolean","description":"Return one row per distinct domain with a count instead of the input rows. Default false."}}}},{"slug":"company-normalizer","mcp_name":"normalize_company_names","title":"Company name normalizer","description":"Strip legal forms (Inc, Ltd, GmbH, LLC and 80 more) and punctuation from company names and group the spellings that belong to one company. Adds Company (normalized) and Company Group columns; can return the groups instead.","endpoint":"https://dedupe.ly/tools/api/company-normalizer","page":"https://dedupe.ly/tools/company-normalizer","input":{"type":"object","properties":{"csv":{"type":"string","description":"The file as CSV text, header row first. Comma, semicolon, tab and pipe delimiters are detected."},"rows":{"type":"array","items":{"type":"object","additionalProperties":{"type":"string"}},"description":"Alternative to csv: the rows as objects keyed by column name."},"names":{"type":"array","items":{"type":"string"},"description":"Alternative: a plain list of company names."},"column":{"type":"string","description":"The company column. Default: the first column with company, account or organization in its header."},"groups":{"type":"boolean","description":"Return one row per company group with its variants and count. Default false."}}}},{"slug":"test-data-generator","mcp_name":"generate_test_data","title":"CRM test data generator","description":"Generate fictional contacts, companies or deals in HubSpot, Pipedrive, Salesforce or generic import columns, with a chosen share of duplicates injected the way real ones happen: second emails, reversed names, reformatted phones, legal suffixes, caps, stray spaces, typo domains, half-empty records. Deterministic per seed. CSV only; nothing is written to a CRM.","endpoint":"https://dedupe.ly/tools/api/test-data-generator","page":"https://dedupe.ly/tools/test-data-generator","input":{"type":"object","properties":{"rows":{"type":"integer","minimum":1,"maximum":2000,"description":"Total rows including duplicates. Default 200, max 2000."},"duplicateRate":{"type":"number","minimum":0,"maximum":0.9,"description":"Share of rows that are duplicate copies. Default 0.15."},"object":{"type":"string","enum":["contacts","companies","deals"],"description":"Default contacts."},"shape":{"type":"string","enum":["generic","hubspot","pipedrive","salesforce"],"description":"Column names of that CRM's import. Default generic."},"patterns":{"type":"array","items":{"type":"string","enum":["email-variant","name-reversed","phone-format","company-suffix","casing","whitespace","typo-domain","missing-field"]},"description":"Duplicate patterns to use. Default all."},"labelGroups":{"type":"boolean","description":"Add Duplicate Group and Duplicate Patterns columns that name the truth, for measuring a dedupe. Default false."},"seed":{"type":"integer","description":"Reproduce a previous file."}}}}]}