Switching from ZeroBounce to ZapBounce, step by step

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

  1. 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.

  2. 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.

  3. 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.

  4. 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_all and unknown, and reports role and disposable addresses as the role and disposable flags. The result codes docs list every reason.

  5. Build against the sandbox key

    Point your code at POST https://api.zapbounce.com/v1/verify with a JSON body holding email and your key in an Authorization: Bearer header. Calls with a zb_test_ key never bill, so your test suite runs free. The single verification docs show every field.

  6. 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 with POST /v1/batches. Your original columns come back with the result fields added, so a sheet that fed ZeroBounce feeds ZapBounce unchanged.

  7. Re-point webhooks and Zaps

    Subscribe to batch.completed so your system hears when a list is done, and check the ZapBounce-Signature header on each delivery. The webhooks docs cover retries and every event.

  8. 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.

  9. 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.

Run your list through it

100 free checks a month, no card. Every address comes back with one verdict, and unknowns are never billed.