ZeroBounce starts at $39 for a 2,000-credit minimum, and its credits roll over while the subscription stays active (zerobounce.net, read 18 September 2026). ZapBounce starts at $5 for 1,000 checks with no minimum, 100,000 checks cost $139, and credits never expire, plan or no plan.
Most of the move is a mapping job. Your code, ESP segments and Zaps read ZeroBounce's status names today, so the work is pointing each rule at the right ZapBounce field. For price and features side by side, see ZapBounce vs ZeroBounce. This page covers the switch itself.
The short version
- Your recent ZeroBounce result files, plus every address it marked spamtrap, abuse or do_not_mail
- A ZapBounce account (100 free checks a month, no card) with a live key and a zb_test_ sandbox key
The steps
Export your ZeroBounce results
Download the result file for every list you still mail. Keep each address's last status, its sub_status and the check date as your record of where the list stood.
Save the addresses you never want to mail
Pull every row ZeroBounce marked spamtrap, abuse or do_not_mail into your own suppression list in your ESP. That list is yours, so it keeps protecting you whichever verifier runs next.
Find every rule that reads a ZeroBounce status
Search your code, ESP segments, sheets and Zaps for ZeroBounce's status and sub_status names. Write down what each rule does: send, drop or hold for review.
Map seven statuses to four results and three flags
ZeroBounce returns valid, invalid, catch-all, spamtrap, abuse, do_not_mail and unknown (ZeroBounce v2 status codes, read September 2026). ZapBounce returns
valid,invalid,catch_allandunknown, and reports role and disposable addresses as theroleanddisposableflags. The result codes docs list everyreason.Build against the sandbox key
Point your code at
POST https://api.zapbounce.com/v1/verifywith a JSON body holdingemailand your key in anAuthorization: Bearerheader. Calls with azb_test_key never bill, so your test suite runs free. The single verification docs show every field.Move list jobs to uploads or batches
Upload CSV, TXT or XLSX files with
POST /v1/files, or send up to 100,000 addresses as JSON withPOST /v1/batches. Your original columns come back with the result fields added, so a sheet that fed ZeroBounce feeds ZapBounce unchanged.Re-point webhooks and Zaps
Subscribe to
batch.completedso your system hears when a list is done, and check theZapBounce-Signatureheader on each delivery. The webhooks docs cover retries and every event.Run both for a week, then switch
Send the same new signups through both tools for a week and compare the rows where they differ. When your rules behave, change the key to
zb_live_and turn the ZeroBounce calls off.Re-check lists older than a month
Upload any list last checked more than a month ago to the bulk page. A result describes the mailbox on the day of the check, and business addresses change as people move jobs.
ZeroBounce statuses mapped to ZapBounce fields
ZeroBounce valid becomes ZapBounce valid, and invalid becomes invalid, with a reason such as mailbox_not_found, domain_not_found or mailbox_full that says why. ZeroBounce unknown becomes unknown, which ZapBounce never bills.
ZeroBounce catch-all becomes catch_all, spelled with an underscore on the wire. A catch-all domain said yes to a random address too, so no SMTP check can confirm the person. ZeroBounce also files some accept-all rows under valid with an accept_all sub_status, so if a rule reads that sub_status, point it at catch_all instead.
ZeroBounce puts role and disposable addresses under do_not_mail. At ZapBounce they're flags beside the result, so an info@ address still gets its own valid or invalid answer and you decide what to do with it. A segment rule becomes one line: drop rows where disposable is true, and hold rows where role is true.
What changes on your bill
ZapBounce bills one credit when a mail server gave us an answer. valid, invalid and catch_all cost a credit. An unknown, a duplicate in the same batch, a syntax reject and any error on our side cost nothing, and the billed field on each row shows it.
A 10,000-address list costs $25 and a million costs $949. You don't need a plan to buy credits, and they never expire, so a list you clean twice a year never races a renewal date. Every tier is on the pricing page.
What moves and what can stay
ZeroBounce sells verification beside inbox placement, blacklist monitoring and DMARC tooling. If you use those, keep them on their own plan and move only the list cleaning. If you only ever opened the verifier, the whole subscription goes.
Your data stays yours during the move. ZapBounce keeps uploads and results for 30 days by default, you can set that per key from 0 to 90 days, and it never adds your addresses to any shared database.
Questions people ask
How do I migrate from ZeroBounce to another email verifier?
Export your ZeroBounce results, save spamtrap, abuse and do_not_mail rows to your own suppression list, map the statuses to the new tool's results, swap the API call, and run both for a week. ZapBounce sandbox keys never bill, so the test week costs nothing.
What does ZeroBounce do_not_mail map to?
ZeroBounce do_not_mail covers role, disposable and suppression rows. At ZapBounce, role and disposable are yes or no flags beside the result, and suppression addresses belong on your own ESP suppression list.
Do ZeroBounce credits expire?
ZeroBounce credits roll over while the subscription stays active, per zerobounce.net read on 18 September 2026. ZapBounce credits never expire, with or without a plan, from $5 for 1,000 checks.
How much does it cost to verify 100,000 emails after switching?
At ZapBounce, 100,000 checks cost $139 with no subscription. Unknown results and duplicates are never billed, and the credits never expire.