Unifying lead intake and cutting first-response time for a solar installer
Enquiries arrived across five channels into three inboxes nobody fully owned. We unified intake, enriched every lead before contact, and cut first response from many hours to minutes.
- Organization
- Commercial solar installer
- Renewables · ~55 staff · high enquiry volume across channels
The shape of the system
What this demonstrates
Every inbound channel — web form, shared inbox, ad platforms, WhatsApp and phone — lands in one deduplicated queue instead of five separate places
Company, sector and site details resolve before a reply drafts, so the first message references the actual enquiry rather than a generic template line
Every outbound message waits behind approval until the team chooses, per lead category, to relax it
Follow-up sequences cancel automatically on reply or on a CRM stage change, so nobody is chased after they've already booked
01/The problem
Enquiries came in through the website form, a shared sales inbox, Google and Meta lead ads, WhatsApp, and phone. Each landed somewhere different, and no single person could see all of them. Leads were being lost between channels, and nobody could say how many, which is its own answer.
First response was slow, and worse over weekends. In commercial solar, where a prospect typically approaches several installers at once, the first credible response has an outsized effect on who wins the work.
Salespeople were spending the first hour of each day triaging: deleting spam, deduplicating the same lead arriving twice through different channels, and manually researching each company before replying. High-value people doing low-value sorting.
02/Approach
Unification came before automation. Everything lands in one queue with one lead record and proper deduplication, because you cannot sensibly automate a process whose inputs you cannot see. That alone surfaced leads a month that had previously fallen through gaps.
Enrichment happens before drafting, not after. Company size, sector, site type and any prior CRM history are resolved first, so the reply can reference the actual site rather than opening with 'thank you for your enquiry'. Enrichment before generation is what separates a personalised reply from an obviously templated one.
We shipped with mandatory human approval on every outbound message, then let the team relax it themselves. They moved to auto-send for the highest-confidence lead types after a few weeks, once they had watched enough drafts to trust them. Sequencing it that way meant adoption was theirs rather than ours.
03/What we built
- 01
Unified intake across the web form, shared inbox, Google and Meta lead ads, WhatsApp and transcribed voicemail, with cross-channel deduplication onto a single lead record.
- 02
An enrichment step resolving company, size, sector and site characteristics, plus a full check of existing CRM history before any contact is drafted.
- 03
Rule-based qualification scoring — commercial versus domestic, roof type, estimated system size, geography — with routing to the right salesperson or to a nurture track.
- 04
Drafted first responses referencing the actual enquiry, with approval gating that the team can switch per lead category as their confidence grows.
- 05
Tapering follow-up sequences that cancel instantly on reply or on a CRM stage change, so nobody is chased after they have already booked a survey.
- 06
A response-time and conversion dashboard broken down by channel, which reframed the marketing spend conversation as a side effect.
04/Outcome
First response now goes out within minutes, day or night, instead of whenever someone next opens the inbox — holding through evenings and weekends.
Each salesperson gets back time previously spent on triage and research, redirected to actual conversations.
The channel dashboard was the unexpected outcome: one paid channel producing a healthy volume of enquiries converted at a noticeably lower rate than the others once it could finally be measured — that budget moved within a month.
05/What went wrong
We initially auto-sent to everything scoring above a threshold, and in week one the system confidently replied to a long-standing customer as though they were a new prospect — because the CRM history check ran after scoring rather than before. Nobody was lost, but it was a bad look and entirely our error. History resolution now blocks drafting, always, and known-contact leads route to a human regardless of score.
Every engagement has one of these. A case study without it is a brochure.
06/Detail
Stack and services drawn on
Built with
- n8n
- FastAPI
- Postgres
- CRM connectors
- LLM APIs
Recognise this problem?
We start every engagement by measuring what the manual process actually costs. That first week tells you whether the rest is worth doing.