CRM Hygiene Audit Checklist
The field-by-field checklist that surfaces stale opportunities, duplicate contacts, and mis-staged deals before they poison your forecast — run it monthly in about 90 minutes.
What's inside
- Stale opportunity detection rules (21-day no-activity, past-due close date, stage-duration outliers)
- Duplicate contact and account detection method
- Stage-gate exit-criteria checks written per pipeline stage
- Required-field completeness list for every open opportunity
- Owner and territory assignment check
- Activity-log health check comparing logged vs. actual system activity
- Closed-lost reason code audit including an "Other" overuse threshold
- Data entry source audit — manual vs. auto-logged fields
- Monthly hygiene scorecard with six tracked targets
- Ongoing weekly hygiene rules to prevent re-decay
Purpose: A CRM doesn't get dirty all at once — it erodes field by field until the pipeline number on the dashboard has nothing to do with reality. Run this monthly. It takes about 90 minutes for a team of 10–15 reps.
1. Stale opportunity detection
- Pull every open opportunity with no activity (call, email, meeting, stage change) logged in 21+ days — flag for owner review
- Pull every open opportunity whose Close Date is in the past — these are either dead or mis-dated, both are hygiene failures
- Pull every opportunity that's been in the same stage for longer than 2x your average stage duration for that stage
- For every flagged opportunity, the owner must do one of: update close date with justification, log a next step, or mark closed-lost with a reason code
2. Duplicate detection
- Run a duplicate-contact report on email domain + last name match
- Run a duplicate-account report on company name (fuzzy match — "Acme Inc" vs "Acme Corporation" vs "ACME")
- Check for the same open opportunity logged twice under two different owners
- Merge duplicates using the record with more complete activity history as the surviving record, never just the newest one
3. Stage-gate mis-classification
For every stage in your pipeline, confirm the deal actually meets the stage's exit criteria — not just that a rep moved it there:
- "Qualified" deals have a confirmed budget holder identified (not just a form-fill lead)
- "Proposal Sent" deals have an actual proposal document logged/attached, dated within the last 14 days
- "Negotiation" deals have documented next steps beyond "following up"
- "Commit" forecast category deals have a close date within the current or next period — not 90+ days out
- No deal skips more than one stage in a single update — a jump from "Qualified" straight to "Closed Won" is a red flag for poor logging or a mis-recorded deal
4. Required-field completeness
For every open opportunity, confirm these fields are populated (adjust to your stage-gate model):
- Amount (not $0 or a placeholder)
- Close Date
- Stage
- Lead Source
- Next Step (free text, updated within 14 days)
- Primary Contact linked
- Competitor field (if in a competitive deal)
- Forecast Category
Flag any opportunity missing 2+ required fields as "not forecast-eligible" until fixed.
5. Owner & territory assignment
- Every open opportunity has an active (not departed) owner
- Owner matches the account's assigned territory/segment rules
- No orphaned opportunities (owner field blank or pointing to a deactivated user)
6. Activity-log health check
- Sample 10 opportunities per rep; compare logged activity count against email/calendar/dialer system activity for the same period
- Flag reps whose CRM activity count is less than 50% of their actual system activity — this is under-logging, usually a training or workflow-friction issue, not a discipline issue
- Confirm auto-logging integrations (email, calendar, dialer → CRM) are actually connected and syncing, not just installed
7. Closed-lost reason code audit
- Every closed-lost opportunity has a reason code (not blank, not "Other" as a catch-all)
- "Other" reason code usage should be under 10% of closed-lost volume — if higher, your reason code list is missing a real pattern
- Spot-check 10 closed-lost deals against the rep's own notes to confirm the reason code matches what actually happened
8. Data entry source audit
- Identify which fields are manually entered vs. system-populated
- Any manually-entered field with a completion rate below 80% is a candidate to automate or remove
- Confirm no two systems are both allowed to write to the same field without a defined source of truth (see the RevOps Tech Stack Audit Checklist, Step 4)
Monthly Hygiene Scorecard
| Metric | Target | This Month | Status |
|---|---|---|---|
| % opportunities with no activity in 21+ days | < 10% | ||
| % opportunities with past-due close date | < 5% | ||
| Duplicate contacts found | 0 new | ||
| % opportunities missing required fields | < 5% | ||
| % closed-lost with valid reason code | > 95% | ||
| "Other" reason code usage | < 10% |
Ongoing hygiene rules (enforce weekly, not just at audit time)
- No opportunity created without Lead Source populated at creation
- Stage changes require a next-step note in the same update
- Managers review their team's stale-opportunity list every Monday before forecast calls
- Closed-lost requires a reason code before the record can be closed (make it a required field, not a convention)
How to use it
Run the numbered sections top to bottom once a month, fix every flagged record before your forecast call, then track the six-metric scorecard over time to see whether hygiene is improving or decaying.