Automations showcase · GTM engineering

You design the outbound plan.
I already run the machine.

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

01 · The flagship

The outbound pipeline, in your 7 steps

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.

1Target list matching ICP
2Enrich accounts + contacts
3Enroll, AI drafts, rules check
4Send on schedule, safe limits
5Log every touch in CRM
6Route replies, stop sequence
7Weekly report
Running

1 · Build the target list

How I do 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.
  • Known contacts are removed against local archives and Attio before anything else happens.
  • A second route pulls lists from Apollo: apollo_attio.py ophalen → voorstel → schrijf.
  • Night run nachtleads.sh works in batches of 15.

For Hebno

  • ICP profile file per segment: research & insight consultancies first, then strategy, creative and advisory.
  • Fit classes the AI judge picks from: fits · solo · agency-not-consultancy · supplier · other, each with a confidence.
  • Output: leads.jsonl + leads.csv per round, with the source URL for every field.
Running

2 · Enrich accounts and contacts

How I do it

  • verrijk.py: Claude extracts who decides now and which sentence on their site is a reason to talk, with the literal quote as evidence.
  • Names and quotes are re-checked by code against the source. Guessed email addresses are labelled uncertain, never presented as verified.
  • verrijking_attio.py writes company + person + research note into Attio. Dry by default, --echt writes.

Fields I'd enrich for you

  • practice_areas, client_work_type (research, strategy, creative…)
  • ai_stance: how they talk about AI today, with quote + URL
  • decision_maker, role, email_source, hook_quote, confidence
Running

3 · Enroll in the right sequence, AI drafts, rules check

How I do it

  • Claude writes a short mail from the recipient's problem with one simple question, using only facts from the enrichment. No invented personalisation.
  • intentie.py picks the angle; the sending step refuses a record without mail_bron (where the address was found).
  • Rule gate: a mail under the minimum word count or without subject is rejected as empty letter; a source that 404s is rejected as dead source.

For Hebno

  • The founders write the sequences and copy; I encode them as templates + rules (banned claims, length, tone, one CTA).
  • A blind checker model reviews each draft against the rules before it can be enrolled.
Running LinkedIn: blueprint

4 · Send email and LinkedIn touches within safe limits

Email, how I do it

  • cold_verzend.py: dry-run by default, --send sends. Separate outbound domain, so the main domain is never at risk.
  • Hard caps: max 3 senders, max 25 per sender, 75 per day. Warm-up ladder in opwarmstand.py can go lower, never higher.
  • Send window: Tue–Thu, 08:30–10:30 local time.
  • One follow-up after 7 days, in the same thread, from the same sender.
  • Suppression list (addresses + domains); if it's missing, sending stops.

LinkedIn

  • For my own accounts I deliberately never automate LinkedIn actions or scrape it; the system drafts touches and a human sends them.
  • For you I'd wire a LinkedIn tool you approve (e.g. via Clay or a sequencer) with daily caps per seat, and the same stop rules as email.
Running

5 · Log every touch, reply and status change in the CRM

How I do it

  • Every send and every skip goes to 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.
  • Dedup on domain, so no account is approached twice.
  • HubSpot: I've also logged audit leads from poldermarketing.nl into HubSpot as contacts + companies.

CRM events I'd log for you

{"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.
Running

6 · Route replies fast, stop the sequence on answer

How I do it

  • Before every follow-up the inbox is checked: a reply, unsubscribe or bounce stops the sequence, also after mail 1.
  • coldmail_log.py blocks any follow-up to someone who replied.

For Hebno Blueprint

  • A small agent classifies replies: interested · not now · wrong person · unsubscribe · out of office.
  • Interested → instant Slack ping to the right founder with the thread + account brief. Wrong person → referral captured as new contact.
Running Report format: example

7 · Report weekly on what was sent, what got replies, what broke

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
02

The multi-channel publisher

Running daily since early October 2026 plaatser.py posts exactly the version I approved, and nothing else.

Content calendar→approved version (sha256)→dry-run list→08:07 / 18:07 run→X · LinkedIn · Facebook · Bluesky · Mastodon · Telegram · Threads · Pinterest→link back to calendar + log.jsonl
03

The social flow: research → write → AI editor → publish

viraal.py research what works→social.py drafts→jev.py AI editor rejects weak drafts→x.py / linkedin.py channel rules + voice→human approves→publisher

The 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.

04

The call chain

bellijst who to call→belbriefing 1-page brief per account→belblad live notes→gebeld outcome→CRM

Same data, other channel. For Hebno that's the founder's call prep: when a reply is routed, the account brief is already written.

05

Reporting and the learning loop

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.

06

GEO / AEO: being the answer in AI search

Built No live results claimed yet.

buyer questions→geciteerd.py asks the AI engines, stores answers + sources→compare cited pages→write the densest page on the topic→publish via PR→re-measure
07

Your tool list, honestly

You namedWhat I've actually done
Claude, Claude Code, routinesDaily 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 frameworksYes: multi-agent setup with a foreman, blind checker and small judges; API calls from Python and serverless JS.
HubSpotLogged leads as contacts + companies. My main CRM is Attio, wired via API (lists, stages, idempotent setup).
ApolloApollo → Attio import route with a proposal + check step.
Clay, n8n, Make, ZapierNot 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 interestI run my own outbound for Bombos and Poldermarketing. I know what a founder needs when a reply lands.

Here's how I'd land you clients

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.

pietbaudoin9@gmail.com · Full portfolio