Pulse - Value Added
FRACTIONAL CRO · MARYLAND-BASED, NATIONWIDE · $0→$200M

Kory White

RevOps & Revenue Leadership

Get a free 30-minute revenue checkup — Kory reviews your pipeline and forecast, then names the 1–2 fixes that move revenue fastest. 25 yrs scaling teams $0→$200M.

Free 30-min revenue checkup →
Hire a Fractional CROHow We Help?LinkedInRésuméCRO Syndicate
← Library
Knowledge Library · pulse-reviews
Gate <13✓ IQ Certified10/10?

How do I clean a CRM that has 5 years of bad data?

KnowledgeHow do I clean a CRM that has 5 years of bad data?
📖 2,789 words🗓️ Published Jul 20, 2026
Direct Answer

To clean a CRM with 5 years of bad data, start by running a data audit to identify duplicates, outdated contacts, and incomplete fields, then prioritize fixing the most critical records first. Use automation tools to merge duplicates and standardize formats, but plan for a manual review of high-value accounts. Expect the full cleanup to take weeks or months, depending on the volume of records.

Declare CRM bankruptcy. Archive deals older than 12 months read-only, run a 2-week one-time cleanup on accounts with deals touched in the last 90 days, then enforce a forward-only data contract enforced by validation rules + enrichment webhooks. Total project: 4 weeks elapsed, $20K-$40K (mostly Apollo or ZoomInfo enrichment + 1 RevOps lead + 1 analyst at 0.5 FTE). The reason this beats a 6-month historical cleanup: per Validity's 2025 State of CRM Data Report, 91% of CRM data is incomplete, stale, or duplicated within 12 months, and Salesforce's own Data Quality whitepaper says ~30% of records become inaccurate per year regardless of cleanup effort. You cannot out-clean entropy. You can only out-govern it. Two of these projects in three fail because teams skip the forward contract and just deduplicate; the third fails because management refuses to enforce. Plan accordingly.

flowchart TD A[Identify Data Issues] --> B[Backup Current CRM] B --> C[Remove Duplicate Records] C --> D[Standardize Formats] D --> E[Validate Missing Fields] E --> F[Enrich with Clean Sources] F --> G[Test Data Integrity] G --> H[Maintain Ongoing Hygiene]

Why traditional cleanup fails (the math)

How do I clean a CRM that has 5 years of bad data? — Why traditional cleanup fails (the math)

Most RevOps teams attack the symptom: "let's deduplicate, fill empty fields, standardize names." The brutal arithmetic:

ROI is not just negative; it is *structurally* negative. The fix is not more cleaning. It is a new contract.

The bankruptcy approach (real mechanics)

How do I clean a CRM that has 5 years of bad data? — The bankruptcy approach (real mechanics)

Step 1 - Define the active set (Day 1-2)

Important Salesforce governor caveat: a scheduled flow that touches >50K Account records in a single transaction will hit the SOQL row governor limit. Use a Queueable Apex job with batches of 200 records, or chunk the flow with a For Each loop that commits in batches. Do not learn this in production; learn it in a full-copy sandbox.

How do I clean a CRM that has 5 years of bad data — figure 1

In Salesforce, create a custom field Active_Cohort__c (checkbox) and a scheduled flow that sets it = TRUE for any Account where: Opportunity.LastModifiedDate &gt;= TODAY() - 90 OR Account.Stage = &#39;Customer&#39; AND Renewal_Date__c &lt;= TODAY() + 365 OR An Activity (Task/Event) was logged on the Account in the last 90 days.

Everything else is the Archive cohort. Archive cohort gets moved to a separate Salesforce record type (Account_Archive) with read-only page layouts. You are not deleting; you are removing it from list views, reports, and dashboards. This single move usually shrinks the "active" surface by 70-85%.

Step 2 - Deduplicate the active cohort (Week 1)

Use Salesforce Duplicate Management (setup docs). Create a Matching Rule with:

Then a Duplicate Rule that runs the matching rule on insert/update and fires a "Merge Required" alert. For existing dupes, run DemandTools or Cloudingo (both have free trial tiers). Master record selection rule: keep the record with (a) most recent Opportunity activity, (b) tie-break on most populated fields, (c) tie-break on oldest CreatedDate. Document this in a 1-page runbook so the merge decisions are defensible later.

How do I clean a CRM that has 5 years of bad data — figure 2

Step 3 - Enrich, don't fill (Week 2)

Every active Account gets pushed through Apollo or ZoomInfo bulk enrichment API. Apollo's 2026 list price is roughly $0.10-$0.20/record at volume; ZoomInfo runs $0.40-$1.00. For 5,000 active accounts, budget $500-$5,000.

Fields to enrich (non-negotiable): Industry, Employees, Revenue_Band__c, HQ_Country__c, Tech_Stack__c (if available). Do not try to fill Notes, Description, or any free-text field with enrichment data; those are human-entered context and dirty enrichment will pollute search.

Step 4 - Forward data contract (Week 3-4)

This is the only step that compounds. Implement four hard validation rules in Salesforce (or HubSpot equivalent):

  1. Lead/Contact creation: Email != null AND Email NOT LIKE &#39;%@gmail.com&#39; AND Email NOT LIKE &#39;%@yahoo.com&#39; (block free webmail on B2B lead intake) OR Source = &#39;Inbound Demo&#39;.
  2. Opportunity creation: 5 required fields enforced by validation rule - Account, Contact_Role__c, Industry__c, Stage, ACV__c. No exceptions.
  3. Stage advancement: Rule blocks Stage > 'Discovery' if Decision_Maker_Identified__c = FALSE. Same for Stage &gt; &#39;Proposal&#39; if Mutual_Action_Plan__c = NULL.
  4. Closed-Won handoff: Apex trigger (OpportunityHandoffTrigger) requires CSM checkbox CS_Handoff_Verified__c = TRUE before stage flips to 'Closed Won'. The trigger throws addError(&#39;CS handoff verification required before close&#39;) if false. CSM has 5 fields to verify; if wrong, they un-check and email the rep. Code lives in version control, deployed via SFDX/CI, never edited in production.
How do I clean a CRM that has 5 years of bad data — figure 3

Plus one webhook: Apollo enrichment fires on Lead/Account creation (Zapier or native Salesforce flow with HTTP callout). New record gets industry/size in <2 minutes. Zero rep effort.

Cleanup project scope (the full 4-week plan)

WeekWorkstreamOwnerEffortDeliverable
1Define Active cohort, archive restRevOps Lead5 daysActive_Cohort__c flag populated; Archive record type live
1-2Deduplicate active accounts (DemandTools/Cloudingo)Data Analyst8 days<2% dupe rate on active cohort
2Enrich active cohort (Apollo/ZoomInfo bulk)Data Analyst3 days95%+ fill on Industry/Employees/Revenue
3Build 4 validation rules + 1 enrichment webhookRevOps + Salesforce Admin5 daysRules in production, tested in sandbox first
3-4Train reps + managers on new contractRevOps Lead2 days30-min training, written 1-pager, manager sign-off
4Run first monthly audit, calibrate rulesRevOps Lead2 daysAudit report, 3-5 rule tweaks

Budget: $20K-$40K all-in. Apollo enrichment $5K. DemandTools/Cloudingo $3K-$8K (3-month license). 0.5 FTE RevOps lead for 4 weeks (~$15K loaded). 0.5 FTE data analyst (~$8K). No external vendor required.

Governance rules (the part that compounds)

  1. Inbound prospect: Auto-enriched within 2 hours via Apollo/ZoomInfo webhook. Rep cannot create a Lead without an email domain that resolves to a company record.
  2. Outbound prospect: Rep clicks "Add to Salesforce" from Apollo/Outreach plugin (not manual entry). The plugin fills 80% of fields; rep verifies in 30 seconds.
  3. Deal creation: 5 required fields enforced at the database layer (Account, Contact Role, Industry, Stage, ACV). Validation rule fires on save. No "I'll fix it later."
  4. Deal close: Apex trigger requires CS handoff checkbox. CSM verifies 5 fields (contact email, company legal name, billing country, ACV, contract end date) before stage flips. If wrong, CSM unchecks; rep gets a Slack ping.
  5. Monthly audit: Each manager runs a saved report on their team's 10 oldest open opps. Wrong/missing fields = coaching. Two violations in 90 days = comp accelerator suspended for the quarter. Public, predictable, applied uniformly.

This is not "best practices"; it is forcing the cost of bad data onto the person who created it, in real time. That is the only mechanism that works.

How do I clean a CRM that has 5 years of bad data — figure 4

Tools (with real prices)

*HubSpot equivalents in parentheses where applicable. Most of this approach maps 1:1 to HubSpot Operations Hub Enterprise.*

Bear Case (when bankruptcy fails)

This approach is wrong in three scenarios:

  1. You are in a regulated industry where archived records still need active monitoring - e.g., pharma deal records under HIPAA, financial services under FINRA, or EU customers under GDPR retention rules. Archiving without active governance can violate retention policy. Fix: archive to a compliant cold-storage system (Salesforce Big Objects, S3 with Glacier, or your records-management platform) with an audit log, not just a record-type change. SOC2/SOX auditors will ask for the audit log on day 1; if you cannot produce one, you have a finding.
  2. Your old data is your moat - if you sell to the same accounts repeatedly (renewals + expansion at >70% of revenue), the historical context (champions who left, product complaints, deal stalls) is institutional knowledge. Archiving it kills the AE's first-call advantage. Fix: keep the *contact* and *activity* history hot for any account that ever signed a contract; only archive cold prospects. Quick math: if 70% of next year's revenue comes from existing accounts and the average AE saves 30 minutes of research per renewal call by having the history hot, on a 200-rep org with 10 renewal calls/quarter that is 100,000 minutes (~$200K of fully-loaded rep time) - more than the cleanup budget.
  3. Your reps will revolt and game the validation rules - if the org has weak management, reps will create fake Industry = &#39;Other&#39; and ACV = 1 placeholder records to bypass rules. Common gaming patterns: Industry = &quot;Other&quot; on 60% of new accounts, ACV = 1 placeholder records that get fixed "later" (never), copy-pasted Decision_Maker_Identified flags with no actual person named, fake Mutual_Action_Plan = &quot;TBD&quot; text. The rules become noise, the data gets worse, trust collapses. Fix: do not roll out validation rules without a 90-day audit + consequence plan. If your sales leaders won't enforce, do not start. The rules without enforcement are negative-value.
How do I clean a CRM that has 5 years of bad data — figure 5

If any of those three apply, do not declare bankruptcy. Do a slower, surgical cleanup with a vendor (Cloudingo + a 2-person consulting team for 8 weeks, $60K-$100K), and skip the validation rules until you have management buy-in.

Success metrics (90 days post-cleanup)

What NOT to do

What 10/10 success looks like at month 6

Action (this week)

  1. Pull a count of accounts where LastActivity &gt; TODAY() - 90. That is your active cohort size.
  2. Run a duplicate report: SELECT Name, Website, COUNT(Id) FROM Account GROUP BY Name, Website HAVING COUNT(Id) &gt; 1. That is your dupe baseline.
  3. Quote Apollo or ZoomInfo for bulk enrichment of N records (where N = active cohort size).
  4. Block 4 weeks on the calendar. Get CRO sponsor sign-off in writing. Start Monday of week 1.
How do I clean a CRM that has 5 years of bad data — figure 6

Related reading: see /knowledge/q110 for stack selection (Outreach/Salesloft/Apollo), /knowledge/q112 for attribution implications of clean data, /knowledge/q115 for the org chart that owns this work, /knowledge/q300 for how clean pipeline data shows up in forecast reliability, and /knowledge/q250 for what CSM notes + product usage data should feed back into the CRM post-handoff.

TAGS: crm-cleanup, data-quality, salesforce-dedup, data-governance, database-maintenance, validity-demandtools, apollo-enrichment

flowchart LR A[5 Years Bad Data] --> B[Define Active Cohort] B --> C[Archive Rest Read-Only] C --> D[Deduplicate Active] D --> E[Bulk Enrich via Apollo] E --> F[4 Validation Rules] F --> G[Enrichment Webhook] G --> H{30 Days In} H -->|Data Quality| I["95%+ Complete"] H -->|Rep Hours| J[CRM Time Halved] H -->|Forecast| K[Variance -200bps] I --> L[Trust Restored] J --> L K --> L

Related on PULSE

Sources

FAQ

What does "CRM bankruptcy" mean in practice? It means you stop trying to fix all historical data. You archive everything older than 12 months into a read-only state, then focus cleanup only on records with recent activity. This approach typically saves 60–80% of the time compared to a full historical scrub.

How much does a 4-week CRM cleanup actually cost? Realistic budgets range from $20,000 to $40,000. That covers enrichment tools like Apollo or ZoomInfo, a RevOps lead, and a part-time analyst. Costs vary based on record volume and whether you already have enrichment subscriptions.

Will my team actually enforce the new data rules afterward? Only about one in three projects succeed long-term, because management often refuses to enforce validation rules or block bad imports. The forward contract—automated validation and enrichment webhooks—is what makes cleanup stick, not the initial deduplication.

Can I just deduplicate and move on? No. Roughly two out of three projects that skip the forward contract fail within a year. Duplicate removal alone doesn't stop new bad data from entering, and Salesforce reports about 30% of records become inaccurate annually regardless of cleanup effort.

How long does the active cleanup phase take? The focused cleanup on accounts with deals touched in the last 90 days typically runs two weeks. The full project—including planning, archiving, rule setup, and testing—takes about four weeks elapsed time.

What happens to the old data I archive? It stays in your CRM but becomes read-only. You can still reference it for reporting or audits, but it won't pollute your active pipeline or trigger workflows. This preserves historical context without requiring ongoing maintenance.

Download:
Was this helpful?  
Sources cited
salesforce.comhttps://www.salesforce.com/products/sales-cloud/salesforce.comhttps://www.salesforce.com/products/einstein/bvp.comhttps://www.bvp.com/atlas/state-of-the-cloud-2026joinpavilion.comhttps://www.joinpavilion.com/compensation-reportbridgegroupinc.comhttps://www.bridgegroupinc.com/blog/sales-development-reportgartner.comhttps://www.gartner.com/en/sales/research
⌬ Apply this in PULSE
Free CRM · Revenue IntelligenceAudit pipeline, score reps, ship the fixGross Profit CalculatorModel margin per deal, per rep, per territory