ZapBounce and Google Sheets
You can verify emails in Google Sheets three ways with ZapBounce. Download the sheet as CSV and upload it on the bulk page, run a short Apps Script that sends the column to the ZapBounce API, or let a Zapier step check each new row. Each address gets a result of valid, invalid, catch_all or unknown in the next column.
The CSV route needs no code and suits a one-off clean. Apps Script keeps the work inside the sheet, which suits a list your team edits every week. Zapier fits a sheet that fills up from a form.
A per-row script stops halfway down the list
Apps Script caps how long one run can take, at six minutes on most accounts. A loop that calls an API once per row hits that cap on a list of a few thousand, stops, and leaves the rows below it empty with no marker.
Run it again and it starts from the top, checking rows you already have answers for. That costs time, and it's easy to lose track of which rows are done.
The fix is one job call to submit the whole column, then a second run a few minutes later to collect the results. ZapBounce's jobs endpoint takes up to 50,000 addresses in one request.
How the data moves
Submit the whole column as one job
UrlFetchApp posts the array of addresses to
POST /v1/jobs. One call stays well inside the time cap, whatever the row count.Save the job id in script properties
The second run reads it and knows exactly what to collect, so nothing starts over.
Collect results on a time-driven trigger
A trigger runs a few minutes later, checks the job status, pages through the results with
pageandpageSize, and writes them back. The bulk verification docs show the paging fields.Write back with one setValues call
One range write beats a call per cell. Cell-by-cell writes are the other common way to hit the time cap.
Setting it up
- Open Extensions, then Apps Script, and store your API key in script properties rather than in the code.
- Write a function that reads the address column and posts it to the jobs endpoint in one call.
- Save the returned job id to script properties.
- Create a time-driven trigger that runs a collection function a few minutes later.
- Have that function page through the results and write the result, role and disposable columns back with a single setValues call.
- Add a custom menu item so anyone who owns the sheet can run it without opening the editor.
Google Sheets: common questions
How do I verify emails in Google Sheets?
Download the sheet as CSV and upload it to ZapBounce, or run an Apps Script that sends the column to the jobs endpoint and writes results back. Either way each row gets a result, and 1,000 checks cost $5.
Why does my Apps Script stop halfway through the list?
It hit the execution time cap, six minutes on most accounts. Submit the column as one job instead of looping per row, then collect the results on a trigger.
Can I verify new rows as they're added?
Yes. A Zapier step on new spreadsheet rows runs a ZapBounce check and writes the result into the row, one credit per address.
How much does it cost to verify a sheet of 10,000 emails?
$25 for 10,000 checks. Rows that come back unknown and duplicate addresses cost nothing, and the credits you buy never expire.
Check a Google Sheets export today
100 free checks a month, no card. Unknown results are refunded.