Verify your cold email list every morning before sending

By General Input

Every weekday at 6am, verify every pending cold email, sort the list into ready-to-send and do-not-send tabs, and post a summary in Slack.

Integrations

  • Waterfall.io
  • Google Sheets
  • Slack Bot

Type

Deterministic Code

Categories

  • Sales
  • Operations

Every weekday at 6:00 AM Eastern Time, run a deterministic email verification workflow that cleans up the day's cold email list before my outreach tool picks it up. Build this as a code workflow with discrete nodes and explicit branching by status. No judgment calls or AI drafting — pure CRUD.

Step 1. Read pending rows from Google Sheets. Use Get Values on the 'pending-verification' tab of my Google Sheet. The sheet has these columns in this order: email, status, smtp_provider, mx_records, verified_at. Filter in the workflow to only the rows where the status column is empty — those are the ones that still need verification.

Step 2. Verify each pending email with Waterfall.io. For each pending row, call Waterfall.io Email Verification with the email address. This endpoint is synchronous and returns status (one of valid, invalid, risky, unknown), smtp_provider, and mx_records. Capture all three plus the current ISO 8601 timestamp as verified_at.

Step 3. Write the results back. Use Google Sheets Batch Update Values to write status, smtp_provider, mx_records, and verified_at to the matching rows on the 'pending-verification' tab in one batched call (not row-by-row).

Step 4. Bucket rows by status. Group the just-verified rows by status. Use Google Sheets Batch Update Spreadsheet to move rows by status: rows with status 'valid' get appended to the 'ready-to-send' tab and deleted from 'pending-verification'; rows with status 'invalid' get appended to the 'do-not-send' tab and deleted from 'pending-verification'. Rows with status 'risky' or 'unknown' stay on the 'pending-verification' tab for human review. Do the appends and deletes in batched operations so the sheet stays consistent.

Step 5. Post a Slack summary. Using the Slack Bot integration, send one message to the #cold-email-ops channel containing today's date, the count of rows in each bucket (valid, invalid, risky, unknown), and a clickable link to the spreadsheet. Keep it to a single short message — no thread, no follow-ups.

Edge cases to handle: if there are zero pending rows, skip Waterfall.io and the sheet writes entirely but still post a brief Slack message saying 'No emails to verify today' with the date and spreadsheet link. If a Waterfall.io call returns a provider error, leave that row's status empty so it gets retried on the next run, and include an 'errors' count in the Slack summary if any occurred.

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 engineerA brand asset library your marketing team actually searchesTurn Mailjet email clicks into ranked HubSpot follow-upsClean out the Looker dashboards and Looks nobody opensStop cold emails to anyone with a live deal in PipedriveLiveKit live operations console for room moderationWake up dormant Keap leads with a researched reasoniMessage campaign console with pre-flight checks and delivery board