Company Name Normalizer & Deduplicator for CRM avatar

Company Name Normalizer & Deduplicator for CRM

Pricing

from $0.50 / 1,000 results

Go to Apify Store
Company Name Normalizer & Deduplicator for CRM

Company Name Normalizer & Deduplicator for CRM

Normalize messy company names and group duplicates in your CRM, leads or vendor lists. Strips Inc, LLC, Ltd and GmbH, splits d/b/a names, fixes caps, punctuation and common aliases (IBM, P&G), and returns a clean name, canonical key, legal form and duplicate group ID per row.

Pricing

from $0.50 / 1,000 results

Rating

0.0

(0)

Developer

Ultimate Foresight Inc

Ultimate Foresight Inc

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

19 hours ago

Last modified

Share

Company Name Normalizer & Deduplicator for CRM cleans messy company names and groups the duplicates. It turns "ACME PLUMBING L.L.C.", "The Acme Plumbing Co." and "Acme Plumbing Inc. d/b/a Acme Rooter" into one company, Acme Plumbing, with the same groupId, and keeps the legal form, DBA and former names as separate fields. Use it to dedupe CRM accounts, merge lead lists from different scrapers, match vendors or employers across datasets, or prepare names for enrichment. Click Start with the prefilled 10 names to see the result in a few seconds.

Deterministic, explainable cleaning. Every row shows the steps applied and how it was grouped (exact key, alias, spacing/plural variant or, if you turn it on, typo). It doesn't look companies up in any registry, so two different companies with the same cleaned name share a group: check groupSize before merging records automatically.

What does Company Name Normalizer & Deduplicator do?

  • ✅ Removes legal forms worldwide (81 forms: Inc, LLC, L.L.C., Corp, Co, Ltd, LLP, PLC, GmbH, GmbH & Co. KG, AG, S.A., S.A. de C.V., SARL, B.V., N.V., Pty Ltd, Pvt Ltd, K.K. and more) and returns them as legalForm, legalFormType and jurisdictionHint
  • ✅ Splits DBA, "trading as" and FKA/formerly names into dbaName and formerName
  • ✅ Removes store and location numbers ("McDonald's #1234"), parenthetical notes, leading "The", country qualifiers ("Deel US LLC"), and turns domains into names (acme.com → Acme)
  • ✅ Fixes casing for ALL CAPS and all-lowercase input while keeping acronyms (IBM, AT&T) and leaving mixed-case names as written
  • ✅ Expands common abbreviations in the match key (Intl, Mfg, Svcs, Assoc, Natl, Mgmt, Bros), so "Acme Intl Mfg" groups with "Acme International Manufacturing"
  • ✅ Knows 116 well-known aliases (IBM, P&G, AT&T, GE, HP, 3M, McDonald's...) and accepts your own
  • ✅ Groups spacing, punctuation, "&"/"and" and plural variants ("HospiceMD" / "Hospice MD"); optional typo grouping ("Deloite" / "Deloitte") with safety rules
  • ✅ Returns every row with cleanedName, canonicalKey, groupId, groupSize, groupCanonicalName, duplicateOfRow, matchMethod, steps and flags, or one row per group as a deduplicated list
  • ✅ Works on plain lists, your own records, or another Actor's dataset (company name field detected automatically, original record copied through)

Who is it for?

  • 📇 Sales ops and RevOps teams deduplicating CRM accounts and merging lead lists
  • 🧲 Lead-gen agencies combining Google Maps, LinkedIn-style and directory scrapes into one clean list
  • 🧾 Finance and procurement matching vendor names across systems
  • 📊 Data analysts and researchers joining datasets on employer or company name
  • 🤖 Developers and AI agents that need a cheap, repeatable name-cleaning step before enrichment

How to normalize and deduplicate company names

  1. Click Try for free or Start. The input is prefilled with ten messy names.
  2. Paste your own names in Company names (one per line), or pass Records or a Dataset ID from another Actor.
  3. Choose Output: all rows with their group, or one row per group.
  4. Optional: turn on Also group typos, or add Your aliases.
  5. Click Start, then download CSV/Excel or fetch the results through the API.

Input example

This is the prefilled input:

{
"names": [
"Acme Plumbing, LLC",
"ACME PLUMBING L.L.C.",
"The Acme Plumbing Co.",
"Acme Plumbing Inc. d/b/a Acme Rooter",
"Acme Plumbers LLC",
"International Business Machines Corp.",
"IBM",
"McDonald's #1234",
"MCDONALD'S CORPORATION",
"Siemens AG"
]
}

Clean the company field of a scraper's dataset and output one row per company:

{
"datasetId": "YOUR_LEADS_DATASET_ID",
"nameField": "companyName",
"outputMode": "onePerGroup",
"aliases": {
"Big Blue": "International Business Machines"
}
}

Output example

Real output from the prefilled input above (run on 2026-10-21, America/Chicago): 10 names became 5 groups.

RowInputCleanedGroup nameGroup sizeMatchLegal form
1Acme Plumbing, LLCAcme PlumbingAcme Plumbing4group representativeLLC
2ACME PLUMBING L.L.C.Acme PlumbingAcme Plumbing4exact keyLLC
3The Acme Plumbing Co.Acme PlumbingAcme Plumbing4exact keyCo
4Acme Plumbing Inc. d/b/a Acme RooterAcme PlumbingAcme Plumbing4exact keyInc
5Acme Plumbers LLCAcme PlumbersAcme Plumbers1uniqueLLC
6International Business Machines Corp.International Business MachinesInternational Business Machines2group representativeCorp
7IBMInternational Business MachinesInternational Business Machines2alias-
8McDonald's #1234McDonald'sMcDonald's2group representative-
9MCDONALD'S CORPORATIONMcDonald'sMcDonald's2exact keyCorp
10Siemens AGSiemensSiemens1uniqueAG

"Acme Plumbers LLC" is deliberately not merged with "Acme Plumbing": the words differ, and they may be different businesses (turn on typo grouping to be more aggressive). Two rows in full, untrimmed:

[
{
"row": 4,
"id": null,
"inputName": "Acme Plumbing Inc. d/b/a Acme Rooter",
"cleanedName": "Acme Plumbing",
"canonicalKey": "acme plumbing",
"groupId": "g-831b7ef85b",
"groupSize": 4,
"groupCanonicalName": "Acme Plumbing",
"isFirstInGroup": false,
"duplicateOfRow": 1,
"matchMethod": "exact key",
"legalName": "Acme Plumbing Inc.",
"legalForm": [
"Inc"
],
"legalFormType": "corporation",
"jurisdictionHint": "US",
"dbaName": "Acme Rooter",
"formerName": null,
"aliasApplied": false,
"steps": [
"split d/b/a",
"removed legal form"
],
"flags": []
},
{
"row": 7,
"id": null,
"inputName": "IBM",
"cleanedName": "International Business Machines",
"canonicalKey": "international business machines",
"groupId": "g-02fb16bcc4",
"groupSize": 2,
"groupCanonicalName": "International Business Machines",
"isFirstInGroup": false,
"duplicateOfRow": 6,
"matchMethod": "alias",
"legalName": "IBM",
"legalForm": null,
"legalFormType": null,
"jurisdictionHint": null,
"dbaName": null,
"formerName": null,
"aliasApplied": true,
"steps": [
"alias"
],
"flags": []
}
]

How much does it cost to normalize company names?

This Actor uses pay-per-event pricing:

  • $0.0005 per output row (one row per name, or one per group in "one row per group" mode)
  • a tiny Actor start fee of $0.00005 per run
  • plus the small Apify platform usage of the run, paid by you. For the prefilled 10-name example this was about $0.0001 (256 MB, under 4 seconds).

So 1,000 names cost about $0.50 and 10,000 names about $5, plus a few cents of platform usage. Apify lets you set a maximum cost per run.

Use it through the API, integrations or AI agents

  • API: POST https://api.apify.com/v2/acts/ultimatemc~company-name-canonicalizer/run-sync-get-dataset-items with your Apify token and the input JSON as the body. Client libraries for JavaScript and Python are on the API tab.
  • AI agents (MCP): add https://mcp.apify.com?tools=ultimatemc/company-name-canonicalizer to Claude, Cursor, ChatGPT or any MCP client, so your agent can clean and group a list of companies as a tool. See Apify MCP server.
  • Chain it after a scraper: pass the datasetId of a leads, jobs or Maps scraper run, or trigger this Actor with a webhook.
  • Automation: connect webhooks, Make, Zapier, n8n, HubSpot exports or Google Sheets from Apify Console.

FAQ

How accurate is the grouping?

On a test of about 6,800 real employer names from public H-1B filings, written in different ways, 99-100% of each company's spelling variants ended up in one group, with about 5 joins of different employers per sample (mostly the same company under a slightly different name). Typo grouping is off by default because it trades precision for recall.

Will it merge two different companies with the same name?

Yes, if their cleaned names are identical ("Acme Plumbing LLC" in Texas and "Acme Plumbing Inc" in Ohio). It has no location or registry data. Use groupSize, your own IDs and other fields before auto-merging.

Does it change how names are displayed?

Only ALL CAPS or all-lowercase input is re-cased. The legalName field keeps the name with its legal form; cleanedName is without it.

Does it look companies up online or use AI?

No. It's deterministic rules plus a built-in alias list. No names are sent to any outside service, and the same input always gives the same output.

Which languages and countries?

Latin-script names. Legal forms cover the U.S., UK, EU, Latin America, India, Australia, Japan and more; accents are kept in the display name and ignored in the key.

Limitations

  • No registry or website lookup, so it can't tell apart two companies with identical names, or know that a subsidiary belongs to a parent (unless you add an alias).
  • The alias list is curated, not complete: "Big Blue" → IBM needs your alias.
  • Typo grouping can join similar but different names ("Computek" / "Computer"); review rows where matchMethod is "fuzzy typo".
  • Non-Latin scripts (Chinese, Arabic, Cyrillic) are passed through with minimal cleaning.

Data and privacy

Only company names are processed; no lookups or outside calls. Data is used only during the run and saved only to your own Apify dataset.

Other tools by Ultimate Foresight

Got a wrong merge or a missed duplicate? Open an issue on the Issues tab with the names, and we'll review the rule.