Jonathan Bayo
All case studies
IntelligenceClient3 min read

Buyer intent research pipeline

This started as the weekly company monitor and grew into the whole back end of a sales intelligence business. Collectors find signals, an orchestrator turns them into companies and scores them, enrichers add people and firmographics, verifiers check every email and phone, and a weekly loop re-researches the companies that went quiet. It all runs overnight.

3,300companies tracked
900in the top two tiers
4,000+contacts
97%domain coverage, top tiers
Runs
nightly, 28 n8n workflows
Companies
about 3,300, 900 in the top two tiers
Contacts
4,000+, every email checked
Client
B2B sales intelligence company

Why it exists

The client sells to companies that are about to spend on AI and consulting. The signal that they're about to spend shows up in the news, in hiring, in filings and on company sites, but nobody can read all of that for thousands of companies. The first version watched 200 companies once a week. The client wanted every company they might ever sell to, scored every night, with someone to call.

How it runs

Every night
Trigger
Collectors
Tavily, filings, news, hiring
Transform
Orchestrator
signal to company, dedupe
Transform
Score
deterministic tiers
AI
Claude
description, fit, problem
Fetch
Enrich
domain, firmographics, people
Fetch
Verify
email and phone
Store
Supabase
CRM reads it
Every week
Trigger
Monday
stuck companies
Fetch
Re-research
biggest first
Transform
Classify
new signals
Store
Re-score
next night
  1. Collect

    Several collectors search for signals: funding, layoffs, leadership changes, AI initiatives, regulatory pressure, new hires. Each signal is stored with its source and date.

  2. Match

    The orchestrator matches every signal to a company, creates the company if it's new and drops duplicates. A name quality gate stops headline fragments from becoming companies, which was the biggest source of junk early on.

  3. Score

    Scoring is plain JavaScript, not a model, so the same evidence always scores the same way. Companies land in four tiers from Tier 1 to Discard, and the tier drives everything downstream.

  4. Describe

    Claude writes the description, the fit against the client's offerings and a short problem statement for each company in the top tiers.

  5. Enrich

    A resolver finds the company domain, then Apollo adds decision makers for 75 companies a night, highest tier first. Domain coverage for the top tiers went from 75% to 97%.

  6. Verify

    Every new contact goes through NeverBounce for the email and Twilio for the phone line type, plus checks against LinkedIn, the company site, GitHub and the domain's mail records. 350 contacts a night.

  7. Re-research

    Companies that scored well but went quiet get re-searched every Monday, biggest first, because the small ones return nothing but generic headlines.

  8. Draft

    For companies that clear the bar, Claude drafts an outreach sequence and a QA gate checks every claim in it before a person sees it.

What came out of it

The client's team opens the CRM in the morning and the night's work is there: new companies, tiers, people with checked emails and a reason to call. About 3,300 companies are tracked, 900 or so sit in the top two tiers, and 2,800 plus emails have been validated. A cleanup in August took 64 workflows down to 28 without losing a function.

Notes

The expensive lesson: Supabase's REST layer silently caps a response at 1,000 rows. One background worker read its done list unpaged, the list crossed 1,000, and it regenerated the same work every two minutes for five weeks. That was about half of one month's API bill. Every worker that calls a paid API now pages its reads, caps its attempts per day and logs its usage.

The other lesson is that signal discovery is not the same as per company research. A company nobody writes about never improves its score on its own, which is why the weekly re-research loop exists.

Stack

Want something like this built?

Tell me what you're trying to automate. Most things can be built in a week or two.