1. Website form → enriched, scored and routed in minutes
Leads from the website form land in a shared inbox nobody owns. By the time someone opens it, it's Thursday, half are students and job applicants, and the two that mattered have already booked a call with someone else.
Trigger: Webhook (website lead form submission)
How the workflow runs
- Trigger
The form posts to a Webhook. Your website's lead form posts straight into the workflow on a Webhook — first-party and honest, no connector required and none pretended. Every submission enters the same path within seconds of being submitted.
- Parallel
Research while the reply is drafted. A Parallel node runs two things at once: a research pass over public, business-level information about the company, and a first-draft acknowledgement. The lead isn't waiting on the slower branch.
- Agent
Enrich — company facts only. An economy-tier agent gathers business-level facts: what the company does, rough size band, whether they mention a competitor publicly. It never assembles a personal profile, and it never scrapes personal contact details.
- Code
Score it with YOUR ICP rule. A user-defined tool — a SpEL expression over the tool's JSON input — computes the score. Sandboxed by construction: no method calls, no constructors, no bean or type references, no loop in the grammar. A formula tool, not a scripting engine — which is precisely the shape of an ICP score, and it means you tune your own definition of a good lead weekly without a developer or a redeploy.
- Condition
Route by score and intent. A Condition node splits: high-score demo requests to the founder on Slack immediately, mid-score into the nurture cadence, students/applicants/spam closed politely and out of the pipeline.
- Approval
Approve the first outbound reply. An Approval node holds the drafted reply to a real prospect. The agent drafts; a human sends anything going to a prospect.
Channels & connectors
- Webhook
- Slack
- Approval / HITL
- Tool (MCP → your CRM)
Outcome
Every form submission is enriched, scored against your own written ICP rule and routed within minutes, with the genuinely good ones surfacing in Slack while they're still warm.
Why it helps
The mechanism is speed and an explicit rule: the delay that loses inbound leads is queue time, not reply quality, and the scoring being a formula you wrote means routing is consistent on Thursday afternoon and explainable when you disagree with it.
Build spec
2 agents — 1 economy-tier enrichment agent + 1 standard-tier reply drafter, run in Parallel. Scoring is a user-defined SpEL tool — deterministic, no model call, no per-lead variance. · Pattern: Parallel (enrich ‖ draft) → deterministic SpEL scoring → route → human approves the outbound
System prompt (paste-ready)
You triage inbound leads for {{company}}. Given a form submission {name, work_email, company, message} plus enrichment, return strict JSON {intent: DEMO|PRICING|SUPPORT|JOB_SEEKER|STUDENT|SPAM, summary, what_they_want, employees_band, uses_competitor: true|false|unknown, requested_demo: true|false}. Use ONLY the submission and publicly available business-level facts about the company. Never build a personal profile of the individual, never look for personal contact details, never guess at seniority or salary. Set unknown rather than inferring. Then draft a short first reply that answers their actual question from Knowledge — no pitch, no fabricated familiarity, and no claim that you've read their blog, used their product or admired their work. Never state a price beyond the published page and never offer a discount.Agent roles & model tiers
Enricher (every lead) — Economy tier — runs on 100% of submissions including the job applicants, so this is the volume step
Business-level public facts only, into strict JSON, with `unknown` where the facts aren't there. No personal profiling, no scraped contact details, no inference dressed as fact.
Reply drafter (real prospects only) — Standard tier with a fallback model — a prospect reads this one
Short reply grounded in Knowledge, answering what they actually asked. No pitch, no fabricated personalisation, no price or discount commitment.
Scorer — NOT an agent — User-defined SpEL tool: deterministic, zero model cost, identical every run
Tenant-authored formula, e.g. `lead_score`: (input.employees > 200 ? 40 : 10) + (input.usesCompetitor ? 30 : 0) + (input.requestedDemo ? 30 : 0). You own the weights — raise the demo weight, add a geography or industry term, and the next lead is scored the new way with no developer and no deploy.
MCP connectors
- Your CRM — via a Tool (MCP) node to create the lead record (no first-party connector)
- Your analytics / ad platform — via a Tool (MCP) node if you attribute the source (no first-party connector)
- Website form — inbound via Webhook (first-party); Slack, Email, WhatsApp — first-party notification and reply channels
Built-in tools
- user-defined tool `lead_score` (SpEL over the enriched lead JSON — your ICP weights, tunable weekly)
- web_search (public, business-level company context only)
- knowledge_search (positioning and objection handling, so the reply answers the real question)
- http_request (create the lead in your CRM through its API)
Guardrails
- Enrichment is business-level and public only — no personal profiles, no scraped personal contact details, no purchased data, and `unknown` wherever the fact isn't there rather than an inference presented as fact
- No fabricated personalisation: the agent may not claim to have read their post, visited their site or used their product
- No price beyond the published page and no discount — ever, from any agent; commercial commitments route to a human
- Every outbound reply to a real prospect passes the Approval node before sending; the agent drafts, a human sends
- Consent and opt-out are checked before the first message, and the reply channel is the one they used or consented to — a form submission is not WhatsApp opt-in
- Job seekers, students and spam are routed out of the sales pipeline politely and are never added to any nurture cadence
Cost strategy
This is the textbook cost-routing case: enrichment runs on every single submission including the ones that will be closed as job applicants, so it belongs on the economy tier with a hard cap; the reply drafter — standard tier plus a fallback — only ever runs on the qualified slice. Scoring costs nothing at all because it's a SpEL formula rather than a model call, which also means the score doesn't drift between runs.
Output & delivery
The Webhook fires → Parallel enrichment and drafting → the user-defined `lead_score` SpEL tool scores against your own ICP → the Condition node routes (Slack ping for hot demo requests, cadence for mid, polite close for the rest) → the Approval node gates the outbound reply → the lead is written to your CRM via a Tool (MCP) node with the score and its reason attached.