<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: sumitrmardy</title>
    <description>The latest articles on DEV Community by sumitrmardy (@sumitrmardy).</description>
    <link>https://dev.to/sumitrmardy</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4194454%2F684e3ae1-d81e-4c5f-96b1-ac28779008df.png</url>
      <title>DEV Community: sumitrmardy</title>
      <link>https://dev.to/sumitrmardy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sumitrmardy"/>
    <language>en</language>
    <item>
      <title>Open-source n8n templates for bulk email verification — Sheets, CSV cleanup, signup webhook, AI agent tool (EN/中文)</title>
      <dc:creator>sumitrmardy</dc:creator>
      <pubDate>Mon, 19 Oct 2026 15:39:59 +0000</pubDate>
      <link>https://dev.to/sumitrmardy/open-source-n8n-templates-for-bulk-email-verification-sheets-csv-cleanup-signup-webhook-ai-2pjk</link>
      <guid>https://dev.to/sumitrmardy/open-source-n8n-templates-for-bulk-email-verification-sheets-csv-cleanup-signup-webhook-ai-2pjk</guid>
      <description>&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The templates&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Google Sheets lead list&lt;/strong&gt; — reads rows with no verdict, verifies in batches, writes &lt;code&gt;status&lt;/code&gt; / &lt;code&gt;score&lt;/code&gt; back. Re-runs only pick up new rows, so it's safe on a schedule.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clean a CSV before cold email&lt;/strong&gt; — upload an Apollo / Instantly / HubSpot export, get back three lists: &lt;code&gt;send_safe&lt;/code&gt;, &lt;code&gt;review&lt;/code&gt;, &lt;code&gt;drop&lt;/code&gt;. Greylisted addresses wait and get retried once instead of being thrown away.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Signup webhook&lt;/strong&gt; — returns &lt;code&gt;allow | review | block&lt;/code&gt;, with the policy in a single Code node so you can make it stricter or looser.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI agent tool&lt;/strong&gt; — 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.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;A few details that took longer than expected&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Results are matched back &lt;strong&gt;by address, not row order&lt;/strong&gt;. The verifier groups addresses by domain, so they come back reordered; matching by position silently writes the wrong verdict on the wrong row.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;unknown&lt;/code&gt; and &lt;code&gt;undeliverable&lt;/code&gt; are kept apart. "We couldn't find out" (greylisting, timeouts) is not "this mailbox is dead", and merging them deletes real contacts.&lt;/li&gt;
&lt;li&gt;Gmail / Outlook / Yahoo / iCloud accept any address at SMTP time, so those come back as &lt;code&gt;risky / free_provider_unverifiable&lt;/code&gt; rather than a fake "valid". Same for catch-all domains.&lt;/li&gt;
&lt;li&gt;Every record has the same shape: &lt;code&gt;status&lt;/code&gt; is always one of four values and all 11 &lt;code&gt;checks&lt;/code&gt; keys are always present. No &lt;code&gt;?? false&lt;/code&gt; scattered through your Code nodes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;Also in the repo: an OpenAPI file (imports into Dify, Coze, GPT Actions), MCP config, and &lt;code&gt;llms.txt&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disclosure:&lt;/strong&gt; 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).&lt;/p&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/sumitrmardy/email-verifier-api" rel="noopener noreferrer"&gt;https://github.com/sumitrmardy/email-verifier-api&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

</description>
      <category>automation</category>
      <category>opensource</category>
      <category>tooling</category>
    </item>
  </channel>
</rss>
