I built a set of four n8n templates around one job: checking whether email addresses are worth sending to, before they go into a sequence, a CRM, or an agent's hands.
The templates
-
Google Sheets lead list — reads rows with no verdict, verifies in batches, writes
status/scoreback. Re-runs only pick up new rows, so it's safe on a schedule. -
Clean a CSV before cold email — upload an Apollo / Instantly / HubSpot export, get back three lists:
send_safe,review,drop. Greylisted addresses wait and get retried once instead of being thrown away. -
Signup webhook — returns
allow | review | block, with the policy in a single Code node so you can make it stricter or looser. - AI agent tool — an AI Agent with the verifier as its only tool, and a system prompt that tells it what each result means and what to do with it.
A few details that took longer than expected
- Results are matched back by address, not row order. The verifier groups addresses by domain, so they come back reordered; matching by position silently writes the wrong verdict on the wrong row.
-
unknownandundeliverableare kept apart. "We couldn't find out" (greylisting, timeouts) is not "this mailbox is dead", and merging them deletes real contacts. - Gmail / Outlook / Yahoo / iCloud accept any address at SMTP time, so those come back as
risky / free_provider_unverifiablerather than a fake "valid". Same for catch-all domains. - Every record has the same shape:
statusis always one of four values and all 11checkskeys are always present. No?? falsescattered through your Code nodes.
Everything uses the core HTTP Request node (no community node) and a Header Auth credential, so nothing secret lives in the JSON. Chinese versions of all four are included.
Also in the repo: an OpenAPI file (imports into Dify, Coze, GPT Actions), MCP config, and llms.txt.
Disclosure: the templates are MIT, but they call an email-verification Actor I built and run on Apify, which is pay-per-verified-address (there's a free tier).
Repo: https://github.com/sumitrmardy/email-verifier-api
Feedback welcome — especially from anyone on a different n8n version where a node imports differently. That's the part I'd most like to hear about.
Top comments (0)