Build Log: A Lead-Enrichment Workflow in n8n


This guide is assembled from official documentation and community reports — we did not run this build ourselves.

Lead enrichment — turning a bare domain or email address into firmographic and contact data — is one of the most common first automations for an ops or marketing team. It is also one of the easiest to overpay for, because the billing unit of your automation platform matters more than its sticker price once a workflow has more than two nodes.

n8n’s per-execution pricing model and its self-hostable Community Edition make it a comparatively low-lock-in choice against per-task and per-credit platforms: n8n Pricing bills one execution per full workflow run, while Hunter Pricing bills one credit per email found.

What this is: a documentation-assembled build guide, not a hands-on review. Claims are traced to the official documentation and pricing pages linked inline, read on the date in the frontmatter; anything those pages did not state is marked UNVERIFIED.

Limits: no runtime claims appear anywhere in this post. Node parameter names are used only where the sourced documentation states them; where the dossier lacked a UI label, the section says UNVERIFIED.

What You’re Building

This lead-enrichment workflow chains six n8n nodes: a Webhook trigger receives a lead’s domain or email, an HTTP Request node calls Hunter’s API, Edit Fields normalizes the response, an IF node routes on enrichment success, a Google Sheets or Airtable node writes the row, and a separate Error Trigger workflow catches failures.

[ Form/Webhook trigger ]        ← lead's domain or email arrives
          │
          ▼
[ HTTP Request ]                ← GET to Hunter Domain Search / Email Finder
          │
          ▼
[ Edit Fields (Set) ]           ← normalize JSON into named fields
          │
          ▼
[ IF ] ── found ──────► [ Google Sheets / Airtable ]  ← append row
          │
          └── not found ► [ log-only row / notify / end ]
          
[ Separate workflow: Error Trigger ]  ← wired via Options > Settings > Error workflow

The shape is deliberately boring. Each box maps to a documented n8n core or integration node — the HTTP Request node for the API call and the Error Trigger node for failure handling — and none of them require writing code.

Prerequisites and Accounts

You need three things: an n8n instance, a Hunter account with lead-enrichment access, and a shared spreadsheet. The Community Edition is available to self-host from GitHub, per the n8n pricing page, while hosted plans start at $20/month billed annually; Hunter’s Free tier is not listed with lead enrichment, so a paid tier from Hunter Pricing is required.

Concretely:

  • n8n: a hosted plan, or a self-hosted install via the installation docs. Community Edition is self-hosted; the paid tiers add concurrent executions, longer execution duration, and error workflows as a listed feature on n8n Pricing.
  • Hunter: a paid tier. On Hunter Pricing, “Lead enrichment” appears on Starter ($34/month billed yearly, 2,000 credits) and Growth ($104/month billed yearly, 10,000 credits) — not on Free. Registered non-profits get 30% off monthly plans, a discount documented on that page.
  • Data store: a Google Sheets or Airtable base with a header row of the fields you intend to write.

Node 1 — Webhook Trigger (The Entry Point)

The Webhook node (or Form Trigger) receives the lead’s domain or email at its webhook URL and starts one execution per submission; n8n counts a single execution per full workflow run regardless of how many nodes fire, as its n8n Pricing FAQ states: “An execution is a single run of your entire workflow.”

n8n generates a webhook URL for you to hand to a form, a landing page, or another system. The incoming payload’s domain or email field then feeds downstream expressions — it’s the raw material every later node reads. The exact Webhook parameter names are UNVERIFIED: they were not present in the sourced documentation, so consult the current node reference in n8n before wiring it.

Node 2 — HTTP Request (Calling Hunter)

The HTTP Request node calls Hunter’s Domain Search or Email Finder endpoint with Method GET, the endpoint URL, and query parameters; n8n recommends the Predefined Credential Type when one is available, otherwise Generic credentials, per the HTTP Request docs.

Documented parameters you’ll touch:

  • Method — DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT. This build assumes a GET to Hunter’s search endpoints; confirm that against Hunter’s API reference, which the sourced pages do not cover.
  • URL — the endpoint you’re calling.
  • Authentication — Predefined Credential Type (n8n’s recommendation when available) or Generic credentials (Basic, Custom, Digest, Header, OAuth1, OAuth2, Query, Simplified Custom Auth).
  • Send Query Parameters, Send Headers, and Send Body, where Body Content Type offers Form URLencoded, Form-Data, JSON, n8n Binary File, and Raw.

Documented node options worth flagging: Batching (Items per Batch, Batch Interval in milliseconds, 0 = none), Redirects (on by default, with Max Redirects), Response: Include Response Headers and Status, Never Error (returns success regardless of status code; default is success only on 2xx), Response Format (Autodetect, JSON, Text, or File), and Import cURL for pasting a working request straight in.

Credit accounting matters here: Hunter counts 1 credit per email found through Domain Search, and a search that finds no emails uses no credits, per Hunter’s pricing page.

Node 3 — Edit Fields (Set) — Normalizing the Response

Edit Fields (Set) maps Hunter’s JSON response into clean, named output fields — for example company, email and score, which are this build’s own choices — so the IF node and the spreadsheet write reference stable field names instead of raw nested API paths. The exact Set node parameter labels are UNVERIFIED — the sourced documentation did not include them, so describe the behavior rather than trusting a remembered UI label.

Node 4 — IF (Routing on Enrichment Success)

The IF node checks whether the enrichment returned usable data — for example, whether an email or domain match exists — and sends items down a “found” branch to the spreadsheet write and a “not found” branch to a fallback such as a log-only row, a notification, or simply the end of the workflow.

The threshold for “missing or low-confidence data” is your business rule, not a documentation fact. A marketing team may accept any deliverable-looking address; a sales team may want a matching company name and a position too. Keep the condition example generic and set the bar yourself. Exact IF parameter labels are UNVERIFIED — not in the sourced documentation.

Handling the “not found” branch explicitly is what stops silent data loss.

Node 5 — Google Sheets or Airtable Write

The Google Sheets node (or Airtable node) appends the normalized fields as a row, giving the team a shared, exportable lead log — and because it’s a standard data store rather than a proprietary automation object, the workflow isn’t locked to any single automation vendor.

Write the normalized fields from Node 3, not the raw API response. Exact node parameter names for Google Sheets and Airtable are UNVERIFIED: the sourced documentation didn’t include them, so describe the append-row behavior and confirm labels in your installed version.

Node 6 — Error Trigger (The Error Workflow)

A separate workflow whose first node is the Error Trigger catches failures in the main workflow; to wire it, create the error workflow, save it, then in the main workflow open Options > Settings > Error workflow, select it, and save — per the Error Trigger docs.

Documented behaviors that change how you debug:

  • A workflow containing an Error Trigger uses itself as its error workflow by default.
  • The Error Trigger cannot be tested with manual runs — it only runs when an automatic workflow errors.
  • execution.id and execution.url require the execution to be saved to the database.
  • If the error occurs in the main workflow’s trigger node, data arrives as trigger{} instead of execution{}.
  • The Stop And Error node can send custom messages to the Error Trigger.

Error workflows are listed under Debugging on the n8n Pricing page.

What It Costs Per Run (The Arithmetic)

On n8n Starter plus Hunter Starter, both billed annually, a single-email enriched lead costs roughly $0.025: $20 ÷ 2,500 executions = $0.008 per n8n execution, plus $34 ÷ 2,000 credits = $0.017 per Hunter credit, and that hit uses one of each. A not-found lead costs $0 on Hunter and still one n8n execution.

Step by step, using only figures published on n8n Pricing and Hunter Pricing:

Line Arithmetic Result
n8n Starter $20/mo ÷ 2,500 executions $0.008 / execution
n8n Pro $50/mo ÷ 10,000 executions $0.005 / execution
Hunter Starter (yearly) $34/mo ÷ 2,000 credits $0.017 / credit
Hunter Growth (yearly) $104/mo ÷ 10,000 credits $0.0104 / credit
Starter + Starter $0.008 + $0.017 ≈ $0.025 / lead
Pro + Growth $0.005 + $0.0104 ≈ $0.0154 / lead

The framing that makes this favorable is n8n’s own definition: “An execution is a single run of your entire workflow. It doesn’t matter how many steps are in the workflow” (n8n Pricing). The five main-workflow nodes cost one execution; the separate error workflow is not addressed by the pricing FAQ. By contrast, Zapier states that “Every step in a Zap and every external connector call uses tasks” (Zapier Pricing, Zapier Rates), and Make states that “most actions consume 1 credit” while Router and error-handler modules consume none (Make Pricing). We don’t state dollar figures for those models here because per-task and per-plan credit prices were not in the sourced material.

How n8n Compares

Platform Billing unit Entry paid price Included volume Per-unit cost Notes
n8n Starter Execution (whole workflow run) $20/mo billed annually 2,500 executions $0.008 5 concurrent, 5-min max duration, 7-day logs
n8n Pro Execution $50/mo billed annually 10,000 executions $0.005 20/50 concurrent, 40-min max duration, 30-day logs
Zapier Free Task $0 100 tasks/mo — Two-step Zaps only
Zapier Professional Task from $19.99/mo not stated on page — Every step and external connector call uses tasks
Make Credit not stated on page not stated — Most actions = 1 credit; Router and error handlers consume none
Hunter (enrichment) Credit $34/mo yearly (Starter) 2,000 credits/mo $0.017 Lead enrichment from Starter tier up

Sources: n8n Pricing, Zapier Pricing, Zapier Rates, Make Pricing, Hunter Pricing.

n8n tier limits, from the same pricing page:

Tier Concurrent executions Max execution duration Saved executions Log retention
Starter 5 5 min 2.5k 7 days
Pro 20/50 40 min 25k 30 days
Business not stated here not stated here not stated here not stated here

Business is listed at $800/month billed annually and marked self-hosted only on the pricing page. Leave blank cells blank rather than guessing — several competitor figures simply weren’t published on the pages we read.

Failure Modes and Documented Fixes

1. The error workflow never fires. Cause: the error workflow must be created, saved, and then explicitly selected under Options > Settings > Error workflow in the main workflow — and the Error Trigger only runs on automatic executions, not manual ones. Fix: wire the setting explicitly, then force a real automatic failure; the Stop And Error node can send a custom message to the Error Trigger. Source: Error Trigger docs.

2. HTTP Request “succeeds” with a bad API response — or errors on a 4xx you expected. Cause: by default the node errors on any non-2xx, while the Never Error option returns success regardless of status code. Fix: decide per node — either let it error into the Error workflow, or enable Never Error together with Include Response Headers and Status and branch on the status code downstream. Source: HTTP Request docs.

3. Hunter calls stop returning data. Cause: credits. Domain Search charges 1 credit per email found, and a search that finds nothing uses none. The Free plan isn’t listed with lead enrichment at all. Fix: monitor credit balance against plan volume — 2,000/mo on Starter, 10,000/mo on Growth — then upgrade or throttle. Sources: Hunter Pricing, Hunter credit definition.

FAQ

Does every node in the workflow cost a separate n8n execution?

No. Per n8n’s pricing FAQ, “An execution is a single run of your entire workflow” regardless of how many steps it contains or how much data it processes (n8n Pricing). The five nodes in the main workflow count as one execution, so adding normalization or a second branch does not multiply your n8n bill.

How many Hunter credits does one lead consume?

One credit per email found through Domain Search, and none when nothing is found, per Hunter’s pricing page. A search returning five emails costs five credits. Verification via Email Verifier draws on verification credits instead. Credits count the same wherever they’re used, including through the API, and each repeated search counts once per calendar month.

Can I test the Error Trigger with a manual run?

No. Documented behavior: the Error Trigger cannot be tested with manual runs — it only fires when an automatic workflow errors (Error Trigger docs).

Is this cheaper on Zapier or Make?

It depends on volume and workflow shape. Zapier bills actions and external connector calls as tasks; its pricing page says triggers don’t count toward the task limit (Zapier Pricing); Make bills credits, most actions at 1 credit, with Router and error handlers free (Make Pricing); n8n bills one execution per whole run (n8n Pricing). For multi-node workflows, the billing unit matters more than the sticker price.

Can I run this for free?

Partially. n8n’s Community Edition is available to self-host from GitHub, per the n8n pricing page. But Hunter’s Free plan isn’t listed with lead enrichment, so enrichment credits require a paid tier starting at $34/month billed yearly on Hunter Pricing — the API side of this build cannot run at zero cost.

The Bottom Line

The architecture is sound and every piece of it is documented: Webhook → HTTP Request → Edit Fields (Set) → IF → Google Sheets or Airtable, wrapped by an Error Trigger workflow. The economics favor n8n for multi-node workflows precisely because the billing unit is the execution, not the step — six nodes still cost one execution.

The honest caveat: this is an assembled guide, not a tested build. Verify node parameter labels against current docs before relying on it. The sensible starting stack is n8n Starter with Hunter Starter (≈ $0.025 per enriched lead at the published allotments), or self-host via Community Edition if avoiding vendor lock-in is your primary concern.

How This Guide Was Built

This post was assembled on 2026-10-17 from official documentation and pricing pages — n8n’s HTTP Request and Error Trigger documentation, the pricing pages for n8n, Zapier, Make, and Hunter, and Hunter’s credit-definition help article — with no hands-on execution of the workflow.

Where the sourced material didn’t include a UI label, the parameter name was deliberately left generic and marked UNVERIFIED: the Webhook, IF, Edit Fields (Set), and Google Sheets/Airtable node parameters. Make’s dollar prices and Zapier’s per-task dollar costs were omitted because they weren’t published on the pages read. Verify current pricing before committing.