Home Services About Blog FAQ Contact
← Back to blog

Why AI lead routing fails on sentiment (and what to route on instead).

The popular n8n pattern — classify inbound messages as hot, warm, or cold, then split the flow — misfires on about a quarter of real submissions. Here's the fact-extraction approach that routes on what actually matters.

There's a lead routing template that's made the rounds in automation circles: run the inbound form message through an LLM, get back a hot/warm/cold classification, and split your n8n flow from there. Hot leads ping Slack. Warm go into a nurture sequence. Cold get archived. The appeal is real — no one has to triage form submissions by hand, and responses go out before your team wakes up.

The problem is what "sentiment" is actually measuring. It's reading writing tone, not buying intent. And tone tracks a lot of things that have nothing to do with whether someone will pay you.

What sentiment routing is actually doing

When you ask an LLM to score a lead message as hot, warm, or cold, the model looks at enthusiasm, word choice, and phrasing. Confident language → hot. Uncertain hedging → cold. The assumption built into that logic is that how someone writes a contact form message correlates with how serious they are as a buyer. It doesn't, consistently.

A dev.to post making the rounds on n8n lead routing — a solid walkthrough of exactly this pattern — acknowledged the failure mode in its own conclusion: sentiment classification breaks on short messages and on non-native English. The recommended fix was a low-confidence branch. But that branch routes ambiguous cases to manual review, which means the automation is handling the easy decisions and humans still handle the hard ones. You haven't solved the triage problem; you've moved it.

From six weeks of testing our own lead qualification workflow, roughly 27% of real form submissions are short, terse, or written in a register that reads as uncertain to a sentiment model. That's not an edge case you can tune around. That's a quarter of your pipeline routing wrong.

Where it misfires specifically

Serious buyers often write the shortest messages. They've already decided they want to have a conversation — they don't feel the need to pitch themselves in a contact form. "Interested in your automation services" from a director with a real project scores as warm or ambiguous. Meanwhile, someone who'll never sign anything writes three enthusiastic paragraphs and comes through as a hot lead.

Non-native English speakers score cold systematically. Hedged politeness — "I was wondering if perhaps you might be able to assist with" — is a linguistic pattern, not a lack of intent. Treat it as low intent and you've quietly filtered a chunk of international buyers from your Slack notifications.

Polite buyers with budget read as cold. Enthusiastic tire-kickers read as hot. Sentiment is measuring the wrong thing.

The confidence score problem compounds both failures. If you don't know your classifier's hit rate field-by-field, a single "80% confidence" number doesn't tell you anything useful. It averages over every submission type and hides which cases the model is actually confused about.

What to route on instead

Ask the model to extract specific facts from the message rather than judge its tone. Facts are either there or they're not — no confidence dial, no ambiguity about what you're measuring.

The fields worth extracting for most service businesses:

Each field is populated or null. Two or more populated → high-intent, worth a Slack alert and a same-day call. One field populated → warm, into a sequence. All null → manual review queue, 30 seconds of human judgment.

The constraint that makes this work:

If the model can't quote the exact phrase from the message that fills a field, the field stays null. No inference, no interpretation — a direct extraction or nothing.

This isn't just accuracy theater. It turns the extraction into a measurable thing. You can track the null rate per field over time — "budget" will probably be your weakest extractor for a while — and tune the prompt for that specific field. Every null-routing lead that eventually converts also tells you exactly what language your real buyers use that the current prompt isn't catching.

How to set this up in n8n

The architecture is simpler than the sentiment version:

  1. Trigger (form webhook or email) fires on a new submission.
  2. A Claude or GPT-4o node runs a structured extraction prompt. Output is a JSON object with your five or six fields, each a string or null.
  3. A Switch node checks how many fields came back populated. Branch on ≥2, exactly 1, and all null.
  4. The manual review queue is a Slack message or a row in a sheet — not a dead end.

The extraction prompt ends with something like: "For each field, include the exact phrase from the message you extracted it from. If you cannot find a direct quote, return null for that field." That line is what enforces the constraint and what makes the null rate a meaningful metric.

If you're already running a Claude node for AI automation, this swaps in as a prompt change, not an architecture change. The lead qualification walkthrough we published covers the n8n setup; this replaces the sentiment-scoring step inside that workflow with the fact-extraction prompt above. The rest of the flow stays the same.

The manual review queue gets shorter as the prompt improves, not longer. And when you audit it, you're not looking at failures — you're looking at a dataset of how your real buyers actually write when a model can't extract anything from them. That's the useful feedback loop sentiment scoring never gives you.

— Cole

Sources

Running a lead routing workflow that keeps misfiling things?

We've built this fact-extraction pattern for several service businesses. Takes about a day to wire up — and the null-rate audit tells you more about your buyers than a year of sentiment scores.

Talk through your setup →