The usual answer to this question is a slogan: “every three to six months”. It is not wrong, but it hides the part that decides whether it works for you. A newsletter that goes out every Tuesday and a B2B list mailed once a quarter can both follow that rule, and one of them will hit an account review at its sending platform while the other is fine.
The useful answer comes from two numbers you can estimate: how fast your addresses go bad, and how long each address goes between checks. The second one is not the same as how long since you last ran a full-list pass. Every send is also a check, because hard bounces get suppressed.
This post works through the maths, turns it into a cadence table, and lists the events that should trigger a verification whatever the calendar says.
How fast email lists actually decay
List decay is the steady loss of valid addresses as people change jobs, companies retire domains, and personal inboxes get abandoned. There is no universal rate, because it depends on the audience. The published figures are worth knowing, along with their limits:
- B2B, about 2.1% a month. HubSpot’s database decay page puts email database decay at about 22.5% a year, footnoted to MarketingSherpa research that measured B2B data decaying at 2.1% a month. The research is old and HubSpot does not date it, but it is the most widely cited monthly figure and it is internally consistent (more on that below).
- Mixed lists, low to high 20s per year. ZeroBounce’s annual Email List Decay Report says at least 23% of the addresses it checked in 2025 were invalid or risky, and gives 28% for 2024. Read this as a snapshot of the lists customers uploaded, not a group of contacts tracked over time, and note that a list sent to a verifier is more likely to be a stale one.
- B2C, lower. Personal addresses at Gmail, Yahoo and Outlook do not die when someone changes jobs. We could not find a primary source with a monthly B2C rate, so in this post we use 1% a month as an assumption, which is about 11% a year and sits inside the 10 to 20% B2C planning range our list decay calculator uses.
A quick sanity check on the B2B number uses labour data. The U.S. Bureau of Labor Statistics reported median tenure with the current employer of 4.1 years in January 2026, and 4.9 years for management, professional and related occupations. If you crudely assume people leave at a constant rate, a 4.9-year median means about 13% leave in a year, or 1.2% a month. Job changes alone get you most of the way to 2.1%. Acquisitions, rebrands, layoffs and email migrations supply the rest.
The compounding maths of list decay
If a fraction d of the remaining good addresses goes bad each month, the share still good after m months is (1 - d)^m. The share that has gone bad is:
bad(m) = 1 - (1 - d)^m
It compounds downward rather than adding up, because an address that already went bad cannot go bad again. That is why the HubSpot figures agree with each other:
monthly decay d = 2.1% = 0.021
still good after 12 months = 0.979^12 = 0.775
bad after 12 months = 1 - 0.775 = 22.5%
naive 2.1% x 12 = 25.2% (overstates)
To go the other way, from an annual figure A to a monthly one, use d = 1 - (1 - A)^(1/12). A 30% annual rate is 2.9% a month. A 10% annual rate is 0.9% a month.
Those numbers only describe what happens if nobody touches the list in between. Mailing it changes the picture, which is the next section. First, here is the same formula drawn out over two years for three rates.
- 1.0% a month (B2C, our assumption)
- 2.1% a month (B2B, MarketingSherpa via HubSpot)
- 3.0% a month (High-churn B2B, our assumption)
- Amazon SES bounce guidance: stay below 2%, account review at 5%
| Decay/mo | Hits 2% | Hits 5% | At 12 mo | At 24 mo |
|---|---|---|---|---|
| 1.0% | 2.0 mo | 5.1 mo | 11.4% | 21.4% |
| 2.1% | 1.0 mo | 2.4 mo | 22.5% | 39.9% |
| 3.0% | 0.7 mo | 1.7 mo | 30.6% | 51.9% |
Two things stand out. Every curve crosses the 2% line within about two months, so “once a year” is not a plausible schedule for a list you leave alone between sends. And the curves bend: the first six months do proportionally more damage than the second six, which is one more reason the time since the last check matters more than the calendar. Amazon SES says to keep bounce rate below 2%, places accounts under review at 5% and may pause sending at 10%. See what counts as a safe bounce rate for how other platforms and mailbox providers treat bounces.
Why send frequency matters more than the calendar
Every send works as a partial verification. Addresses that went bad since the last send hard-bounce, you suppress them, and the survivors are effectively fresh again. So the exposure on any one send is the decay since that address was last touched, either by a verification or by a send that did not bounce:
exposure per send = 1 - (1 - d)^gap (gap in months)
For a weekly sender the gap is 12/52 of a month:
B2C, d = 1%: 1 - 0.99^(12/52) = 0.23% per send
B2B, d = 2.1%: 1 - 0.979^(12/52) = 0.49% per send
Both are comfortably under 1%. A weekly sender with working bounce suppression is already removing decay about as fast as it appears, and a full-list verification pass mostly finds what the next send would have found anyway.
A quarterly sender is in a different position. The gap is three months, the exposure is 2.97% for the B2C list and 6.17% for the B2B list, and that B2B figure is past the SES review line on a single campaign.
How often to verify, by list type and send frequency
Our rule: verify before a send whenever the expected bad share since the last touch is above 1%. That keeps a healthy margin under the 2% ceiling, and it leaves room for the risky addresses (full mailboxes, catch-alls) that decay also produces.
The longest safe gap follows from the same formula: gap = ln(0.99) / ln(1 - d). At 1% a month that is 1.0 month. At 2.1% a month it is 0.47 months, about two weeks. So a B2C list can go roughly a month between touches and a B2B list roughly two weeks. The table applies that to common send frequencies. The exposure columns are 1 - (1 - d)^gap.
| How often the list is mailed | Exposure per send, B2C at 1%/mo | Exposure per send, B2B at 2.1%/mo | Bulk verification cadence |
|---|---|---|---|
| Weekly | 0.23% | 0.49% | No fixed schedule for the active list. Verify any segment that rejoins after 90+ days unmailed. An optional pass once or twice a year catches risky addresses that never hard-bounce. |
| Every two weeks | 0.46% | 0.97% | Same as weekly. B2B is at the edge, so watch the per-send bounce rate. |
| Monthly | 1.00% | 2.10% | B2C: judgment call, verify before each send if measured bounces sit at 1% or above. B2B: before every send. |
| Quarterly | 2.97% | 6.17% | Before every send, both B2C and B2B. |
| Twice a year | 5.85% | 11.96% | Before every send. Expect a large share of risky results too. |
| Once a year or less | 11.36% | 22.48% | Before every send, and send the result in stages (see triggers below). |
| Cold outreach lists | Unknown age | Unknown age | Before every campaign, within a few days of sending. |
Cold lists sit outside the table because you do not know when the data was last true. A contact database may have collected an address a year before you exported it, so the decay clock started long before your download. That is why cold senders verify every list, every time; our guide to email verification for cold email covers the rest of that workflow, including catch-all handling.
For an existing list that has never had a proper clean, start with a full pass using the process in how to clean an email list, then switch to the cadence above.
Events that should trigger verification, whatever the calendar says
A schedule covers steady decay. Some events dump a lot of bad addresses into a send at once, and they deserve a check on the day:
Verify now if any of these is true
- Your hard-bounce rate on the last send rose above 1%, or climbed clearly above its usual level. Find the segment or source it came from and verify that first.
- A segment has not been mailed or verified for more than 3 months. At 2.1% a month that is about 6% bad, past the 5% review line.
- You are importing addresses from a new source: an event, a partner, a CRM merge, a webinar tool or an old system you are retiring.
- You are planning a re-engagement send to long-inactive subscribers. These are the oldest addresses on the list.
- You exported contacts from a data provider for outbound. The age of each record is unknown to you.
- You are moving to a new email platform or new sending IPs, where a bounce spike lands on a sender with no history.
Re-engagement sends deserve extra care. Amazon SES’s own guidance calls them risky and advises that if you must mail addresses you have not mailed lately, you send to them only as a small portion of your overall volume. Verify the segment first, drop the undeliverables, then send the rest in batches small enough that a bad batch cannot drag your overall bounce rate past 2%.
Verify at the point of entry, so the schedule only covers decay
A lot of what looks like decay is not decay. A typo like gmial.com, a disposable inbox, or a bot filling your form with made-up addresses was bad on day zero. If those get in, your first send bounces more than the decay maths predicts, and you end up running bulk passes to clean up a form problem.
Checking addresses as they are entered fixes that at the source. RocketShield is one script tag on a form and blocks disposable, role-based, mistyped and undeliverable addresses; the API does the same from your own signup code. Our guide to real-time verification on signup forms covers the setup and the UX details, such as showing a “did you mean” suggestion instead of a hard error.
Once entry is covered, every address starts clean and the only thing your bulk cadence has to handle is time.
Measure your own decay rate instead of borrowing one
The 1% and 2.1% figures are starting points. Your own rate is easy to estimate, and it is the number that should set your schedule.
- Pick a segment you verified once and have not mailed since. You need its size and the months since verification.
- Re-verify it and count the addresses that come back undeliverable.
- Solve for d. If a share
bcame back undeliverable aftermmonths, thend = 1 - (1 - b)^(1/m).
For example, 18,000 addresses verified five months ago, 1,260 now undeliverable: b = 1,260 / 18,000 = 7%, and d = 1 - 0.93^(1/5) = 1.44% a month. Plug that into the exposure formula and the table above, and you have a schedule based on your audience instead of someone else’s.
Doing this once gives you a number. Doing it on a schedule gives you a trend. Deliverability monitoring includes list monitors that re-verify a saved list of up to 5,000 addresses on a schedule and alert you when the results get worse. A useful pattern for a large list is to save a random sample of up to 5,000 addresses as a monitor and leave it out of your suppression logic: because the same addresses are re-checked every run, the rising bad share in that sample is your decay curve, measured rather than assumed. If you would rather not do the arithmetic, the list decay calculator does it for a list size and age.
What verifying before every big send costs
The cost logic is simpler than it looks, because of three billing rules: one credit per verification, unknown results and duplicate addresses in a bulk list are never charged, and pay-as-you-go credits never expire.
Take the B2B list from earlier. 12,000 contacts, mailed quarterly, verified before every send:
verifications per year = 12,000 x 4 = 48,000 (at most)
pay-as-you-go pack = 50K credits for $169
cost per campaign = $169 / 4 = about $42
per address = $169 / 50,000 = $0.0034
That $42 per campaign is set against roughly 740 addresses (6.17%) that would otherwise be in the send, enough on their own to put an account past the SES 5% review line. The real credit use is lower than 48,000, because duplicates and unknowns are free and each pass removes the addresses that came back undeliverable, so the next pass checks a smaller list. The 2,000 leftover credits in the pack carry over to next year. Current pack sizes are on the pricing page.
Re-verify the next list before you send it
Upload a CSV and see a free preview estimate before you are charged. Unknowns and duplicates are never charged, and pay-as-you-go credits never expire.