Two point one percent a month sounds like nothing. Compound it across a year and 22.5% of your contact records have gone wrong, which is the figure HubSpot's database decay simulation lands on, built on MarketingSherpa research. CRM data decay never announces itself. The first time most teams see it is a bounce report on a Tuesday morning, and by then the damage is several months old.
The half of this topic nobody writes about is detection. Every article on data hygiene tells you to re-verify contacts before a send, which is correct and also late. An address that bounces today belongs to someone who left in March. Your own systems knew before any verifier did: the card that failed in billing, the thread that stopped replying, the seat that quietly went dark. We built Oneprofile around reading that kind of evidence, which is why enriching HubSpot with Stripe billing data is the example we keep coming back to.
What CRM data decay is and how fast it happens
CRM data decay is the drift between what a record says and what is true. Nothing inside your CRM changes. The world outside it does. Someone gets promoted, their employer gets acquired, an office extension is retired, and the record sits there looking exactly as confident as the day you created it.
Different fields rot at different speeds, and that matters more than the headline rate, because it tells you what to re-check first.
Field | Roughly how fast it goes wrong | Where the number comes from |
|---|---|---|
Job title and role | 2.1% of contacts a month, 22.5% a year compounded | HubSpot's database decay simulation, based on MarketingSherpa research |
Work email | Invalid the day the job changes, not gradually | The same event as the title change |
Firmographics: HQ, headcount, company name | 20-30% obsolete a year | Dun & Bradstreet's B2B marketing data report |
Direct dial and office phone | 25-35% a year | Industry consensus rather than a primary study. Treat as directional |
Whether the company still exists | Slowest of the set, most embarrassing to miss | No public figure we would stand behind |
Notice that the top two lines are one event. A title change and a dead work email arrive together because a person walked out of a building. Most of a B2B data decay problem is a job-change problem wearing different clothes, which is why re-verifying emails without re-checking titles catches the symptom and misses the cause.
One thing about this whole subject irritates me. That 22.5% figure appears in every article in the category, including this one, and almost nobody says when it was measured or against what. The underlying research is old. I have not seen anyone re-run it on a modern B2B database and publish their method. It is probably still directionally right, and remote work has likely made the phone numbers worse rather than better. A decade of writers citing each other is not the same thing as evidence, though, and the category should be more honest about that.
What stale CRM data costs a small team
The enterprise version of this argument is a waste model: 60,000 contacts bought a year, 22.5% invalid on arrival, multiply by a fully loaded rep hourly rate, arrive at a five-digit number. Useful in a budget meeting. Not very useful to a founder with 800 accounts in HubSpot free and no budget line to defend.
At that size the cost shows up in four places:
Rep hours spent on people who left. Every dead record still gets researched, written to, and followed up twice before anyone gives up on it.
One domain, one reputation. A large company can burn a sending domain and rotate to another. You have the domain your product is named after.
Forecasts you cannot trust. Pipeline built on stale CRM data inherits the error. The deal is real, the contact on it left in April, and nobody finds out until the renewal.
Enrichment you pay for twice. Data bought in January and used in September is often paid for again in November when someone notices it is wrong.
The second one deserves more attention than it gets. Google's email sender guidelines set a spam complaint ceiling of 0.30% for bulk senders, with a recommended operating target below 0.10%. Those are complaint thresholds and not bounce thresholds, and it is worth being precise about that, because plenty of articles quietly blur the two. Bounce handling is judged separately and less publicly. What the two have in common is that a list full of dead addresses pushes you the wrong way on both at once.
So the question was never whether to re-verify. It is which records to re-verify, and how you would know which ones without sending to all of them first.
Detecting CRM data decay from systems you already own
A bounce is a lagging indicator. A verifier is a slightly less lagging one: it can tell you an address no longer accepts mail, but not that your champion moved to a competitor in February and their replacement has been reading your emails ever since.
The systems you already run produce that signal for free. Most teams never connect them to the CRM.
Signal | Where it already exists | What it says about the record |
|---|---|---|
Two failed charges, then an unpaid subscription | Billing | The billing contact may be gone, not just the card |
An auto-reply naming a replacement | Your mailbox | Direct confirmation, usually the cleanest signal you get |
A thread that replied for months, then 90 days of silence | Your mailbox | Contact moved, changed role, or stopped owning the account |
A ticket from an unfamiliar address on a known domain | Support desk | New owner arrived, old contact is stale |
A named seat with no login in 60 days | Product analytics | Champion left or disengaged |
Domain-wide drop from nine active seats to four | Product analytics | Restructure, layoffs, or a migration away from you |
Billing is the strongest of these for any account that pays you. Stripe's failed payment recovery docs describe the retry ladder a subscription goes through before it is marked unpaid, which means that status is not a fresh event when you see it.
By the time it lands, Stripe has usually been retrying for a couple of weeks. Something has been wrong on that account for most of a month. The CRM, meanwhile, still says "Customer, healthy" and the renewal task is still scheduled for a person who may not work there.
None of these signals is proof on its own. A quiet seat in the second week of August is a holiday. A single failed charge is an expired card. Detection in practice means ranking suspicion rather than flipping a flag: one signal moves a record up the re-check queue, two signals together and you stop guessing. The teams that do this well are not running anything clever. They just have the billing and product data sitting next to the CRM record instead of three tabs away.
The obvious limit is that these signals only exist for accounts that already know you. For a cold prospect who has never paid you, never opened a ticket and never logged in, you are back to third-party providers and a verifier, and that is fine. Cold records are also the ones with the shortest useful life, so they should be re-enriched closest to the send rather than kept fresh year-round.
Anyway.
Re-enrich, don't re-buy: fixing CRM data decay with scheduled enrichment
The expensive habit in this category is buying a fresh list every quarter while the existing database quietly rots. It feels like progress because a big number of new records shows up. Most of them overlap with what you had, they arrive with the same decay clock already running, and the old records are still sitting there being wrong.
Re-enriching what you already hold is cheaper for most teams and keeps the history attached: the notes, the closed-lost reason, the fact that this account evaluated you eighteen months ago and picked someone else. That context is the actual asset. The contact details on top of it are the perishable part.
A cadence that works for a small team:
Anything untouched for six months gets re-verified before it enters a sequence, not after it bounces.
Any account showing one of the decay signals above jumps the queue and gets re-enriched now.
Titles, companies and work emails get a full pass every quarter.
Firmographics can wait a year. Headcount moves, but not fast enough to justify the spend.
Coverage matters more on a re-enrichment run than on a first pass, because the easy records already resolved the first time and what is left is the awkward tail. This is where a waterfall earns its place: providers are tried in order and the first verified answer wins, so the gaps in any one provider's database get covered by the next. The pricing model matters as much as the coverage here. A re-enrichment run has a high miss rate by definition, since plenty of records have not changed and plenty of the changed ones cannot be found. If misses are billed, you pay most for the runs that find least.
Whether any of this scales into a formal data governance program at 500 people, I genuinely do not know. That is a different discipline with stewards, change control and its own literature, and I have never run one.
What I do know is that it takes the bounce report off the critical path. Which, to go back to where this article started, is where most teams first learn they have a problem and the worst possible place to learn it.
CRM data hygiene that runs without you
CRM data quality is not a project with an end date, and every manual cleanup plan eventually depends on somebody remembering. That is the part that fails. Six weeks after the workshop, the spreadsheet of records to re-check is still open in a tab nobody clicks.
Here is how we built Oneprofile to handle it. It connects to your CRM and to the systems holding the evidence: billing, support desk, product analytics, your application database. Enrichment runs on a schedule, so titles, companies and work emails get re-checked rather than assumed, through an automatic waterfall ordered by cost and hit rate where a miss costs nothing. AI reads the whole picture for each account and writes a score with the reason it scored that way, so a record with a failed payment and a dead seat surfaces without anyone building a rule for it. Everything goes back to the CRM as properties, including the ones that did not exist yet. You see what a run costs before you run it.
The goal is not a tidy database. It is that when a rep opens an account on Tuesday morning, what they read is true on Tuesday morning. Get started free.
How fast does CRM data decay?
What causes CRM data decay?
How can I detect stale CRM data before an email bounces?
How often should I re-enrich my CRM data?
Is it cheaper to re-enrich a CRM or buy a new list?
