- Bulk verification, defined
- Bulk verification is checking a whole list as one job, uploaded as a file or submitted through an API, with results returned when the run finishes rather than per address.
The work is parallel by nature. Thousands of addresses across hundreds of domains means hundreds of concurrent conversations, with per-domain limits so a single host is not hammered into throttling you.
Throttling is what actually sets the pace. Microsoft slows repeated connections deliberately, and respecting that produces better answers than pushing through it does.
Deduplicate before you upload. A list exported from three sources routinely carries 5 to 15 percent duplicates, and paying twice for the same address is avoidable arithmetic.
Read the whole breakdown rather than the valid count alone. A run that returns 80% valid and 2% unknown on a B2B list has resolved things that are not resolvable, and the number to distrust is the flattering one.
How ZapBounce reports it
Every bulk run returns the full breakdown across valid, invalid, catch_all and unknown, with unknowns and duplicates excluded from the bill. The share we could not reach a verdict on is shown as prominently as the share we could.
A 50,000-row file, from upload to invoice
Say you export 50,000 B2B contacts from a CRM that's been fed by three lead sources. Duplicates come out first: 4,100 of them, leaving 45,900 unique addresses. The run takes a few hours, mostly because of a long tail of slow corporate mail servers.
The breakdown comes back as 27,100 valid, 5,000 invalid, 10,600 catch_all and 3,200 unknown, with reasons attached such as greylisting that never cleared or a provider that throttled the probes. Credits are consumed for 42,700 addresses, which is the 45,900 unique minus the 3,200 unknowns.
Look at what that tells you. About 11% of the unique list was provably dead, and mailing it would have been a bounce-rate problem on day one. Nearly a quarter sits on catch-all domains where no verifier can see the mailbox. How you treat that quarter is the real decision, and the valid count doesn't help you make it.
Turning four buckets into a send plan
Suppress the invalid rows everywhere, in the CRM as well as the sending platform, so they don't come back on the next export. Send to valid normally.
Treat catch_all as its own segment. Mail it in small batches from the same stream, watch the bounces from the first batch, and let that measured rate decide whether the rest goes out. Older contacts on catch-all domains tend to bounce more than recent ones, so sorting the segment by last activity date and starting with the freshest is a sensible order.
unknown deserves a second run a day or two later, because many of those causes are temporary. Whatever is still unresolved after that can wait in a holding segment until the contact does something that proves the address works, such as replying or logging in.
Keep the result file with its date. When someone asks in six months why a contact was dropped, the row with its reason and the server's reply code is your answer.
Bulk verification: common questions
How long does a bulk run take?
It depends on the domain mix far more than the list size. Throttling providers set the pace, and rushing them lowers answer quality.
Am I charged for duplicates?
Not with us. Duplicates are collapsed before the run and only the unique addresses consume credits.
What should I look at in the results?
The unknown and catch-all shares first. A suspiciously low unknown count on a B2B list means guesses were scored as verdicts.