AI for B2B lead qualification: what to delegate
Use an LLM to triage and enrich inbound B2B leads before a rep reads them. What the model can decide, what it can't, and how to keep a trail.
In this article
In almost every B2B account I audit, the contact form takes three different things down the same pipe: the real lead, the candidate looking for a job, and the vendor who wants to sell you SEO. All three land in the same inbox. All three eat the same slice of a salesperson who costs money by the hour, and the third is usually the best written.
This post is about the triage layer: what happens between someone hitting submit and a human reading the lead. It isn’t about the scoring model, which I’ve covered separately. It’s about using an LLM to read free text and clean up messy data, without it ending up as the thing that decides who gets a call.
In 30 seconds:
- AI is for reading and structuring the lead, not for scoring it. The scoring weights are a business decision.
- The model will hand you a confident score even when it knows nothing about the lead. That’s the failure you design against.
- An automated rejection with no human review is regulated territory, not just risky territory.
- The audit trail (input, prompt version, output, human decision) is what turns this into a system.
- You’re sending personal data to a third party, so you need a lawful basis, minimisation and a written retention period.
What does an LLM actually do well with a B2B lead?
Read text and turn it into fields. That’s it, and it’s plenty. The expensive part of qualifying a B2B lead isn’t the arithmetic: it’s that the information arrives as untidy prose inside a “tell us about your project” box nobody normalises.
There are five tasks where, in my experience, the model earns its keep from day one:
- Pulling facts out of free text. Budget, timeline, the tool they already use, number of sites. It’s in the message and nobody extracts it: that’s two minutes a lead.
- Classifying intent. Pricing request, information request, job application, inbound vendor pitch, spam. I use five labels, not fifteen.
- Spotting the obvious junk. The candidate who pastes a CV into the comments box and the agency that opens with “I hope this message finds you well” both get caught reliably, because the pattern is linguistic.
- Normalising company names. “acme”, “Acme Ltd”, “ACME UK” and “acme.co.uk” are one account. Your CRM thinks they’re four.
- Drafting a three-line summary so the rep knows what the call is about.
Notice what isn’t on that list: none of the five is a decision. They’re text transformations, and a text transformation gets checked in two seconds with the original message next to it. That’s the whole design. And if your CRM holds three records for one account, those duplicates inflate your lead volume and sink your apparent close rate.
What should the model never decide on its own?
Two things: the final scoring weights, and anything that ends in an automated rejection. The rest is negotiable.
I’ll start with the failure, because it explains the rule. Ask a model to score a lead from 0 to 100 and it hands back a 78. With forty words of message, no firmographic data, and no idea whether that company already bounced twice, it gives you a number and a perfectly confident tone. Anthropic’s docs say it plainly: “Even the most advanced language models, like Claude, can sometimes generate text that is factually incorrect or inconsistent with the given context”. The same page closes by noting that these techniques reduce hallucinations but don’t eliminate them, and that critical information always needs validating.
So what counts as critical information here? Whatever decides if a person gets a call or vanishes into a folder.
| Task | Who decides | Why |
|---|---|---|
| Extract budget and timeline | Model, spot-checked | Transcription, verifiable against the original |
| Classify intent into 5 labels | Model | Linguistic pattern, low cost of error |
| Flag as spam or job application | Model proposes, human confirms | A false positive here is a lost lead |
| Normalise company name | Model proposes, human merges | Touches CRM master data |
| Assign the scoring weights | Human, always | Business decision, not a reading task |
| Discard a lead | Human, always | Automated rejection affecting a person |
That last row isn’t me being cautious. The European Commission explains that fully automated decisions are only authorised in three situations, and that the person must be guaranteed the “right to obtain human intervention and their right to contest the decision”. I’ve seen pipelines that quietly bin anyone the model scores below 40. That’s exactly what the text regulates.
There’s a middle version I do use: the model sorts the queue and discards nobody. Hot at the top, cold at the bottom, and the rep works down as far as the day allows. The difference between sorting and discarding sounds like semantics and is the opposite.
How does this sit on top of the scoring you already have?
As a layer in front of it, never as a replacement. Your scoring model defines which criteria matter and how much. If you haven’t written it down yet, start there: I have a guide on B2B lead scoring without over-engineering and there’s no sense automating a decision you haven’t made.
What I do when I build this for a client:
- Freeze the scoring model on one page. Criteria, weights, MQL and SQL thresholds. If it doesn’t fit on a page, it’s over-engineered.
- Define the output schema before the prompt. Exact fields and types. That’s what stops the model writing an essay where you expected a boolean.
- Enforce that structure in the call. Anthropic’s structured outputs docs name the problem directly: “Without structured outputs, Claude can generate malformed JSON responses or invalid tool inputs that break your applications”. With
strict: trueon the tool, the schema gets validated. - Leave a field for uncertainty. A
confidence: high | medium | lowand a one-linereason. Anthropic recommends giving the model explicit permission to admit it doesn’t know, and that permission belongs in the prompt. - Compute the score outside the model. The extracted fields go into your formula, in a sheet or in the CRM. The model reads, your rule scores.
- Review the first two hundred leads by hand. It’s the only way to learn your real error rate.
Step five causes the most argument and the least doubt. If the LLM returns the score, you lose the ability to explain why a lead got 62 and not 71. With the formula outside, anyone can open the sheet. I’d rather argue about a sheet.
Careful with what you push to the CRM. If the enriched lead feeds offline conversions into Google Ads or Meta, the field you send has to be the human decision, not the model’s proposal. I cover the loop in CRM and B2B advertising integration and the upload side in offline conversions in Google Ads for B2B.
What has to be logged for this to be auditable?
Six things per lead, and they fit in one database row. Without them you don’t have a system: you have a black box that will one day behave oddly with nobody knowing why.
- The literal input sent to the model, form text included.
- The prompt version. A number you bump every time you touch a comma. Sounds excessive until the first time performance drops and you can’t say what changed.
- The exact model identifier, with its version.
- The full output, fields and confidence.
- The final human decision and who made it.
- A timestamp on every step.
With that you can answer the question that always arrives eventually: why did this lead end up at the bottom?
There’s a side benefit I didn’t expect: that log is your evaluation set, for free. Three months in you have hundreds of cases with the model’s proposal and the human correction side by side. Anthropic also suggests asking the model to quote the exact sentence supporting each claim, which lets you see at a glance whether “budget: £30,000” came from the message or got invented.
What about the personal data in the form?
You’re sending it to a third party, and that gets documented before the first API call, not after the first complaint. Three fronts.
Lawful basis. You need one for this specific purpose. Legitimate interests often fits when you’re qualifying an enquiry the person sent you themselves, but that depends on your case and it’s worth writing down rather than assuming.
Minimisation. The European Commission sums up the principle in a line I use as a filter: personal data “should only be processed where it is not reasonably feasible to carry out the processing in another manner”, and it must be adequate, relevant and limited to what’s necessary. Translated into the pipeline: don’t ship the whole form object. Ship the message text and the email domain, because the name and the phone number add nothing to an intent classification.
Retention. The same document asks you to keep data for the shortest time possible. Here’s where the vendor’s small print matters: for the Anthropic API, the policy states that “we automatically delete inputs and outputs on our backend within 30 days of receipt or generation”, and the retention docs add that stored data is never used for model training without your express permission. The period for your own log is yours to set, and it needs a number on it.
One practical note: the better the form, the less personal data moves around. A budget dropdown removes the need to extract it from free text, and I go into that in B2B landing pages for qualified leads.
When is none of this worth building?
When you get fewer than thirty or forty leads a month. Reading them yourself is usually faster, more accurate, and generates precisely zero lines of data protection documentation. Automation carries a build cost and a maintenance cost, and neither drops with volume.
I also rule it out when the real problem is elsewhere. If leads arrive badly qualified from the ad, no downstream triage fixes it: you’re paying to attract the wrong person and paying again to identify them. The work sits earlier, in the offer and the targeting, and I cover it in the B2B lead generation guide. If you also don’t know what a qualified lead costs you, the B2B cost per lead guide comes first.
A warning about autonomy. I’m describing one model call per lead, with a fixed schema and a verifiable output. Not an agent that queries your CRM, decides, and answers emails. The distinction matters, and I unpack it in Claude agents for digital marketing.
Frequently asked questions
Can I just ask the AI to score the lead from 0 to 100?
You can. It’ll return a number that isn’t reproducible or explainable, and you won’t be able to justify why that lead got 62 rather than 71. I prefer using the model only to extract the fields, then computing the score with my own formula outside it. That way the arithmetic stays auditable.
Is it legal to reject leads automatically with an AI model?
It depends on whether the decision significantly affects the person. The European Commission limits fully automated decisions to three situations and requires safeguards such as the right to human intervention and to contest the decision. My advice is simple: sort the queue with the model, but let a human sign off the discard.
Which form data should I send to the model?
The minimum. To classify intent, the message text and the corporate email domain are enough. Name, surname and phone number add nothing there, so they don’t need to leave your system. Less data sent means less risk exposure and, nearly always, a better prompt.
How long does a triage layer like this take to build?
With the scoring model already defined, it’s usually a week of real work: schema, prompt, integration and testing. What stretches is validation. Reviewing two hundred leads by hand takes what it takes, and without that phase you don’t know your error rate.
Do I have to tell the user a model reads their message?
Yes. It fits naturally into your privacy policy: what’s processed, why, which processors are involved, and how long it’s kept. If any part of it becomes an automated decision, EU rules require you to disclose that it exists and the logic behind it. It’s short, but it has to be written first.
The model reads, you decide
What makes an LLM useful here isn’t that it scores better than you. It’s that it reads a hundred messy messages in a minute and leaves them in a table. The decision stays human. The arithmetic stays in your sheet.
When someone shows me an AI qualification system that isn’t working, I nearly always find the same thing: they asked the model to decide instead of to read. And because it never says “I have no idea about this lead” unless you explicitly allow it to, it returns confidence where there is none. I’ve seen that failure take a year to surface. With an audit trail it shows up in two weeks.
If you’d like me to look at your inbound lead flow and tell you whether this makes sense in your case, book 30 minutes of consulting and we’ll go through it with your numbers in front of us. I’d rather tell you before you build anything.
Could your ad campaigns
perform better?
30 minutes to review your situation and tell you exactly what I would change. No pitch, no sales proposal.