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.

Deterministic Code
Snov.ioGoogle SheetsSalesOperationsLead EnrichmentData SyncEmail Automation
PromptCreate

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.

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

FAQs

Do I need a paid Snov.io plan?
Yes. Snov.io only opens up email verification and the do-not-email list on paid plans. The free tier cannot run this workflow.
How many emails can it check in one run?
It works through your unverified rows in small batches and keeps going until the list is empty for that morning. Practical throughput depends on how many credits your Snov.io account has.
What happens to addresses that come back as risky?
By default, risky verdicts are written back to the sheet but are not added to the do-not-email list. You can change that if your team prefers to suppress risky addresses too.
Will it re-check addresses that already have a verdict?
No. The workflow only picks up rows where the status column is still empty, so addresses that have already been verified are left alone.
Can I use a different verification provider?
Yes. The Google Sheets read and write steps stay the same, you would just swap Snov.io for another verification tool when you generate the workflow.

Related templates

Call overdue Xero customers with an AI collections agent

Every weekday at 10am, an AI voice agent phones your most overdue Xero accounts, logs what each customer promised, and reports back to finance in Slack.

LiveKit
Xero
Deepgram
+2
Agentic Task
Local listing health board for every location you manage

See every Google Maps listing you manage on one screen, ranked worst first, with an audit button that writes the fix list for you.

Local Business Data
Google Sheets
App
Let support send one-off Loops emails without an engineer

Your team picks a template, finds the customer, checks they are safe to email, then sends it, with every send logged where the whole team can see it.

Loops.so
Stripe
Google Sheets
App
Stop cold emails to anyone with a live deal in Pipedrive

Every night at 2am, pull the contacts on your open and won deals and block them from your cold outreach before the next send goes out.

Mailshake
Pipedrive
Google Sheets
Deterministic Code
iMessage campaign console with pre-flight checks and delivery board

Build every text campaign in one screen: check who is actually reachable, see a realistic send plan, then watch delivery land row by row.

LoopMessage
Google Sheets
HubSpot
App
LinkedIn Ads budget pacing dashboard for every client account

See every LinkedIn ad account's spend against the budget you committed to, catch overspend early, and rebalance without rebuilding a spreadsheet.

LinkedIn Ads
Google Sheets
Slack Bot
App

Stop emailing bad addresses.

Connect Google Sheets and Snov.io once, and Geni cleans your lead list every weekday morning.