Case study · AI automation · Runs on n8n and Claude
Exploding Leads: one buying-signal system running four clients in four industries
Exploding Leads is an outbound agency. Its client Third Chair sells IP monitoring to music rights holders, and the best week to reach a label is the week it signs an artist, buys a catalogue or hires a licensing lead. We built the system that spots those moments, checks every source and sends the sales rep one email per company with a draft ready to send. The same core now runs four clients.
- Client
- Exploding Leads, an outbound agency
- Built for
- Third Chair (music rights), then BuildWitt (heavy civil construction) and Atalan (health systems)
- Engagement
- April to May 2026, with work for new clients ongoing
- What we built
- Signal detection, source checking, email delivery and a client portal
- Stack
- n8n, Supabase, Claude, Serper and the Gmail API
- AI in the product
- Claude
- Status
- Live on the agency's own n8n instance
- 4clients live on one system
- 13signal types, each with its own search terms and prompt
- 4checks on every source before a signal reaches an inbox
- 92% to 98.7%conformance with BuildWitt's written brief after tuning
The problem
Watching dozens of companies by hand for the right moment does not scale. Generic news alerts bury the few useful items under noise, and a rep who emails about the wrong event loses the account's attention.
The agency asked for something its reps could trust without checking each alert, and something it could reuse for its other clients.
What we built
Two loops.
One loop finds signals on a weekly or monthly schedule. The other sends them every ten minutes, up to a daily cap. A slow search never holds up email, and a burst of signals never floods an inbox.
A six-step detection pipeline.
For each company the system builds seven or eight search queries, runs them, removes duplicates and keeps only results that name the company. Claude reads what is left and returns the signal type, the event date, the source link and a key quote, or marks it not relevant.
Four checks on every source.
The prompt requires a link taken from the search results. A shape check removes bare homepages and profile pages. The link must load. Then the page itself is fetched and Claude confirms it names the company and the event. Every dropped signal is logged with its reason.
One email per company.
Signals for the same company arrive as one email. It says what happened, links the source and ends with a short outreach draft the rep can edit and send. Each client has its own voice rules: BuildWitt drafts are two sentences of 40 to 50 words and end on a question.
A portal clients run themselves.
Each client uploads its own target list, sets the schedule and the daily cap, and can review every run and every email. The agency creates new clients from the same app.
From a company name to a rep's inbox
How the AI is kept in check
- It must cite a source it was given. A link that was not in the search results is rejected.
- The page is read, not trusted. A signal is kept only if the page names the company and the event.
- It can say “not relevant”. That is a valid answer, and most results get it.
- Nothing is sent empty. A run with no signals sends no email.
- A person sends. The rep edits and sends every outreach message.
Results
| Measure | Result |
|---|---|
| First dry run | 3 of 3 signal workflows found real, public events, each in under 16 seconds |
| BuildWitt brief conformance | 92% before tuning, 98.7% after, from an internal audit against the client's written brief |
| Added cost of the source checks | About $0.003 per surviving signal |
| Reuse | 4 clients in music rights, software, heavy civil construction and health systems on the same core |
“MUCH better.”
Under the hood: stack and engineering notes
Stack: n8n, self-hosted, with 29 production workflows. Supabase Postgres, Auth and Edge Functions with 14 versioned migrations. Claude for classification, page checks and email copy. Serper for search. The Gmail API for sending. A React portal hosted on Vercel.
Keeping clients apart: every table row carries its owner, and every workflow read filters on it, so two clients can track the same company independently.
Problems we fixed: pacing that survives a restart, by sending one company's email every ten minutes in place of one long run. No repeat alerts, through a unique hash for each signal. Runs that finished green with nothing found, after a search account ran out of credit.
Want your reps to hear about the right moment first?
Tell us which companies you watch and what counts as a signal on a 30-minute call. You leave with a plan and a cost, in writing.
Book a discovery call