← all systems
OUTBOUNDPIPELINE GENERATION

ICP Click-to-CRM

Define your ICP. Click once. Enriched leads land in your CRM.

21 nodes4 workflowsn8n · Pronto · Instantly · Claude▶ watch walkthrough

The Problem

Sales teams spend hours manually searching LinkedIn and databases for target accounts, tracking down decision-makers, and hunting for verified emails. Slow, expensive, impossible at scale.

Stack

⚙️
n8n
Orchestrates all 4 async execution paths
🔍
Pronto
Company search, lead discovery, email + phone enrichment
📧
Instantly
Outbound sequence delivery
🧠
Claude
ICP config evaluation and field normalization logic

Walkthrough

How It Works

The execution path

01Trigger Fired
02Companies Received
03Leads Enriched
04CRM Delivered
PATH ATrigger
Click Run
Define ICP config
Submit company search to Pronto
Pronto calls back with company results
PATH BCompanies Received
Receive companies
Filter
Loop one-by-one (1.5s rate limit)
Search for decision-makers
Pronto calls back with lead results
PATH CLeads Received
Receive leads
Filter qualified
Submit bulk email + phone enrichment
Pronto calls back with enriched contacts
PATH DEnriched Contacts
Normalize fields
Format for CRM schema
Deliver to CRM
The workflow is NOT a linear chain — it's 4 independent async paths that hand off via Pronto webhook callbacks. Each path fires, does its work, and exits. The next path only starts when Pronto calls back.
PATH A — Trigger

Kicks off the entire chain. ICP config lives in a single JS node — industry codes, company size, revenue band, geo IDs, job titles, volume limit. One edit, zero rebuilds.

  • ·Click Run
  • ·Read ICP config from JS node
  • ·Submit company search to Pronto
  • → Pronto processes async, calls back to PATH B
PATH B — Companies Received

Pronto calls this webhook when your company results are ready. Loops one-by-one with a 1.5s rate limit between each — Pronto's API requires pacing.

  • ·Receive company batch from Pronto
  • ·Filter against ICP criteria
  • ·Loop one company at a time (1.5s rate limit)
  • ·Submit decision-maker search per company
  • → Pronto calls back to PATH C
PATH C — Leads Received

Filters raw lead results against persona criteria before spending enrichment credits. Only qualified contacts move forward.

  • ·Receive lead batch from Pronto
  • ·Filter: title match, confidence threshold
  • ·Submit bulk email + phone enrichment
  • → Pronto calls back to PATH D
PATH D — Enriched Contacts Arrive

Final delivery. The output node is modular — swap in HubSpot, Airtable, Lemlist, LGM, or Google Sheets without touching anything else.

  • ·Receive enriched contacts from Pronto
  • ·Normalize field variants (firstName / first_name / firstname)
  • ·Format for CRM schema
  • ·Deliver to CRM output node

Key Design Decisions

🔀
4-Path Async Architecture
Not a linear chain. 4 independent webhook paths hand off via Pronto callbacks. Non-blocking — runs in the background while you work.
⚙️
ICP as Config-as-Code
All targeting logic lives in one JS node. Industry, size, revenue, location, titles — one-node edit, zero rebuilds.
🔧
Field Normalization Built-In
Pronto returns firstName, first_name, and firstname across endpoints. Every variant handled — no silent data loss.
🔌
Modular Output Layer
Final delivery node is swappable. HubSpot, Airtable, Lemlist, LGM — wire in whatever CRM you use.

By The Numbers

21
Nodes
4
Async paths
1
JS node controls all ICP targeting
5–20
Min · click to enriched CRM
← back to all systemsmatthew batterson · gtm engineer