Daily lead-list email verification with Snov.io
Every weekday at 7am, check unverified emails in your Google Sheet, write the verdict back, and suppress bad addresses so they never get a campaign.
Build a deterministic code workflow that runs on a cron trigger every weekday at 7am ET and cleans up the Leads to Verify tab in a Google Sheet using Snov.io.
Inputs I will configure on the workflow: the Google Sheets spreadsheet ID, the tab name (default Leads to Verify), the email column, the verification status column, and the verified-at timestamp column.
Step 1 (Google Sheets, Get Values): Read the full data range of the Leads to Verify tab. Identify every row where the verification status column is empty. Keep track of each row's sheet row number alongside its email so we can write the result back to the right place.
Step 2 (batch in code): Split those email addresses into batches of 10 (Snov.io's Verify Emails endpoint accepts at most 10 per call). De-duplicate within a single run.
Step 3 (Snov.io, Verify Emails): For each batch, call Verify Emails. This operation is asynchronous: POST starts the task and returns a task_hash, then we poll the matching result endpoint until status is completed (with a sensible cap, e.g. poll every 5 seconds up to ~2 minutes per batch). Mint the OAuth access token once at the start of the run via client_credentials and reuse it. Respect Snov.io's ~60 req/min rate limit by sleeping briefly between batches.
Step 4 (normalize verdicts): Map Snov.io's response for each email into one of four buckets: valid, risky, invalid, or disposable. (Catch-all / accept-all / unknown should map to risky. Disposable should win over invalid if both flags are set.)
Step 5 (Google Sheets, Batch Update Values): In a single batch update, write the verdict into the verification status column and the current UTC timestamp into the verified-at column for every row we just processed. Use the row numbers captured in step 1 to target the right cells. Use USER_ENTERED so the timestamp is parsed as a date.
Step 6 (Snov.io, Add to Do-Not-Email List): Collect every email from this run whose verdict is invalid or disposable, and add them to the Snov.io do-not-email suppression list so they cannot be enrolled into future campaigns. Risky and valid addresses are not suppressed.
No AI or LLM steps. No branching judgement. Every step is structured. If a batch fails (network error, rate limit, 402 out of credits), log the failure and continue with the remaining batches; do not write a verdict for rows we could not verify so they get retried on the next run.
At the end of the run, emit a short summary: how many rows were read as unverified, how many were verified successfully, the count per verdict bucket, and how many addresses were added to the do-not-email list.
Additional information
What does this prompt do?
- Wakes up each weekday morning and scans your Leads to Verify tab for any rows that have not been checked yet.
- Sends those email addresses to Snov.io in small batches and waits for the results.
- Writes the verdict (valid, risky, invalid, or disposable) and a timestamp back into the row, so the sheet is always up to date.
- Adds invalid and disposable addresses to your Snov.io do-not-email list, so they cannot be enrolled into future campaigns.
What do I need to use this?
- A Google account with edit access to the spreadsheet that holds your leads.
- A Snov.io account on a paid plan (the verification API and the do-not-email list require API access).
- A tab in your spreadsheet with an email column, a status column, and a timestamp column.
How can I customize it?
- Change the run time or the days it runs (for example, twice a day, or seven days a week).
- Point it at a different tab, a different status column, or a different spreadsheet.
- Decide which verdicts get suppressed (some teams suppress risky addresses too, not just invalid and disposable).
Frequently asked questions
Do I need a paid Snov.io plan?
How many emails can it check in one run?
What happens to addresses that come back as risky?
Will it re-check addresses that already have a verdict?
Can I use a different verification provider?
Stop emailing bad addresses.
Connect Google Sheets and Snov.io once, and Geni cleans your lead list every weekday morning.