ZapBounce and SparkPost
You can verify addresses for SparkPost with ZapBounce four ways: call the ZapBounce API when an address enters your app, upload a CSV of recipients or suppressions, catch our batch.completed webhook when a bulk run ends, or add a check to a Zap. Each address comes back valid, invalid, catch_all or unknown, and 1,000 checks cost $5.
SparkPost is an API-first sender, so your own database is the contact list. That puts the check where addresses arrive: the signup form, the checkout, the import script. By the time SparkPost sees a bad address, the bounce is one send away.
Teams sending both receipts and campaigns through SparkPost get the most from the check, because SparkPost tracks the two streams apart.
A hard bounce writes a suppression you may not be able to undo
SparkPost adds an address to its suppression list on its own after a hard bounce, a spam complaint or an unsubscribe. Each entry is typed as transactional or non_transactional, and SparkPost stops sending that type of message to the address (read on developers.sparkpost.com, 25 September 2026).
You can delete most entries through the Suppression List API. Entries added by SparkPost's compliance system are the exception: a delete returns 403 with “Recipient could not be removed - Compliance”.
So a customer who mistyped their address once can lose password resets and receipts for good. You'll only find out when they write in asking where the email went. Catching the typo before the first send is the fix that costs cents.
How the data moves
Verify at the point of capture
Your signup or checkout handler calls
POST /v1/verifybefore the address is saved. Show thedid_you_meansuggestion so the person can fix a typo while they're still on the page.Clean a recipient list before a campaign
Export the recipients from your database, drop the CSV on the bulk page or post it to
POST /v1/files, and send only to the valid and catch_all rows.Audit the suppression list
Pull your non_transactional and transactional entries from the Suppression List API and verify them as a batch. A valid verdict on a bounce entry is a reason to look closer at why it was added.
Feed SparkPost bounce events back in
SparkPost's webhooks report each bounce. Mark those addresses in your database so the next import doesn't bring them back.
Setting it up
- Add a
POST /v1/verifycall to every form that saves an email address, with your ZapBounce key kept on the server. - Show the typo suggestion inline, and let the person accept or ignore it.
- Before a campaign, export the recipient list and verify it on the bulk page or through the file upload endpoint.
- Send the campaign to the valid rows, and send to catch_all rows as a smaller, separate group.
- Export your suppression entries each month and verify them as a batch.
- Review the entries that come back valid and delete the ones SparkPost allows you to remove.
SparkPost: common questions
Do SparkPost suppressions expire?
SparkPost's suppression list docs describe no expiry. An entry stays until you delete it through the API, and entries added by SparkPost's compliance system can't be deleted at all.
How do I verify emails before sending with SparkPost?
Call the ZapBounce API from the form or script that saves the address, and store the result with it. Send only to valid addresses, and send to catch_all ones as their own group. 1,000 checks cost $5.
Can I verify my SparkPost suppression list?
Yes. Export the entries through the Suppression List API, verify them as a batch, and review the ones that come back valid. A 10,000-address batch costs $25, and duplicates are never billed.
Does verification send a message through SparkPost?
No. ZapBounce talks to the receiving mail server directly and closes the connection before any message is sent. Nothing goes through your SparkPost account, and nothing counts toward its sending limits.
Check a SparkPost export today
100 free checks a month, no card. Unknown results and duplicates are never billed.