The invisible infrastructure problems that let pipeline disappear before it reaches your reps.
TL;DR
A CRM does not lose revenue the day a record goes bad; it loses revenue the day a rep works a dead deal for three weeks, or a campaign burns sender reputation on a batch of addresses that should have been flagged stale a quarter ago. Nothing about that shows up on a dashboard until the pipeline number comes in short, which is exactly why hygiene gets treated as janitorial work instead of infrastructure. It is infrastructure. Every fix below is worth doing twice: once to clean the mess, once to make sure the mess cannot reform the same way.

| Problem | Symptom | Root cause | Verdict |
|---|---|---|---|
| Duplicate records | Same entity, multiple records | Nothing checks for an existing record before creating a new one | Fix the create path, not the backlog |
| Stale contacts | People who left still in sequences | No re-verification cadence, ever | Flag and pause, never silently send |
| Broken ownership | No owner or wrong territory | A rep leaves and nothing reassigns their book | Audit blank owners on a calendar, not a memory |
| Missing data | Blank size, industry, revenue fields | Enrichment never ran, or ran once and rotted | Broken scoring is a data problem wearing a strategy costume |
| Inconsistent naming | 'Acme', 'Acme Inc', 'ACME Corp' | No canonical-name rule at entry | Every downstream rollup inherits this bug |
Nobody sits down and decides to create a duplicate. Multiple reps add the same contact from different sources, an import skips the existing-record check because nobody wired one in, an integration pushes records with no dedup logic, and inconsistent naming defeats whatever fuzzy match was supposed to catch it. Blaming the rep who added the fifth 'Acme Inc.' misses that the system let them.
A single CRM deduplication and LinkedIn verification pass for one client, with 1,399 more contacts flagged as stale in the same pass.
A stale contact does not just fail to convert, it teaches your sending domain that you don't check your lists, and that lesson is expensive to unlearn. Employment verification is not a nice-to-have step before a bulk send, it is the send's actual gate.
A rep leaves and a block of accounts sits unowned, invisible to everyone, until someone notices pipeline that should exist does not. Audit for blank owners monthly on a calendar, not when someone happens to notice. Route inbound leads fast, version-control the territory rules the way you would any other logic that determines who gets paid, and reassign a departing rep's book on their last day, not whenever the next headcount review happens to surface it.
Fix dedup at the source before touching the existing backlog: a cleanup done before the create-path check just gets dirty again on the same timeline. Verify emails on any list actively being sent to, before the audit gets to everything else. Audit owner assignment, because an unowned account is revenue the pipeline report is currently lying to you about. Standardize company naming last, because it is the foundation every other cleanup depends on and the one nobody wants to do first.
Enter your email and we'll send you this playbook, plus the open GitHub repo of setup skills when it ships.
We build and run these systems embedded with your team.