Competitor Displacement
Finds companies running competitor tools. Scores them. Writes displacement outreach specific to the product they're using.
The Problem
Displacement outbound should be the easiest sell — the prospect is already paying a competitor for the same thing. But real displacement requires four things at once: knowing who runs the competitor tool, scoring whether they're worth pursuing, finding the right person, and writing outreach that addresses pain points specific to THAT competitor. I watched teams attempt it by manually Googling tech stacks and writing "why we're better" emails that said nothing about the prospect's actual situation. This system handles all four. Two companies running different competitors get completely different outreach.
Stack
How It Works
The execution path
Fires two parallel async Pronto searches — account search by ICP keywords and lookalike search against your best customer. Both call back via webhooks, save to Airtable, then a tech stack enrichment loop detects competitor technologies. A weighted scoring model gates everything downstream.
- ·Read ICP config from Airtable (keywords, industries, company sizes, competitor tech list)
- ·Fire async: account search + lookalike search in parallel
- ·Receive callbacks → tag source → save raw accounts to Airtable
- ·Enrich each account via Pronto company_stack (batched, rate-limited)
- ·Score: tech match (50) + lookalike (20) + ICP fit (30) — threshold ≥ 60
- ·Qualifying accounts trigger async lead search → callback to WF2
Receives leads from Pronto callback. Enriches each contact for verified email, then merges with config context and feeds everything to a Claude AI Agent. The agent applies a competitor pain library, persona routing rules, and give-first strategy to generate a 4-touch LinkedIn DM sequence per lead.
- ·Receive leads callback from Pronto (body.leads format)
- ·Enrich each contact via Pronto single_enrich (email verification)
- ·Merge enriched leads with config context via Code node (not Merge — broken on n8n 2.12.3)
- ·Claude AI Agent generates: Signal Tier, Angle, Touch 1–4 per lead
- ·Save displacement leads to Airtable with full outreach sequences
- ·Update source account status → "activated"
Both paths converge here. Polls Airtable for leads marked Outreach Ready, formats them for the sequencer API, enrolls them, and updates status to "enrolled." One sequencer, two input paths.
- ·Read leads where Outreach Ready = true AND status ≠ "enrolled"
- ·Format payload for sequencer API (lead + 4-touch sequence)
- ·POST to sequencer enrollment endpoint
- ·Update Airtable: status → "enrolled", Outreach Ready → false
Key Design Decisions
By The Numbers