Why duplicate companies break account-level reporting
Companies are HubSpot's primary record type for B2B sales. When the same company exists multiple times, every account-level metric becomes unreliable:
- Total open pipeline by company undercounts — half the deals are on Acme A, half on Acme B, neither tells the truth.
- Active contacts per account splits across records.
- Owner assignment fragments — one rep "owns" Acme A, another "owns" Acme B, both think they own the relationship.
- ABM workflows misfire — a workflow targeting "top 50 accounts" might include both Acme records as separate accounts.
The most common cause: the company record didn't exist when a contact was being created, so HubSpot auto-created a new company from the email domain. Then someone else manually created a company record for the same brand without searching first. Now there are two — auto-generated and manual — both with the same domain.
What domain normalization actually catches
The match is straightforward: companies sharing the same normalized domain.
Normalization steps:
- Lowercase the domain.
- Strip
http://andhttps://prefixes. - Strip
www.prefix. - Remove any trailing path or query string —
acme.com/productsbecomesacme.com.
Two company records with normalized domain acme.com are duplicates. Cluster size 2 is the typical case; 3+ usually means imports gone wrong.
Why domain-only matching misses real duplicates and flags false ones
Domain normalization isn't always sufficient:
Subsidiaries and brands. A parent company might own multiple distinct domains for legitimate brand reasons. microsoft.com, linkedin.com, github.com are all owned by Microsoft. Whether to merge them depends on your account strategy. Native HubSpot doesn't know which subsidiaries belong together.
Domain typos. acme.com vs acmer.com vs acne.com. These look like different companies to a domain-only check but might be the same record entered with a typo. Catching them requires fuzzy matching, which generates more false positives than exact matching does.
The "Additional domains" field is rarely populated. HubSpot lets you store multiple domains per company record (microsoft.com primary, outlook.com and live.com as additional). When populated correctly, contacts from any of those domains auto-attach. Most teams never set additional domains, which means a single company with multiple email domains creates duplicate company records — and the domain match doesn't catch them because the domains are technically different.
The deeper friction is that merging companies cascades through the data model: deal associations transfer, contact associations transfer, custom-property values from both records have to be reconciled. HubSpot's merge UI handles most of this automatically, but edge cases (workflow enrollment history, ticket associations, conversation threads) can have surprising behavior. Test merges on low-risk records first before doing batch cleanup.
The manual HubSpot recipe
Native dedup tool for the obvious matches; export-and-normalize for the formatting cases. Test merges on low-risk records before bulk action.
- Open Companies → Actions → Manage duplicatesNavigate to Companies → Companies. Click 'Actions' in the top right and select 'Manage duplicates'.
- Review HubSpot's domain-match clustersHubSpot surfaces pairs it considers high-confidence domain matches. Click into each pair for the side-by-side comparison.
- Merge or dismiss each pairPick which record to keep, choose field-by-field which value to preserve. Or dismiss if it's a false positive (rare with same-domain match).
- Export companies for normalized comparisonThe native tool may miss formatting differences. Export Companies → CSV with
domain,name,created_at. - Normalize domains in a spreadsheetLowercase, strip
http:///https://, stripwww., remove trailing path/query. Sort by normalized domain. Any cluster of 2+ rows is a candidate for review. - Merge candidates back in HubSpotFor each cluster, open one record, click 'Actions → Merge', and select the duplicate. Field-by-field reconciliation.
What Bloated does instead
Domain-normalized duplicate detection — with merge cascading verified.
Bloated normalizes every company domain (lowercase, strip http/www/paths) and clusters them. Catches typo cases (acme.com vs acmer.com) when the Levenshtein distance is small. Pre-merge cascade preview — see deal associations, contact associations, and workflow enrollments before you merge, so you catch surprising data dependencies.
domain · HubSpot company property