The stack
- Clay credits
- ~4-6 per inbound enriched and scored
- AI scoring
- pennies per lead on a mid-tier model
- Orchestration
- an n8n or Zapier plan, by task volume
- Watch at volume
- cache known domains so a traffic spike doesn't surprise the bill
The problem
Speed-to-lead is the single biggest predictor of inbound conversion, and most teams are quietly terrible at it. A demo request arrives with just a name and a personal-looking email, sits in a queue, gets manually researched whenever someone has a minute, and is assigned hours or even a day later. By then the prospect has already talked to a competitor who called them back in five minutes. The buyer's intent was highest the moment they hit submit, and you let it cool while the lead sat in a queue.
Structurally, a raw form fill has almost no information to route on. 'Jamie, jamie@gmail.com, message: interested' tells you nothing about company, size, role, or whether this is even an ICP fit. Someone has to figure all of that out before they can route intelligently, and done by hand that research is the exact bottleneck that kills speed-to-lead. So teams face a false choice: route fast on no information and misroute, or route well but slowly. Meanwhile low-fit form fills get the same precious rep attention as high-fit ones, wasting the team's time on leads that were never going to convert.
An automated enrichment-and-routing pipeline fixes both speed and quality at once. The instant a lead submits, Clay enriches it (company, size, role, tech, CRM match, ICP score), an orchestrator like n8n or Zapier applies your routing rules, hot ICP-fit leads get assigned to the right rep with a Slack alert within seconds, and low-fit leads flow to nurture automatically. Reps spend their time only on qualified inbound, every lead is handled in seconds rather than days, and the whole thing runs without a human triaging a queue.
Build the existing-customer check and a fallback owner before you build anything clever. The two failures that destroy trust in routing are cold-pitching a current customer (because nobody checked the CRM) and a lead silently vanishing because it matched no rule. Handle those two cases first, and then make it fast.
How it works
- 01 Catch the form n8nwebhook fires the instant they submit
- 02 Enrich the lead Claycompany, role, size, CRM match
- 03 Score the tier Clayhot/warm/cold, reason, is_existing
- 04 Route by rule Zapiertier, territory, existing-customer branch first
- 05 Write the record HubSpotowner set, all enriched fields written
- 06 Alert the rep Slackcontext plus links, in seconds
- Capture the form submission and fire it to the orchestrator or directly to Clay via webhook the instant it happens
- Enrich the lead in Clay: company from domain, size, industry, role, tech, and a CRM-match check
- Run a Clay AI column that scores the lead into hot / warm / nurture with a reason the rep can read
- Apply routing rules in n8n/Zapier on tier, segment, territory, and existing-customer status
- Assign hot leads to the right rep in the CRM and post an instant contextual Slack alert
- Send low-fit leads to nurture, route existing customers to their owner, and set a fallback owner so nothing is dropped
The playbook
Capture and pass the form submission instantly
Wire your form (a HubSpot form, a website form, Typeform, whatever you use) to fire a webhook on submission into your orchestrator (n8n or Zapier) or directly into a Clay table. Instant is the whole idea: begin enrichment the moment someone hits submit, not on an overnight batch, because the intent you are racing against decays in minutes. In n8n, a Webhook trigger node receives the submission; in Zapier, a form-app trigger or a Webhooks-by-Zapier catch hook does the same.
Capture whatever the form has plus the email, and any enrichment hints like a company field. Even a bare email is enough to proceed, because enrichment fills in the rest from the domain. Do not gate the pipeline on a rich form; long forms suppress conversion and the enrichment makes them unnecessary.
Capture the page they submitted from and any UTM or campaign parameters too. The source page ('/pricing' versus '/blog') and the campaign meaningfully improve both routing and the context you hand the rep, and they are free to grab at submission time but impossible to reconstruct later.
TipGrab the source page and UTM data at submission. A demo request from the pricing page off a high-intent campaign is a different lead than a content download, and the rep wants that context in the alert, but you can only capture it at the moment of submission.
Enrich the lead in Clay
Send the lead into a Clay table that auto-enriches each new row: resolve the company from the email domain, pull company size and industry, identify the person's role and seniority, fetch tech stack if it is relevant to fit, and, critically, check whether the company or contact already exists in your CRM to catch existing customers and open opportunities. All of this runs in seconds per row, which is what makes second-level speed-to-lead achievable instead of aspirational.
Flag personal-email domains (gmail, outlook, yahoo, and so on) in their own column, because they are both harder to enrich, since there is no company domain to resolve, and often lower B2B intent. You do not necessarily discard them, but routing should treat a personal email differently from a corporate one rather than failing silently on it.
Use Clay's waterfall pattern for the enrichments that miss often, stacking two or three providers so a gap in one falls through to the next. Inbound leads are higher-value than cold lists, so the enrichment coverage matters more here; a lead that fails to enrich should route to a human fallback, not get auto-classified as nurture on missing data.
- Company resolved from the email domain
- Company size and industry
- Person role and seniority
- Existing CRM record / open-deal check (the most important field)
- Tech stack, if relevant to fit
- Personal-vs-corporate email-domain flag
Score the lead against your ICP
Add a Clay AI column that scores the enriched lead against your ICP and assigns a routing tier. Reuse the rubric from your account-scoring workflow so a sourced account and an inbound lead are judged by the same standard, which keeps your whole funnel coherent. The output should be a simple, machine-actionable tier plus a one-line reason, because the orchestrator branches on the tier and the rep reads the reason.
Keep the scoring fast and rule-friendly: hot, warm, or nurture, with a clear reason and an explicit existing-customer flag. This is a routing decision made in seconds, not a deep account analysis, so the prompt should be lean and decisive rather than nuanced and slow.
Handle the existing-customer case inside the scoring output explicitly. If the CRM match shows a current customer or an open deal, the score should say so and direct the lead to the account owner, never to a new-business rep, because cold-pitching a customer is the single most embarrassing routing failure.
Score this inbound lead for routing. Use ONLY the enriched data.
Lead: /Full Name, /Title at /Company
Company size: /Employees, Industry: /Industry
Email type: /Email Domain Type (work/personal)
Existing CRM record: /CRM Match
Source page / message: /Source Page, /Message
Return JSON only:
{"tier": "hot|warm|nurture", "reason": "<one sentence>", "is_existing": true|false}
Rules:
- If CRM match shows an existing customer or open deal: set is_existing true, and reason must say to route to the account owner (NOT new business).
- tier 'hot' if: ICP fit (industry in {{ICP}}, size in {{RANGE}}, decision-maker title) AND a work email AND a buying-intent signal (demo request, pricing page, 'pricing'/'demo' in message).
- tier 'nurture' if: clearly non-ICP, a student or job seeker, or a competitor.
- otherwise: tier 'warm'.
TipMake 'hot' genuinely demanding (ICP fit AND work email AND an intent signal). If everything scores hot, reps stop trusting the tier and triage the queue themselves anyway, which puts you right back where you started. A tier reps trust is one that is right when it says hot.
Build the routing rules in n8n/Zapier
In your orchestrator, branch on the tier and the other attributes. Route hot leads to the correct rep using your real assignment logic: round-robin within a territory, by company-size segment, or to the existing account owner when it is a current customer or open deal. Route warm leads into a lighter sequence and nurture leads into marketing automation. The orchestrator is where your go-to-market routing policy stops being a wiki page and becomes executable code that runs identically every time.
Handle the existing-customer case as an explicit, early branch: if is_existing is true, route to the account owner or CS and stop, never falling through to a new-business assignment. This single branch prevents the most damaging routing error there is, and it belongs near the top of your logic so it cannot be skipped.
Build a fallback owner for any lead that fails the routing rules, the personal-email leads that could not be enriched, the edge cases, the weird ones. A real human owns the fallback bucket and works it, so that a lead which matches no rule lands on someone's desk rather than disappearing into a gap in the logic.
TipBuild the fallback owner before you build the clever rules. The leads that match no rule are exactly the ones most likely to be unusual and high-value, and a lead that silently vanishes is worse than one routed imperfectly. Nothing should ever have no owner.
Assign in the CRM and alert the rep instantly
Have the workflow create or update the lead in HubSpot or Salesforce with all the enriched fields, the score, the tier, and the reason, then set the owner per the routing rules. Immediately post a Slack message to the assigned rep with the key context and a direct link to the record. The whole sequence from submission to rep alert should complete in well under a minute; that speed is the entire value proposition, so measure it and protect it.
Make the Slack alert genuinely actionable: who they are, where they work, the source page and intent, the tier and reason, and one-click links to the CRM record and their LinkedIn. The Slack alert with context is what actually drives fast action; an assignment buried in the CRM gets noticed hours later when the rep next happens to check, by which point speed-to-lead is already lost.
Start the speed-to-lead clock on assignment and surface it. A rep who sees 'this lead came in 90 seconds ago, reach out now' behaves differently than one who has no idea how fresh the lead is.
Monitor speed-to-lead and tune
Track two things: time-from-submission-to-first-touch, and routing accuracy. If reps report mis-routed leads or low-quality 'hot' leads, tighten the scoring rubric, because a hot tier that is often wrong trains reps to ignore the tier entirely. If enrichment is missing data for a meaningful share of leads, add a fallback provider in Clay's waterfall or send the misses to the human fallback owner rather than letting thin data drive a bad auto-classification.
Watch your enrichment credit usage at volume. Cache or skip enrichment for already-known domains, and avoid re-enriching the same company on every form fill from it. Inbound volume can spike unpredictably, and an unbounded per-lead enrichment cost is a budget surprise waiting to happen.
Periodically audit the nurture bucket for false negatives, the real buyer who got mis-scored as nurture and quietly buried. The cost of a mis-scored nurture lead is invisible (you never hear about the deal you didn't get), so you have to go looking for it deliberately. Once tuned, the pipeline runs itself and you have both faster speed-to-lead and reps focused only on qualified inbound.
TipAudit the nurture bucket regularly for buyers you mis-scored. A mis-routed hot lead generates a complaint; a mis-scored nurture lead generates silence, because you never learn about the deal you lost by burying it. The expensive errors are the invisible ones.
Inside the prompt
The scoring prompt is short, but every line is there for a reason. Here is what each one is doing and why.
- Use ONLY this data"Use ONLY the enriched data"
- Stops the model inventing a company size or title. It scores what Clay found, not what it guesses.
- Tight JSON output{tier, reason, is_existing}
- The orchestrator branches on tier and is_existing programmatically. Free text cannot be routed on.
- Existing-customer first"if CRM match shows a customer or open deal: set is_existing true, route to the account owner"
- Handles the most damaging error explicitly and early, so a current account never gets cold-pitched.
- Make hot demanding"hot if ICP fit AND work email AND a buying-intent signal"
- Three conditions, not one. If everything scores hot, reps triage the queue themselves and you are back where you started.
- Missing data = neutral"treat missing data as neutral, do not penalize a blank field"
- A failed enrichment should send a lead to a human fallback, not auto-classify it cold on thin data.
- Force a one-line reason"reason: one sentence citing the facts"
- This is what the rep reads in the Slack alert. It makes every tier defend itself in the rep's own glance.
What you get
A bare form submission enriched, scored, routed, and surfaced to the right rep with full context in seconds.
FORM SUBMISSION (t = 0s):
'Dana Ruiz, d.ruiz@meridianfreight.com, source: /pricing, message: want a demo'
AFTER ENRICHMENT + SCORING (t = 8s):
Enriched: VP Operations, Meridian Freight, 620 employees, freight & logistics, work email, no existing CRM record.
{
"tier": "hot",
"reason": "VP Ops at a 620-person logistics firm (ICP fit), work email, requested a demo from the pricing page.",
"is_existing": false
}
CRM (t = 12s): Lead created, owner = Marcus (logistics territory, round-robin), tier = Hot, all enriched fields written.
SLACK to @marcus (t = 14s):
:fire: *Hot inbound*, Dana Ruiz, VP Operations @ Meridian Freight (620 emp, logistics)
Requested a *demo* from /pricing just now. ICP tier A. Work email, not an existing account.
Record: <link> | LinkedIn: <link>
Speed-to-lead clock started 14s ago, reach out now.
---
EXISTING-CUSTOMER CASE (different lead): is_existing true -> routed to the account owner + CS, never to new business.
- tier"hot"
- The field the orchestrator branches on. Make hot demanding or reps stop trusting it and triage the queue anyway.
- reasonVP Ops at a 620-person logistics firm, work email, demo from /pricing
- The line the rep reads. A tier with no reason gets ignored the first time it is wrong.
- is_existingfalse
- The most important field. If true, route to the account owner, never new business. This is the check that prevents the worst routing error there is.
- t = 0sform submitted, n8n webhook fires
- The clock starts here. Everything after is racing intent that decays in minutes.
- t = 8sClay enriched and scored
- Company, size, role, CRM match, tier, all in seconds. This is what makes second-level speed-to-lead real instead of aspirational.
- t = 12s → 14sHubSpot record written, Slack alert sent
- Owner assigned, rep pinged with context and links. The whole chain is done before the buyer has closed the tab.
Pitfalls to avoid
Routing existing customers to new-business repsWithout a CRM-match check as an early, explicit branch, a current customer's inbound gets cold-pitched, which is embarrassing and erodes the account. Always route existing accounts and open deals to the owner or CS, never to new business.
Slow enrichment defeating the purposeIf enrichment and scoring add minutes, you lose the speed-to-lead advantage that justified the whole build. Keep the pipeline lean, measure submission-to-alert time, and protect it; a slow 'fast' pipeline is just a queue with extra steps.
No fallback ownerLeads that match no routing rule can silently vanish, and those edge cases are often the unusual, high-value ones. Always set a default human owner who works the fallback bucket so nothing is ever dropped without anyone noticing.
Over-trusting the tierA mis-scored 'nurture' lead can bury a real buyer in silence, since you never hear about the deal you lost by burying it. Periodically audit the nurture bucket for false negatives and tune the rubric; the expensive routing errors are the invisible ones.
Unbounded enrichment cost at volumeInbound volume can spike and per-lead enrichment credits add up fast. Cache or skip enrichment for already-known domains and avoid re-enriching repeat companies, or a traffic spike turns into a budget surprise.
Questions people ask
- How fast does the whole chain actually run?
- Submission to rep alert should complete in well under a minute, and in practice it is seconds: t=0 the form fires the n8n webhook, t=8 Clay has enriched and scored, t=12 the HubSpot record is written and assigned, t=14 the Slack alert lands. That speed is the entire value proposition, so measure submission-to-alert time and protect it. A slow 'fast' pipeline is just a queue with extra steps.
- Should I use n8n or Zapier for the routing?
- Either works; the architecture is identical. n8n catches the form webhook and gives you more control over branching and the CRM writes, which is why it sits at the front. Zapier is the no-code alternative for the same routing logic. Pick by what your team already runs and is comfortable maintaining, not by feature checklist.
- What happens to a lead that fails to enrich?
- It goes to a human fallback owner, never to the nurture bucket on missing data. Inbound is higher-value than a cold list, so a thin row is more likely to be a real buyer with a personal email than junk. Build the fallback owner before the clever rules: a lead that silently vanishes is worse than one routed imperfectly, and nothing should ever have no owner.
- How do I keep a current customer from getting cold-pitched?
- Two places. Clay checks the CRM during enrichment and the scoring prompt sets is_existing true with a reason that says route to the account owner. Then the orchestrator branches on is_existing as an early, explicit rule, before any new-business assignment can fire. Handle this case first, then make the rest fast.