-
1
Audit the current state with counts and completeness
You cannot clean what you cannot measure. Pull hard numbers before you touch a single record. Export counts for every object and compute completeness percentages for the fields reports and workflows actually rely on. Most teams discover that half their custom fields are below 20% populated and that one picklist has 14 variants of the same stage. Capture these metrics in a shared dashboard so you can show real cleanup progress to leadership, not vibes. This audit becomes your baseline and the yardstick you measure the cleanup against.
- Export row counts for Accounts, Contacts, Leads, Opportunities, Activities, and every custom object
- Compute fill-rate percentage for each field used by a report, workflow, or integration
- Flag duplicate indicators: identical emails, identical normalized company names, overlapping phones
- Identify picklist drift: list every distinct value in Status, Stage, Industry, Lead Source, and Country
Tip: Snapshot this audit at week zero and rerun it after each pass. A visible drop in duplicate counts and a rising fill rate is how you keep executive air cover.
-
2
Define your dedupe keys and merge rules
Dedupe fails when teams argue about matching logic mid-merge. Lock the rules before you run anything. Pick a primary key per object (normalized email for Contacts and Leads, normalized domain plus company name for Accounts), then layer secondary keys for near-matches. Decide the merge-winner precedence (newest activity, highest completeness, owner tenure) and write it down. Get sales and marketing to sign the document. The rule set should be short enough to fit on one page and specific enough that two admins would merge the same way.
- Pick one primary dedupe key per object and one or two secondary keys for fuzzy matches
- Normalize before comparing: lowercase email, strip plus-aliases, standardize domain, trim whitespace
- Define the survivor rule: which record wins and which fields merge from the loser
- Document the exceptions: franchise accounts, parent-child orgs, and intentional multi-record cases
Tip: Write the rules as if a brand-new ops hire had to execute them without you in the room. If a rule needs tribal knowledge, it is not a rule yet.
-
3
Run dedupe by merging, not deleting active users or owners
Execute the merges in a sandbox first, then in production in waves (Leads, Contacts, Accounts, Opportunities). Always merge, never hard-delete, when the loser record carries history, activities, or an owner who is still an active user. Strkr treats active users as never-hard-deletable, and the same discipline applies to the records they own: merging preserves the history and reassigns relationships cleanly, while a delete orphans activities and breaks audit trails. Run merges in batches small enough to review and reversible via your backup.
- Run the first merge batch against the sandbox and spot-check 20 random merges end-to-end
- Merge in waves by object, lowest-risk first: Leads, then Contacts, then Accounts, then Opportunities
- Preserve activities, notes, attachments, and related records on the surviving record
- Reassign ownership deliberately when the surviving record has an inactive owner, never silently
Tip: If a losing record has an active user as owner or recent activity, the default is merge-and-preserve, not delete. Hard-deletes are reserved for true garbage: test rows, obvious junk leads, bot submissions.
-
4
Fill the gaps on required and report-critical fields
With duplicates gone, focus on the fields your reports and automations actually read. Export records with empty required fields and route them to the right owner for enrichment, not to a central admin who does not know the account. For accounts, use enrichment providers or domain-based lookups to fill industry, employee count, and country. For contacts and leads, use the same enrichment plus owner-driven corrections. Set a deadline. Any record that cannot be enriched by the deadline moves to archive, not into reports.
- List required and report-critical fields per object and export records missing any of them
- Route gap-fill tasks to record owners with a deadline, not to a single central queue
- Use enrichment providers for firmographics and verified contact data where owner input is thin
- Send unenriched records that miss the deadline to an archive segment, not to active reports
Tip: A field that nobody will fill is a field that should not be required. Trim ruthlessly before you nag reps for the fourteenth time this quarter.
-
5
Standardize picklists and categorical fields
Picklist drift is the silent killer of dashboards. Collapse variants of the same value into one, then lock the field so free-text entry is disabled. Industry, Country, Lead Source, Status, and Stage are the usual offenders. Build a one-time crosswalk from every historical value to the new canonical value, run a bulk update using the crosswalk, and only then publish the new picklist. Document the canonical list in your admin wiki so new teammates do not reinvent the mess six months later.
- For each categorical field, list every distinct historical value and the record count behind it
- Build a crosswalk from historical values to the canonical values the business will use going forward
- Run the bulk update in sandbox, verify counts, then run it in production
- Lock the field: no free-text, no admin-only "other" bucket that becomes next year's drift
Tip: Country and Industry are the two picklists that pay back cleanup fastest, because routing, segmentation, and territory rules all read from them.
-
6
Archive stale records without hard-deleting active users
Not every old record deserves to clutter active views. Define an archive policy: Leads with no activity in 18 months, Opportunities closed-lost over 24 months old, Contacts whose owning Account is archived. Flip these to an Archived segment or inactive status rather than deleting them. Hard-delete is reserved for true noise (bot form fills, test rows, obvious junk) and is never applied to records owned by an active user without an explicit owner-change step first. Archiving preserves audit trails, keeps compliance happy, and keeps the active workspace focused.
- Write the archive rule per object: age thresholds, activity thresholds, status thresholds
- Flip qualifying records to Archived status or move them to an Archived segment, do not hard-delete
- Reassign owners of archived records off active-user accounts if ownership is required by schema
- Keep archived records searchable but excluded from default views, reports, and routing automations
Tip: Archive and delete are not the same word. Treat them as two different buttons with two different approval chains, especially for anything owned by an active user.
-
7
Set entry-point validation so dirty data cannot come back in
A clean CRM dirties fast if the front door is wide open. Add validation at every point where records are created: web forms, import jobs, API endpoints, manual entry, integrations with marketing automation. Required fields on create, format validation on email and phone, domain-based company deduping on Lead create, and picklist-only values on categorical fields. Validation is cheap at the entry point and expensive after the fact. The cleanup you just finished is only worth it if you harden the pipes behind it.
- Require normalized email on every Lead and Contact create; reject obviously invalid formats
- Enforce picklist-only values on Industry, Country, Lead Source, Status, and Stage
- Add duplicate-check-on-create for Leads and Contacts using the dedupe keys defined earlier
- Validate integration payloads from marketing automation and web forms before they land in the CRM
Tip: If your web form writes directly to the CRM without validation, you are paying for cleanup in perpetuity. Put a validation layer in front of every ingress point.
-
8
Assign data owners and instrument ongoing hygiene jobs
Data hygiene is a role, not a project. Assign a data owner per object (Accounts, Contacts, Leads, Opportunities, Activities), publish a monthly hygiene dashboard, and schedule recurring automations that run the cleanup rules continuously: nightly duplicate scans, weekly fill-rate reports, monthly archive sweeps, quarterly picklist audits. The team that pays attention to hygiene for 30 minutes a week never has to run another two-week cleanup project. The team that ignores it ends up right back here in 18 months.
- Name a data owner per object and publish their responsibility in the admin wiki
- Schedule automated duplicate scans nightly, fill-rate reports weekly, archive sweeps monthly
- Build a hygiene dashboard shared with sales and marketing leadership that updates automatically
- Review the dashboard in a 30-minute monthly RevOps meeting and action the deltas
Tip: Hygiene jobs that run but no human reads are theatre. The dashboard needs an owner, a meeting, and a decision loop or it decays within two quarters.