14AI marketing
Growth Engine
AI lead discovery, audit and compliant outreach
Outbound where the compliance gate is code, not a paragraph in a prompt.
- Status
- Built, pre-launch
- Period
- 2026
- Relationship
- In-house venture
- Site
- Private
- Available as
- Retainer
- Build for you
The pipeline
- 01 DiscoverPlaces sweeps chosen niches on a weekly rotation
- 02 IntakeWebhook validates, deduplicates, assigns lead IDs
- 03 AuditHomepage fetched and scored on six dimensions
- 04 DraftModel writes; banned phrases checked afterwards
- 05 ApproveA human taps approve before anything sends
- 06 SendWorker sends, sweeper retries, stage board tracks
- 6dimensions scored per audit
- 13workflows in the acquisition estate
- 5service lines routed deterministically
- 0email addresses ever guessed
The problem
Outbound has two failure modes and neither is copywriting. Buying a list is how a Canadian business meets CASL from the wrong side, and letting a model write freely is how it invents a promise somebody then has to honour.
What we built
- 01
Swept Ontario niches through Google Places on a weekly rotation — open businesses with a website only — into an intake webhook that validates, deduplicates and assigns a lead ID before anything downstream sees it.
- 02
Scored each site on six dimensions — first impression, mobile, search, call to action, trust and booking flow — returning three issues, three recommendations and one hook from a homepage fetch that is capped and stripped before the model reads it.
- 03
Kept qualification deterministic and replayable: a nought-to-hundred score from rating, review volume and business type, routed to one of five service lines with its own deal band. No model, no network, same answer every time.
- 04
Put compliance in code rather than in a prompt. An address has to be published on the prospect's own site with the source URL kept as evidence; guessed and suppressed addresses fail closed; the unsubscribe footer and mailing address are appended deterministically; a banned-phrase check runs after the model, not instead of it.
- 05
Left a person on the send button — every draft waits for an approval tap in chat or the admin queue before the mail worker touches it.
- 06
Fed the same funnel from a self-serve audit form, a retrieval-backed chat widget and an email list on infrastructure we own, with the Next.js app as the source of truth and the workflow engine demoted to a stateless task runner called by webhook.
Stack
- Next.js
- TypeScript
- n8n
- Supabase
- PostgreSQL
- pgvector
- Google Places API
- OpenRouter
- Chatwoot
- Listmonk
- Railway
Ideal for
Service businesses selling into a defined local market who want a real pipeline without buying a list or breaking CASL.