01 / the problem
Cold outreach that cost too much per lead and broke too quietly.
A professional-services business needed a way to identify and reach potential partner firms at scale. The manual version was slow: find firms, research their websites, decide what kind of outreach might land, write an opener, and push the contact into the CRM.
An earlier version used an AI model to audit each firm's website and generate an opener. It worked, but at $4 per lead the variable cost would compound quickly. The openers also came out generic—the kind of language that reads like a template even when each one was generated fresh.
The harder problem was reliability. Data had to move through discovery, research, email verification, CRM upsert, and outreach sequencing across five workflows and an external CRM. Every handoff could silently go wrong.
02 / what I built
A five-workflow pipeline that discovers, researches, and activates leads.
I designed the pipeline as independent workflows with a shared data layer. Schedules are staggered to avoid rate limits, and each workflow has its own error handler.
01DiscoverFind firms from public sources and deduplicate them.
02ResearchScore observable website gaps and write a specific opener.
03ActivatePush approved leads to the CRM and sequence outreach.
The research workflow reads public pages, counts form fields, checks booking links, classifies the outreach channel, and writes from evidence. No AI model is needed for that stage. Two additional workflows handle alerting and staleness monitoring. The only manual step is approving which leads receive outreach—a deliberate gate.
03 / what was difficult
The failures that only showed up once real data was flowing.
The interesting problems were in the seams between systems: one workflow's output becoming another's input, and subtle data loss or coupling hiding in between.
Root cause analysis · data destructionAn API call that silently destroyed every field it touched.
The email-verification request replaced the entire data item with the API response body, wiping out the firm name, website, research scores, opener, and everything else. Three downstream nodes broke from the same root cause. The fix was tracing all three failures back to that single node and anchoring references to the last node that still held the original record.
Hidden coupling · system designTwo fields that secretly depended on each other.
After resetting leads for re-research, the selector kept skipping them. A second status field, set during the original research, independently blocked re-entry. Clean tests passed; real reprocessing exposed the dependency.
Defensive design · loop preventionBlocked firms that kept retrying forever.
Sites returning 403 or 503 were marked blocked, but the next hourly run picked them up again. A retry counter capped attempts at two so unreachable sites could not consume the pipeline's capacity.
Cost elimination · architecture decisionReplacing a $4-per-lead AI step with a $0 deterministic one.
The deterministic scorer reads public pages, counts form fields, checks for booking links, and classifies the best outreach channel from evidence. Variable cost dropped to zero, while the openers became more specific because they cite what the system actually found.
04 / what changed · stated honestly
The result, with the edges named.
What is true today
- Full pipeline proven end-to-end with real data: discovery, research, CRM push, and email sequence on automated schedules.
- Research cost dropped from $4/lead to approximately $0.009/lead. The deterministic scorer replaced the AI audit with more specific output.
- CRM chain simplified: an 11-node opportunity chain became a single tag-based trigger.
- Human approval preserved: no lead receives outreach until explicitly approved.
The email sequence is running in warmup mode—five emails per day maximum—with reputation tracking before scale. Early open and reply rates will determine whether the templates need refinement. That work is in progress, not hidden behind a launch claim.
05 / what it demonstrates
Not wiring tools together. Operating the seams between them.
- Tracing three broken outputs to one upstream root cause.
- Replacing an expensive AI step with a cheaper, more specific deterministic alternative.
- Finding hidden field dependencies that only break on real reprocessed data.
- Building retry caps, rate limits, and error handlers that prevent silent failure at scale.
- Keeping a deliberate human gate on outreach decisions.