CRM data hygiene is the ongoing work of keeping records deduplicated, complete and consistent, so lead routing, segmentation and attribution work the way you designed them. A one-time cleanup clears the backlog. What keeps the data clean afterward is clear ownership, validation where data enters and automated checks that catch drift early.
What dirty CRM data costs you
Bad data rarely causes one big failure. It breaks a dozen processes quietly, and each team blames a different tool.
| Symptom | Usual data cause | Who notices first |
|---|---|---|
| Two reps call the same lead | Duplicate contacts with different emails or casing | Sales, then the prospect |
| Leads land in the wrong territory | Country entered as “USA”, “U.S.” and “United States” | Sales managers |
| Nurture emails miss half the target segment | Job titles in free text, seniority never classified | Marketing |
| Pipeline report double-counts revenue | Duplicate companies, each with its own deal | Finance or the board |
| First-touch source shows “Offline” or blank | Original source overwritten during a merge or import | Whoever owns attribution |
| Email platform bill keeps climbing | Bounced, fake and inactive contacts still counted | Whoever pays the invoice |
The biggest cost doesn’t show up in any report: reps stop trusting the CRM and go back to spreadsheets, and the data decays faster because the people closest to customers stop updating it.
Auditing duplicates, missing fields and junk records
Start with an export of every core object: contacts (and leads, if you use them), companies or accounts, and deals. Keep this export as your backup before you change anything. Then run these checks.
| Check | How to find it | Default fix |
|---|---|---|
| Duplicate contacts | Group by lowercased, trimmed email; then by full name plus company domain | Merge |
| Duplicate companies | Group by normalized root domain (strip “www”, subdomains and paths) | Merge, then re-associate contacts and deals |
| Contacts without a company | No associated company or account | Associate by email domain; leave free-email addresses alone |
| Missing routing fields | Fill rate of country, employee count, industry and lifecycle stage | Enrich, then make required at entry |
| Ownerless records | Owner empty, or owner is a deactivated user | Reassign using your routing rules |
| Junk | Fake names, disposable domains, your own staff, competitor domains, hard bounces | Delete or exclude from marketing |
| Stale records | No engagement or activity for a long period and no open deal | Suppress, then archive |
Measure fill rate only for fields something depends on. A field no workflow, report or person uses doesn’t need to be complete; it needs to be retired. Record the audit counts as your baseline for the monthly checks.
Deduplication rules and merge strategy
Merging is where damage is hardest to undo. Write two sets of rules first.
Matching rules: what counts as a duplicate
Sort potential duplicates by confidence:
- High confidence, auto-merge: same email after lowercasing and trimming. Same root domain for companies.
- Medium confidence, human review: same full name and same company domain but different email addresses, often a personal and a work address.
- Low confidence, review in batches: fuzzy company-name matches like “Acme Inc” and “Acme Holdings”, which may be a parent and a subsidiary rather than the same account.
Salesforce uses matching and duplicate rules; HubSpot deduplicates contacts by email and offers duplicate management tools. Neither replaces judgment on the lower tiers.
Survivorship rules: which values win
When two records merge, many CRMs default to the primary record’s values for most fields, so choosing the primary is a decision, not a click. Check how your CRM handles each field type, then set rules like these:
- Primary record: the one with the open deal. If neither has one, the one with the most recent activity.
- Original source and first-touch fields: keep the earliest value. This is where attribution quietly breaks.
- Latest source: keep the most recent value.
- Email: keep the work address as primary; store the other as secondary if your CRM supports it.
- Lifecycle stage: keep the furthest stage reached.
- Owner: owner of the open deal, otherwise the rep with the most recent activity.
- Consent and opt-outs: the most restrictive value always wins. A merge must never resubscribe someone.
Merge companies before contacts, so contacts land under the right account and deals roll up correctly.
Standardizing picklists, countries and job titles
Free-text fields are where consistency dies. Any field used for routing, segmentation or reporting should be a picklist with defined values.
Countries and states. Use a fixed country list based on ISO country names and codes, and map every existing variant to it once. Do the same for states or regions if territories depend on them. Your forms should use the same dropdown, so new data arrives clean.
Industry. Pick one taxonomy with a manageable number of values, then map your enrichment provider’s categories to it. Don’t let each tool write its own industry labels into the same field.
Job titles. Keep the raw title as free text, since reps use it in conversation, and derive two picklists from it: job function and seniority. Keyword rules cover the common titles, and AI classification handles the leftovers. The AI lead enrichment and routing guide covers how to build that step.
| Raw title | Function | Seniority |
|---|---|---|
| VP Growth | Marketing | VP |
| Sr. Mgr, Revenue Operations | Operations | Manager |
| CEO & Co-Founder | Executive | C-level |
| Dir. of Engineering | Engineering | Director |
| Growth Marketing Lead | Marketing | Individual contributor |
The last row shows why rules need review: “Lead” can mean a team lead or an individual contributor, so decide how to classify it and write that down.
Three rules for every picklist: each value has a one-line definition, “Other” gets reviewed monthly, and retired values get mapped to a new value instead of deleted.
Required fields and validation at the point of entry
Cleanup fixes the past. Validation fixes the future. List every way data enters your CRM, because each one needs its own rules:
- Forms: require only the fields routing needs. Use dropdowns for country and company size. Capture UTMs in hidden fields.
- Imports: one approved template with fixed columns, one person who approves imports, and an “import batch” property on every imported record so a bad import can be found and reversed.
- Integrations: product sign-ups, enrichment, events, chat and billing tools. Each integration writes only to fields it owns and fills blanks rather than overwriting values a person entered.
- Manual entry by reps: stage-based required fields. HubSpot and Salesforce both let you require fields when a deal moves into a specific stage, and both support validation rules for field formats, though the options vary by platform and edition.
Typical rules: a closed-lost reason when a deal is lost, amount and close date from the proposal stage onward, and a bare-format domain on every company. Don’t over-require. If reps must fill ten fields to log a call, they’ll type “x” into all of them. Every required field should map to a workflow, route or report that breaks without it.
Ownership and governance: who maintains what
Data stays clean when every field has a named owner. At a small company one person may hold several of these roles. Name them anyway.
| Area | Owner | Responsibilities |
|---|---|---|
| Schema, integrations, merges | CRM admin or RevOps | New fields, picklist changes, duplicate rules, sync errors |
| Lead data and consent | Marketing ops | Forms, lead source, lifecycle stages, UTM fields, opt-outs |
| Deal and owner data | Sales managers | Stage fields, close dates, owner assignment, rep compliance |
| Customer and renewal data | Customer success lead | Health scores, renewal dates, expansion fields |
| Records you touch | Everyone | Fix what’s wrong on the record you’re working |
Back this up with a field dictionary: one row per field listing its name, definition, allowed values, which system writes to it, its owner and what uses it. Any new field needs a request that names the report or workflow it serves. A field no one can connect to a use gets hidden, then archived at the next quarterly review.
Picklist edits, new integrations and bulk imports go through the owner, not whoever has admin rights that day. If you’re choosing a CRM, the HubSpot vs Salesforce comparison covers how each handles admin control.
This governance layer is part of how I set up lifecycle marketing and CRM for clients, because segments and nurture flows are only as good as the fields they filter on.
Automated monthly checks
Build each check as a saved report filtered to show exceptions, so a healthy CRM returns a near-empty list. Then a scheduled CRM workflow or a small n8n job posts the counts to a shared channel each month.
- New duplicates created this month, broken down by source (form, import, integration)
- Fill rate of routing fields on records created this month
- Records with no owner or a deactivated owner
- Picklist fields holding values outside the allowed list, and the share of “Other”
- Contacts without an associated company
- Open deals with a close date in the past
- Hard bounces and unsubscribes synced from the email platform
- Imports this month: how many, how large, who approved them
- Integration sync errors
- Fields created this month, and whether each is in the dictionary
Automate the fixes that don’t need judgment: formatting phone numbers, mapping country variants, assigning owners by rule, associating contacts to companies by domain. Send everything else to the field’s owner.
Watch the trend, not just the count. A spike in duplicates from one source usually points to a single broken form or integration, and fixing that one entry point prevents more than any cleanup will.
Get it built
If your routing, segments or attribution reports depend on CRM data nobody trusts, I can run the cleanup and set up the rules that keep it clean. Start with a Growth Audit, $1,500 fixed and credited if we continue. See pricing or get in touch.