“Our CRM data is a mess” is the most common self-diagnosis in revenue operations, and also the least useful one. Messy how? Messy where? Messy enough to matter? Without numbers, “messy” justifies either total panic or total inaction, and usually alternates between the two.
Here’s the 90-minute check I’d run on any HubSpot (or Salesforce) instance to turn “a mess” into seven specific measurements. You need nothing but the access you already have and a spreadsheet. None of this fixes anything — that’s deliberate. Measurement first; the fixes rank themselves once you can see the numbers.
Before you start: hygiene only matters where decisions happen
The goal is not clean data. The goal is data clean enough to support the decisions running on it. A blank “Fax number” field matters not at all; a blank field that your routing or scoring depends on is a live leak. So first, write down the five to ten fields your automations and reports actually key on — lifecycle stage, owner, country/region, company size, source, and whatever your scoring model reads. Those are the fields the whole check focuses on.
The seven checks
1. Critical-field completeness (15 min). For each decision-critical field: what percentage of active records (created or engaged in the last 12 months) have it populated? Scope matters — completeness across your whole historical database is a vanity metric. Anything under ~90% on a field that routing or reporting depends on is a finding.
2. Duplicate rate (15 min). Use the native duplicate tools for a first pass, then do one honest manual sample: pull 50 random companies and search each by domain. Native tools catch exact-ish matches; the expensive duplicates are companies entered under two names, and only sampling finds those. Duplicates aren’t a cosmetic problem — they split engagement history, which corrupts scoring and attribution simultaneously.
3. Ownership integrity (10 min). Active records owned by deactivated users, generic users, or nobody. This number should be zero and almost never is. Every one of these is a lead or account no human is responsible for.
4. Stage plausibility (15 min). Records whose lifecycle stage contradicts their reality: MQLs with no activity for 6+ months, opportunities with close dates in the past, “open” deals untouched for a quarter. Stage rot is what makes funnel conversion rates lie — see the lifecycle piece on recycling paths, which is the structural fix.
5. Picklist chaos (10 min). Export the values actually present in your key dropdown fields. Look for near-duplicates (“UK”, “United Kingdom”, “GB”), retired values still in live use, and free-text fields that should have been picklists. Every variant is a hole in someone’s report filter.
6. Source coverage (10 min). What share of the last quarter’s contacts have a meaningful original source? “Offline sources” or blank at above ~15–20% means your channel reporting is running on a partial dataset — worth knowing before the next budget conversation.
7. Decay estimate (15 min). B2B contact data rots fast — people change jobs constantly, so a meaningful slice of your database goes stale every year on job title, company, and email alone. Sample 30 contacts untouched for 18+ months against LinkedIn. The hit rate tells you how much of your “database size” is real.
The check that tends to shock a team is the decay estimate — sampling records untouched for eighteen months against LinkedIn and finding how many are people who’ve since changed jobs. Teams quote their contact count as an asset; the sample often reveals a large slice of it is stale on title, company, or email, which means deliverability, routing, and any “total addressable” figure built on it were all overstated. The cost isn’t just wasted sends — it’s targets and decisions sized against a database that was smaller and older than anyone admitted. Once the real reachable number is known, everything downstream gets more honest.
Reading the results
Score each check red/amber/green against the thresholds above and resist the urge to fix everything. The prioritisation rule: fix hygiene issues in the order of the decisions they corrupt, not the order of their size. A 4% ownership gap on inbound leads (breaks routing, loses revenue this week) outranks a 40% completeness gap on a field nothing reads.
And put a date in the calendar to re-run the check quarterly. Hygiene isn’t a project; it’s a ritual — the same 90 minutes, the same seven numbers, trending in the right direction. That trend line is also, incidentally, the single most persuasive artefact you can hand a leadership team that’s stopped trusting the reporting.
—
This self-check is a light version of lenses one and three of the Pipeline Leak Audit — the full version adds evidence, cost estimates, and the fix roadmap. Run the 90 minutes first; if the reds worry you, book a free health check and bring the numbers.
