Target lists, enrichment, AI-drafted sequences checked by rules, safe sending, CRM logging, reply stops and reporting. I built it for my own company Bombos with Claude Code, and it runs every week. Here it is, step by step, mapped onto the exact flow you described.
Running in production for Bombos Blueprint what I'd build for you, honestly labelled
Every step is a small script or agent with an output contract. Code checks the contract first, a small AI judge second, a human last where the name of the company is on the line. If it's repetitive, a robot does it.
leads.py takes niche, city and count, shows the search cost in a dry-run first, then searches.vinder.py / scanner.py read company sites and public search hits.apollo_attio.py ophalen → voorstel → schrijf.nachtleads.sh works in batches of 15.fits · solo · agency-not-consultancy · supplier · other, each with a confidence.leads.jsonl + leads.csv per round, with the source URL for every field.verrijk.py: Claude extracts who decides now and which sentence on their site is a reason to talk, with the literal quote as evidence.uncertain, never presented as verified.verrijking_attio.py writes company + person + research note into Attio. Dry by default, --echt writes.practice_areas, client_work_type (research, strategy, creative…)ai_stance: how they talk about AI today, with quote + URLdecision_maker, role, email_source, hook_quote, confidenceintentie.py picks the angle; the sending step refuses a record without mail_bron (where the address was found).empty letter; a source that 404s is rejected as dead source.cold_verzend.py: dry-run by default, --send sends. Separate outbound domain, so the main domain is never at risk.opwarmstand.py can go lower, never higher.events/cold-YYYY-MM-DD.jsonl with sender and reason.attio_cold_email.py sets up the cold_email list in Attio once (stages + fields, idempotent); after each accepted mail the company's entry is written.{"event":"touch_sent","channel":"email","seq":"insight-v1","step":1,
"account":"example-consultancy.com","sender":"founder@…","ts":"…"}
{"event":"reply","sentiment":"positive","routed_to":"founder","seq_stopped":true}
{"event":"status","from":"in_sequence","to":"meeting_booked"}
Example shape, not real data.coldmail_log.py blocks any follow-up to someone who replied.interested · not now · wrong person · unsubscribe · out of office.My reporting loop (rapport.py, marketingronde, cockpit, leerlus) turns the event logs into a weekly review and feeds corrections back into the prompts. For you, the report would look like this:
WEEK 44 · OUTBOUND REPORT (EXAMPLE MOCK, NOT REAL DATA) Sent email: — linkedin: — per sequence / per sender Replies positive · neutral · negative · unsubscribed Meetings booked from outbound Broke 2 bounced domains → suppressed · 1 sync error Attio → retried Learned opener B beats A on research consultancies → proposal for founders
Running daily since early October 2026 plaatser.py posts exactly the version I approved, and nothing else.
onzeker → bevestig / vrijgeven for a human check.bellijst who to call→belbriefing 1-page brief per account→belblad live notes→gebeld outcome→CRMSame data, other channel. For Hebno that's the founder's call prep: when a reply is routed, the account brief is already written.
Weekly review across all flows: what ran, what broke, what I corrected. Every correction of mine is written back into the flow's rules, so the next round starts smarter. Honest status per flow lives in one file (running / half / not built), and I keep it that way.
Built No live results claimed yet.
geciteerd.py asks the AI engines, stores answers + sources→compare cited pages→write the densest page on the topic→publish via PR→re-measurevermeldingen.py tracks mentions, openseo.py the technical side.| You named | What I've actually done |
|---|---|
| Claude, Claude Code, routines | Daily driver. The whole Marketing OS is built and run in Claude Code: skills, hooks, subagents, scheduled routines. I also run a team of AI agents (Grok Bot) on fixed daily patrols. |
| LLM APIs / agent frameworks | Yes: multi-agent setup with a foreman, blind checker and small judges; API calls from Python and serverless JS. |
| HubSpot | Logged leads as contacts + companies. My main CRM is Attio, wired via API (lists, stages, idempotent setup). |
| Apollo | Apollo → Attio import route with a proposal + check step. |
| Clay, n8n, Make, Zapier | Not used in production; I wrote the equivalent in code. With AI I'm productive in any of them within days, and I'll gladly build your first flow in whichever you use. |
| Sales / B2B interest | I run my own outbound for Bombos and Poldermarketing. I know what a founder needs when a reply lands. |
Week 1: your tools, your ICP, first automation shipped. Month 1–2: email sending + CRM logging end to end, safe limits included. After that: enrichment and reply agents, and a weekly report you actually read. You talk to the leads; I keep the machine full.
The social flow: research → write → AI editor → publish
viraal.pyresearch what works→social.pydrafts→jev.pyAI editor rejects weak drafts→x.py/linkedin.pychannel rules + voice→human approves→publisherThe editor is the trick: a separate small judge with minimal context and a fixed short answer, so quality is enforced by the system, not by my mood. That's exactly the "personalisation drafted by AI and checked by rules" pattern from step 3.