Lead-qualification automation for a people-run sales pipeline
The client's sales pipeline lived in WhatsApp threads and one person's head. Leads were qualified inconsistently and the good ones went cold before anyone got to them.
- Python
- LLM extraction & classification
- Workflow orchestration
- CRM / sheet integration
The constraint
The client had more inbound than they could work, and no consistent way to tell a serious lead from a tyre-kicker until someone had spent 20 minutes on a call. Qualification criteria existed only in the founder's head, and shifted slightly each week. Leads arrived across a web form, WhatsApp, and email, landed in different places, and the first-response time on the best leads was measured in days.
The hard part was not the model. It was reconstructing what "a good lead" actually meant for this business from watching how deals had actually gone.
What I built
A pipeline that runs on every inbound lead:
- Ingest & unify. Form, WhatsApp, and email leads normalise into one record.
- Enrich. Public signals about the company and contact are pulled in and summarised.
- Score & classify. An LLM step maps the lead to the qualification criteria we reconstructed with the client, and attaches a short written rationale rather than just a number.
- Route. High-scoring leads are pushed to the top of the sales team's list with the rationale attached; low-scoring ones get a lighter-touch path.
Source is public: Risabkshetri/LeadQualification-Agent.
What broke
- The criteria were a moving target. The first scoring rubric was obsolete within weeks because the client's focus shifted. The fix was making the rubric a config the client owns, not something baked into code.
- Enrichment dead ends. For a meaningful share of leads, there was simply no public signal. The step had to return "nothing found" cleanly instead of stalling the pipeline.
- Over-automation risk. Auto-demoting a lead the founder personally cared about erodes trust in the whole system fast. Low-confidence classifications now surface for a human rather than acting silently.
Outcome
The sales team now starts the day with a ranked, annotated list rather than an undifferentiated backlog, and the best leads get a same-day first touch.
What I'd redesign
Inbound leads are enriched, scored, and routed automatically; the sales team starts the day with a ranked list instead of a backlog.