Daily lead-list email verification with Snov.io

By General Input

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.

Integrations

  • Snov.io
  • Google Sheets

Type

Deterministic Code

Categories

  • Sales
  • Operations

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.

Related prompts

Explore more prompts
Call overdue Xero customers with an AI collections agentLocal listing health board for every location you manageLet support send one-off Loops emails without an engineerStop cold emails to anyone with a live deal in PipedriveiMessage campaign console with pre-flight checks and delivery boardLinkedIn Ads budget pacing dashboard for every client accountFront desk appointment confirmation board for the next 3 daysGive your team Looker numbers without buying more seatsBuild audience segments from product usage and push to LoopsTurn the people who engage with your posts into Pipedrive leads