All posts

How to Verify Leads in n8n Before Adding Them to Instantly

··5 min read

To verify leads in n8n before Instantly, add one HTTP Request node that sends each email to the SimpleVerifier verify endpoint, then an If node that keeps only rows where action equals send. Everything else goes to a skip branch and never reaches your campaign. The free template does exactly this, and you can import it in a few minutes.

This guide is for people who already have a lead list in a Google Sheet and send through Instantly. If your list is a CSV and you do not use n8n, upload it on the verify page instead. The how to verify an email list guide covers that route.

What the workflow does

The template is n8n-leads-verify-to-instantly. It has seven nodes:

  1. Run manually, a trigger you click.
  2. Read leads, a Google Sheets node that returns every row.
  3. SimpleVerifier verify, an HTTP Request node.
  4. Keep action = send, an If node.
  5. Add lead to Instantly, an HTTP Request node.
  6. Skip the rest, a No Operation node for everything else.
  7. Read me, a sticky note with the setup steps.

Your sheet needs four columns: email, first_name, last_name and company.

What you need

  • An n8n account or a self-hosted n8n.
  • A SimpleVerifier API key from the API keys page. It starts with sv_live_.
  • An Instantly account, an API v2 key and the ID of an existing campaign.

Step 1: import the file

Download the workflow JSON. In n8n, create a new workflow, open the menu and choose Import from file. Pick the download. Nodes that still need something from you show a red marker.

Step 2: add the SimpleVerifier credential

Create a Header Auth credential. Name it SimpleVerifier API key. Set Name to Authorization and Value to Bearer followed by your key. Select it in the SimpleVerifier verify node.

The node sends a POST to https://simpleverifier.com/api/v1/verify with a JSON body of { email: <the row's email> }. The API docs list every field in the answer.

Two settings in that node matter:

  • Batching is set to one item at a time with a 600 millisecond interval. A key can make 120 calls a minute, and this stays under it.
  • The timeout is 40 seconds. A live mailbox check on a slow server can take about 30 seconds.

The node also has Never Error turned on. A 401 or 402 answer then flows through as data instead of stopping the run, which is why the sticky note tells you to open the verify node output if every row skips.

Step 3: connect the sheet

In the Read leads node, connect your Google account. Set the Sheet ID and the sheet name. The template expects a tab called Leads. Change it if yours is different.

Step 4: add the Instantly credential

Create a second Header Auth credential for Instantly with the same Name, Authorization, and your Instantly key as the Value. Select it in the Add lead to Instantly node.

In that node, replace YOUR_INSTANTLY_CAMPAIGN_ID with your campaign ID. The node posts to Instantly's v2 leads endpoint with the campaign, email, first name, last name and company name. If Instantly changes its API, check the field names against its reference.

Step 5: run 10 rows first

Trim the sheet to ten rows, or put a Limit node after Read leads. Run the workflow. Open the verify node and read a few results. Each result has a status, an action, a reason and a reason_code.

Then open Instantly and look at the leads that arrived. They should match the rows where action was send. If nothing arrived, read the verify output. A 401 means the key is wrong. A 402 means your plan does not include API access or is not active.

What happens to the rows you skip

The skip branch holds three kinds of rows:

  • send_with_care: catch-all domains, role inboxes such as info@ or sales@, and providers that hide mailbox status. A catch-all domain accepts mail for any address, so no check can prove a mailbox exists. The catch-all study found that 39.1% of 4,943 sampled business domains accepted a made-up address, so expect some of your list here.
  • retry_later: the check could not finish, for example a timeout or a refused connection. Run those rows again later.
  • do_not_send: the address will bounce or is a throwaway. Drop it.

If you want the send_with_care group in a smaller, separate campaign, add a second If node on that value yourself. Catch-all addresses are never marked valid, so the choice is yours.

Where your judgment still matters

A verified address is not a good lead. The check tells you whether a mailbox accepts mail. It does not tell you whether the person is the right buyer. Keep your own targeting rules. Also read the first leads in Instantly before you start the campaign, and start with a low daily volume.

When to use this and when not to

Use it when your leads live in a sheet and you want a hard gate before the sequencer. If your leads come from Apollo or Clay and you also want a personalized first line, read Apollo or Clay export, verify, AI first line, Smartlead in n8n. If you would rather not use n8n at all, there is a native Instantly integration. For the node-by-node n8n basics, see verify emails in n8n.

You can also browse all workflow templates.

Frequently asked questions

Why does the workflow only keep action = send? It is the one result where the mail server confirmed the mailbox. The rest need a human decision or a retry.

Do I need a paid plan? API calls need a plan that includes API access. See pricing. Uploading a CSV on the verify page needs no setup.

Can I run it on a schedule? Yes. Swap the manual trigger for a Schedule trigger. Add a column or filter so you do not verify and add the same rows twice.

Common questions

How do I verify leads in n8n before adding them to Instantly?

Put an HTTP Request node between your lead source and the Instantly node. It posts each email to the SimpleVerifier verify endpoint with your key. An If node then passes only rows where action equals send to the Instantly node. The free template does this in four nodes.

Why does the workflow only keep action = send?

send means the mail server confirmed the mailbox. send_with_care covers catch-all domains, role inboxes and providers that hide mailbox status, so those are a decision for you. retry_later means the check could not finish, and do_not_send means the address will bounce or is a throwaway.

Why does the verify node run one lead at a time?

Each API key can make 120 calls a minute. The node waits 600 milliseconds between rows, which stays under that. A slow mail server can take about 30 seconds to answer, so the node timeout is 40 seconds.

Do I need a paid plan to use the API?

API access needs a plan that includes it. The pricing page lists what each plan includes. To check a whole list without any setup, you can upload a CSV on the verify page instead.

Check your list before you send

Real mailbox checks over SMTP, and nothing is sent to the address. Sign in with Google and your first 100 email checks are free, no card. Plans for bigger lists are on the pricing page.