One database decides who can be contacted
Our first version kept contact history in spreadsheets and JSON logs. Spreadsheets drift: two files disagree, someone gets a second "first" email, and the sender looks careless. Now a single CRM database is the only source of truth. Before any batch, the system asks it who is eligible, and it records every send, reply and status change straight back.
Leads from public sources
Leads come from public business directories and registries, scraped by small scripts that run on their own. Each lead is tagged by market, niche and what we know about it, for example whether it already has a website. Segments that need a different message, like businesses with no website at all, are kept out of the regular batch.
One mailbox per market, small batches
- Each market has its own sending mailbox and its own language, so a French prospect never gets an English template
- Every batch runs all markets together, in small batches of about 25 messages per mailbox, which protects sender reputation
- Each message is personalised by AI from what we know about the business, then checked by a human before it goes out
- When pacing sends, the system opens a fresh mail server connection per message, because idle connections were being dropped
What we learned
Volume was never the bottleneck; targeting was. Our first client came from one specific niche, so we now work one niche at a time instead of spreading a wide list thin. And a reply only counts if it is logged, so the engine treats updating the CRM as part of sending, not a chore for later.
The takeaway
Pick one source of truth before you automate anything, keep batches small, and keep a human on the send button for cold email.
Free Consultation