← SELECTED WORK

04 / 04 · PRODUCTION AUTOMATION

N8N HIGHLIGHTS

Two shipped n8n systems behind my agency: a research pipeline that turns raw search results into typed, evidence-bound lead records, and a proposal pipeline that turns a brief into a client-ready deck.

RESEARCH PIPELINE

  1. SEARCHApify · Google results553 results
  2. SCRAPEFirecrawl · page content30 per run
  3. ANALYSEGPT · typed schema47 fields
  4. SCOREIntent and fit0 to 100
  5. WRITEAppend to sheet1 row per lead
FIVE STAGES · SEARCH TO TYPED RECORD
STATUS
Running in production
ROLE
Sole author · flows, schema, prompts, scoring
OWNERSHIP
Solo
CONTEXT
Client research for my own agency
TIMELINE
2026
PLATFORM
n8n · Apify · Firecrawl · GPT

01 · AT A GLANCE

  1. 01

    Replaced manual prospect research with a five-stage pipeline that harvests 553 search results and returns a typed record for each qualified business.

  2. 02

    The model may not invent: every one of the 47 fields is either supported by scraped evidence or returned empty, and each record carries its own evidence list and confidence score.

  3. 03

    An entity gate rejects directories, articles, forums and job posts before enrichment, so model spend goes only to plausible buyers.

STATUS
Running for my own agency
ROLE
Sole author · flows, schema, prompt design, scoring

02 · THE PROBLEM

Finding clients for an automation agency means reading a lot of websites and deciding, one at a time, whether a business is a real prospect and what it might actually need. Done by hand it is slow, and the notes end up as prose that cannot be sorted, filtered or scored.

Handing the whole job to a language model is worse. Asked to research a company, a model will happily produce a confident contact name and email that do not exist. In outreach that is not a cosmetic error: it is the difference between a personalised message and an embarrassing one sent to a stranger.

03 · THE FLOWS

Two flows run the front of my agency. The first finds and qualifies prospects. The second turns a qualified one into a proposal. Both are shown below exactly as they run in the editor.

FLOW 01 · RESEARCH

APIFY · FIRECRAWL · GPT · SHEETS

A search actor harvests results, an entity gate throws away everything that is not a company, the survivors are scraped for their real page content, and a model reads that evidence into a fixed 47-field schema. One qualified business becomes one sortable row.

WHAT IT WRITES

47 FIELDS PER ROW

The gate is the part that pays for itself. A directory listing or a competing agency costs a single classification. A real business earns the full record: forty-seven fields running past the columns visible here, into pain points, automation opportunities, a lead score and the evidence behind it.

FLOW 02 · PROPOSAL

FORM · GPT · DRIVE · SLIDES · GMAIL

A short brief goes into a form, a model drafts the proposal copy against it, and that copy is written into a Google Slides deck built from my own template. It arrives in my drafts, not in the client's inbox: the send stays a decision I make.

04 · KEY DECISIONS

  1. 01

    A schema, not a paragraph

    The model answers into a 47-field JSON schema with typed enums and no additional properties allowed, so the output lands in a spreadsheet column rather than needing to be read and re-keyed.

  2. 02

    Empty beats plausible

    The prompt forbids guessing emails, names, technologies or company size. An unestablished field returns empty, because a wrong contact costs more than a missing one.

  3. 03

    Classify before you enrich

    Each result is typed as business, directory, article, forum or vendor first. Non-prospects are dropped before the scrape and the model call, which is where the cost sits.

05 · VERIFICATION AND OUTCOME

The engine runs against live search results for my own agency. What follows is the shape of a single run, and the checks that make its output trustworthy enough to act on.

RESULTS HARVESTED
553 organic results across the search pages of one query set
DEEPLY ENRICHED
30 per run, capped deliberately so cost stays predictable
FIELDS PER RECORD
47, every one typed, with enums on entity type and intent
UNSUPPORTED FIELDS
Returned empty rather than guessed, by explicit instruction
SELF-REPORTED
Each record carries its own evidence list and a confidence score
HUMAN STEP
I read the sheet and choose who to contact. Nothing sends itself.

The honest limit of this verification: correctness of extraction is checked by reading records against their source pages, not by an automated test suite.

CONSTRAINTS, EVALUATION & LIMITS

  • Enrichment is capped at 30 results per run, so a wide search is sampled rather than exhausted.
  • Quality depends on what a company publishes. A thin website yields a thin record, correctly but unhelpfully.
  • Scoring is calibrated by my own judgement against my agency's offer, not validated against closed-won outcomes yet.
  • The run is triggered by hand. There is no schedule, deduplication against previous runs, or CRM write-back.