From a map search to a sent proposal
Each step lets fewer through. The engine is built to be picky: a proposal only exists when there is evidence to write it from.
How the writing is checked
Every draft is checked against about 20 rules before a person sees it: no clichés, no “may” or “could”, no number that isn’t in the evidence, no invented case studies.
Before the first email
A good proposal in a spam folder is worth nothing. So the sending mailboxes warm up first, on fresh domains, with a few real conversations a day.
Who it is looking at
The businesses still worth contacting, by industry. Counts only: no business is ever named here.
In the last 24 hours
What the engine did on its own, on a schedule.
How it works
- 1
Find
Google Maps searches for the industries we serve: hotels, clinics, law firms, agencies, schools.
- 2
Read the website
Facts, not opinions: missing schema markup, no contact form, no online booking, how long the page takes to load.
- 3
Find the right person
Names come from the business’s own team pages. When it isn’t sure, it uses no name at all.
- 4
Score
Pain, ability to pay, reachability, timing and long-term fit decide who is worth a proposal.
- 5
Write and check
Claude drafts from the evidence. Code checks every rule; a draft that fails twice is replaced by a plain, factual template.
- 6
A person approves
Nothing is sent automatically. Every proposal is read and approved first.
- 7
Send and listen
A few emails a day per mailbox, replies read and sorted, and every deal tracked through to renewal.
Under the hood: Python services and PostgreSQL, n8n for the scheduled workflows, Claude for writing, a Next.js dashboard for the team, all on one cloud server with more than 1,200 automated tests.