Cold email that was actually written for them.
Bob finds the prospects, reads each one's website, and writes that person's email from what it read — on our own hardware, in your campaign's language. You approve the first touch. Nothing generic ever goes out, because there is no generic version to send.
200 personalised outreach emails a month on Plus — €9/mo.
The whole loop is agentic: your own agent can pull the prospects, enrol them and work the review queue with an API key.
Everyone else sends one email to a thousand people
A merge field with someone's first name in it is not personalisation, and the people you are writing to worked that out years ago. IndieBob writes a different email for every prospect, from what is actually on their website — and refuses to send anything else.
Find → read → write → hold → review → keep
Six steps, and you only have to be present for one of them.
- Find
Describe who you want. Bob goes and finds them.
Say it in plain language — "restaurants and cafes without a digital menu", plus a location. Bob writes the search queries, sweeps Google Local, Yelp and Google Search, deduplicates by domain, and opens each business's own site looking for a contact address. No public email on the site means the business is skipped — an address is never guessed.
- Read
It reads their website before it writes a word.
The homepage plus up to four of their own pages that look like about, services, team or pricing. That text becomes a short facts sheet about the business — what they do, where it plausibly hurts, and the one thing a customer would notice. After 30 days it counts as stale, and the next enrichment re-reads the site and replaces it.
- Write
Each touch is written for that one business.
Your step is the skeleton: the claims, the call to action, the link and the sign-off stay yours. For each prospect the model writes three things from the facts sheet — the subject, an opening about their business, and one bridge sentence into your claim. In the campaign's language, natively, not translated.
- Hold
If it is not personalised, it does not go.
The sender only sends an approved, personalised message. If the site has not been read yet, if the rig is busy, if your monthly allowance is spent — the touch waits, and says on its own row exactly what it is waiting for. There is no generic template underneath waiting to be sent instead.
- Review
You approve the first email to every prospect.
The sequence opens on the queue of first touches waiting for you. Read it, edit the subject, opening or bridge, preview the whole email as it will render — then Approve, Approve all, or send it back to Bob to rewrite. Follow-ups approve themselves once you have seen how the first one reads.
- Keep
You can read exactly what went out to whom.
Every touch to every prospect is a row: before it is sent, and after. The rendered subject and HTML are written down before it reaches the SMTP server and the message id after, so editing a template later cannot rewrite history. Opens and clicks land on the same row.
Read it before anyone else does
The sequence opens on the emails waiting for approval. Edit the subject, the opening or the bridge, preview the whole thing, then approve one or approve all. Follow-ups approve themselves.

Every email you have ever sent, exactly as it was sent
- One row per touch per prospect — pending, waiting for your review, approved, sent, skipped or failed, each with its reason.
- The rendered subject, HTML and text are stored before the message reaches the SMTP server; the message id after.
- Editing a template later cannot rewrite what already went out.
- Opens and clicks land on the same row. A prospect’s own page shows their whole history in order.

Open anyone and see what they got, in order
- The facts sheet Bob wrote from their website — what they do, where it hurts, the hook it used.
- Every email that went to them, with the HTML as sent.
- Opens, clicks, bounces, unsubscribes — on the person, not in an aggregate.
- Pause the sequence at any time; an unsubscribe stops that person everywhere, in every sequence.

What IndieBob outreach will not do
If you came here for volume, this is the wrong tool. That is the point.
No mass blasts
There is no "send to everyone" button. One email is written per prospect per step, and enrolling more prospects than your allowance covers is refused up front rather than half-sent.
No generic fallback
When the model cannot write an email that passes the checks, the message waits and then fails visibly. It never quietly falls back to the raw template — that is exactly the email this feature exists to stop.
Local models only
Reading a prospect's website and writing their email both run on our own solar-powered, battery-backed AI farm with the cloud fallback switched off. Your prospects' website text never reaches a third-party API.
We do not read your inbox
Opens, clicks, bounces and unsubscribes are tracked. Replies are not — reply detection is not built yet, so pause the sequence when a conversation starts.
The unglamorous half, already done
- One link per email — the one you chose. The validator rejects any other URL, leftover placeholder, invented number, or English copy in a non-English campaign.
- Warm-up ramps a new sending domain: 5/day for three days, then 10, then 25, then your limit.
- A send window and a daily cap per sequence; the sender wakes every 15 minutes and respects both.
- CAN-SPAM footer and one-click List-Unsubscribe on every email. An unsubscribe is global and permanent across every project.
- Hard bounces stop that prospect. Above 5% bounces or 0.1% complaints in 24 hours the sequence pauses itself.
- One-click IndieBob Mail — a sending domain with DKIM and SPF already published — or bring your own SMTP.
200 personalised emails a month, €9
One personalised email is one outreach email against your monthly allowance. Outreach is not part of the free plan — everything else on IndieBob is. Plus is €9/mo, or €49 for six months.
Enrolling more prospects than your allowance covers is refused before the first email is written — never halfway through a campaign.