How fast CRM data goes bad
HubSpot's Database Decay Simulation says email marketing databases degrade by about 22.5 percent every year. Its footnote says that Marketing Sherpas research shows B2B data decays at 2.1 percent per month, which it annualizes to 22.5 percent. The page names no report title, date, sample or link for that research, and its headline refers to email marketing databases while the footnote refers to B2B data (HubSpot, checked 18 October 2026). Compounding 2.1 percent a month does give about 22.5 percent over 12 months, and about 12 percent over six. By the same assumption, a quarter costs roughly 6 percent. That arithmetic is ours.
Treat it as an order of magnitude. We found no independent primary figure for contact decay, only vendor blogs repeating each other, so this is the only decay number we use.
The US Bureau of Labor Statistics gives some context. Median tenure with a current employer was 4.1 years in January 2026, up from 3.9 years in January 2024, and 3.0 years for workers aged 25 to 34 (BLS Employee Tenure release, 24 September 2026). BLS measures workers, not contact records, so it is a proxy. It still suggests that a share of your titles and work emails are wrong in any given year, and a list that has sat for a year is the likeliest place to find them.
Our working default: re-verify any contact whose last-verified date is older than 90 days before it enters a send.
Dedupe rules that hold up
Decide the match keys before you touch the merge button. We suggest these.
| Object | Exact match key | Fuzzy match to review by hand |
|---|---|---|
| Contact | Email, lowercased and trimmed | Full name plus company domain, LinkedIn URL if you store it |
| Company | Root domain without protocol or "www" | Company name plus country |
Standardize those keys first. "Sales@Acme.com" and "sales@acme.com" are one address, and a tool that compares them as text will not see it.
What HubSpot does
All HubSpot facts here were checked on 18 October 2026. HubSpot matches contacts on email and companies on primary company domain name. A manual duplicate is blocked with an alert. On import, a contact whose email matches an existing one updates that record and changes only the mapped properties, and if several existing records share the email, the row fails with an error. A file with no unique identifier creates a new record for every row. Companies created through the API are not deduplicated by domain, including those from installed third-party sync apps (HubSpot: deduplicate records).
For records already in the system, HubSpot's duplicate tool compares contacts on first name, last name, email, IP country, phone, zip code and company name by default, and companies on domain name, company name, country or region, phone number and industry. It compares values daily and calculates results as new records are created. You can define up to two custom rules per object using up to nine properties. Managing individual duplicates needs Professional or Enterprise, and custom rules need Data Hub Professional or Enterprise. Displayed pairs are capped at 10,000, 30,000 or 100,000 depending on plan (HubSpot: manage duplicates).
What Salesforce does
Salesforce splits the job in two. Matching rules identify possible duplicates, and duplicate rules decide what happens next. An active matching rule does nothing until a duplicate rule uses it, and a duplicate rule can hold up to three matching rules. You choose whether to block users from creating duplicates or to warn them and let them save, and admins can report on the duplicates created after a warning was bypassed (Salesforce Trailhead, checked 18 October 2026).
Our rule of thumb for either system: block on an exact email match for contacts and an exact domain match for companies, and warn on the fuzzy keys. Blocking fuzzy matches rejects legitimate people who share a surname and an employer.
Merge mechanics: what survives
Merging is where data gets lost, so read what each system keeps before you run one. Facts below were checked on 18 October 2026.
| Question | HubSpot | Salesforce |
|---|---|---|
| How many records at once | Two records of the same object | Up to three leads at once in Lightning Experience (leads page) |
| Which record stays | You choose the primary record | You choose the principal lead, or the primary contact |
| Conflicting values | Primary's values generally win, and the secondary's fill empty ones | You choose the value to keep for each field on leads |
| Created date | Oldest create date kept | Contacts keep Created By and Created Date from the oldest record |
| Activity history | Timelines of both records appear on the new record | Related items such as campaigns and activities move, with exceptions |
| Secondary contact's email becomes a secondary email address | Not covered on the pages we read | |
| Undo | Not possible | Not covered on the pages we read |
Further HubSpot details: the merged record gets a new Record ID, the lifecycle stage furthest down the funnel is kept, merges fail when the two records have a combined total of 250 or more merges, activities can take up to 30 minutes to sync, and the user needs Merge records or Super Admin permission (HubSpot: merge records). The page states that it is not possible to unmerge records.
Salesforce details: merging leads needs Delete permission on leads (Salesforce Help: merge duplicate leads). For contacts, Chatter feeds come only from the primary record, hidden and read-only field data such as sharing settings is kept from the primary, and if a non-master contact has a portal user, that user is deactivated (Salesforce Help: considerations for merging duplicate contacts).
Because HubSpot cannot unmerge, export the affected records first. Pick the primary record as the one with the most complete history and the correct owner, not the newest. Merge exact matches in bulk and fuzzy matches in small reviewed batches.
Required fields, standardization and enrichment
A required field is one you cannot send or route without. Keep the list short, or people will fill it with junk to get past the form.
| Field | Format rule | Required at creation |
|---|---|---|
| Lowercase, trimmed, verification status stored | Yes | |
| Company domain | Root domain, no "https://" and no "www" | Yes |
| Source | Campaign, list or tool that created the record | Yes |
| Owner | A named user or queue | Yes |
| Job title | Raw title kept, plus normalized function and seniority | No |
| Country | Two-letter ISO code | No |
| Phone | E.164 format, such as +14155550123 | No |
| Last verified | Date of the last email check | Set by the tool |
| Suppression status | Yes or no, plus the reason and date | Set by the workflow |
Normalize titles into a function (sales, marketing, operations) and a seniority level. Segmenting on raw titles misses "Head of Revenue Operations" when you search for "RevOps".
Enrichment
Fill gaps from tools, and set a source order so an enriched value never overwrites one a person typed. We use Clay, Prospeo and enrichment APIs for this, with Sales Navigator and Crunchbase as inputs on some builds. Verify every email before it enters a sequence, and stamp the last-verified date when you do. Our Clay list-building playbook covers the waterfall approach in detail.
Two engagements show the scale we have worked at. A marketing agency got 10K+ leads a month with 80% better data accuracy (our work). A UK B2B SaaS company ended up with 50K+ verified leads and 3x campaign performance, built with Sales Navigator, Crunchbase and enrichment tools (our work). Our list building and CRM cleanup service covers this work.
Ownership and routing rules
Without an owner, a record has nobody responsible for its follow-up. With two owners, the same prospect gets two emails. Write the rules down so they can be tested.
| Situation | Rule |
|---|---|
| New company enters from a campaign | The campaign owner owns the company, and contacts inherit that owner |
| A new contact appears at an owned company | The company's owner gets the contact |
| No owner after one business day | The record goes to a named queue manager |
| Owner leaves or changes role | Open records move to the successor in one batch |
| Two reps claim the same company | The earlier recorded touch wins |
| Contact asks to stop | Suppression overrides every owner and every sequence |
Reply routing uses the same fields. When a positive reply arrives, the workflow needs the owner and the fit score on the record or it has nobody to notify. The build for that is in the AI qualification and routing playbook.
A one-week cleanup plan
This plan assumes a CRM of up to a few hundred thousand records and one person doing the work. Larger databases need more days for the review steps.
| Day | Work | Output |
|---|---|---|
| Monday | Export all contacts, companies and deals. Count records missing required fields and count duplicate emails and domains. Agree the match keys and the rule for choosing a primary record. | Backup file and a baseline count |
| Tuesday | Standardize emails, domains, countries and phone formats. Then run the duplicate tool and merge exact matches. | Exact duplicates removed |
| Wednesday | Review fuzzy duplicates in batches and merge the confirmed ones. Set the system to block exact duplicates on create. | Fuzzy duplicates reviewed, creation rule live |
| Thursday | Enrich missing required fields. Verify emails and stamp the last-verified date. Move records that fail verification to a quarantine view instead of deleting them. | Required-field coverage up, quarantine list |
| Friday | Assign owners to every unowned company. Switch on the ownership and routing rules. Save the views you will use for the monthly audit. | Zero unowned companies, audit views saved |
The following Monday, repeat Monday's counts and compare. Four numbers are worth tracking each month: duplicate pairs per 1,000 records, the share of records with every required field, the share verified in the last 90 days, and the share of companies with an owner. If the duplicate count climbs again within a month, the cause is almost always an import or an API integration that bypasses your rules, so check those first. The HubSpot import and API behavior described above is a common source.
Questions
How often does B2B contact data go out of date?
HubSpot's decay simulation cites Marketing Sherpas research at 2.1 percent a month, which it annualizes to 22.5 percent, but gives no link to the underlying study. We treat it as an order of magnitude and re-verify contacts older than 90 days before sending.
What should I use to match duplicate contacts?
Lowercased email for exact matches, and full name plus company domain for fuzzy matches that a person reviews. For companies, use the root domain first and company name plus country second.
Can I undo a HubSpot merge?
No. HubSpot's documentation states it is not possible to unmerge records, so export the affected records before you merge anything.
Do I need a paid HubSpot tier to manage duplicates?
For HubSpot's duplicate management tool, the documentation says Professional or Enterprise is required, and custom duplicate rules need Data Hub Professional or Enterprise (checked 18 October 2026). The deduplication page also says HubSpot blocks you from manually creating a contact with an existing email or a company with an existing domain.
Sources
- HubSpot: Database decay simulation
- U.S. Bureau of Labor Statistics: Employee Tenure news release
- HubSpot Knowledge Base: Deduplicate records in HubSpot
- HubSpot Knowledge Base: Review and manage duplicate records
- HubSpot Knowledge Base: Merge records
- Salesforce Trailhead: Prevent duplicate data in Salesforce
- Salesforce Help: Merge duplicate leads in Lightning Experience
- Salesforce Help: Considerations for merging duplicate contacts
Worked examples are illustrations unless a case study is linked. How we write and check these pages.