Work · AI outbound

LocalOutbound — AI-assisted B2B outbound for local businesses

Built for the IT services brand: agents research and draft; humans sell and send. Principle: You sell; the agent researches and drafts. The agent never sends.

My role Designer/builder of the full local pipeline—agent specs, CSV schema, dashboard rebuild scripts, SMTP packs, and deliverability rules.

Stack Python · CSV as SoT · research/draft agent specs · Google Maps + public B2B data · SMTP mail packs · local dashboard scripts

Context
Outbound for local B2B IT services needed structure without becoming a blast campaign. Research, contacts, drafts, and follow-ups had to stay auditable on a machine the operator controls. Scale is deliberate: enough daily sends to compound, not enough to look like spam. Constraint: secrets (SMTP, API keys) never leave the local environment; the agent must not own the send button.
Intervention

Designed a human-in-the-loop outbound system with a single CSV as the source of truth and separate research vs draft agent roles.

Phase 1 — Data model & Today view

Defined CSV columns for status, contacts, drafts, and follow-ups. Wrote Python scripts that rebuild a local Today dashboard from the CSV (follow-ups due → today’s sends → top calls → waiting) so the queue is always file-backed, not trapped in a SaaS CRM.

Phase 2 — Research & draft agents

Separated research-agent and draft-agent specs. Research pulls Google Maps and public B2B data only; waves are logged as run logs. Draft agent writes personalized outreach into the CSV. Status snapshot scripts capture pipeline state for debugging.

Phase 3 — SMTP packs & pace

Built SMTP mail packs with deliverability rules (no blasting). Hard rule: human approves every send. Deliberate pace of 5–10 sends per working day. Secrets stay local—never shipped in a client surface.

Risks & how they were handled
  • Accidental mass send → agent never sends; human owns SMTP pack execution.
  • Stale or wrong research → public-data-only scope + human review before send.
  • Secret leakage → local-only credentials; no cloud CRM dependency for the pipeline.
What I'd do differently
  • Add a stronger “draft quality” eval set earlier (tone, localization, CTA clarity).
  • Version the CSV schema more formally once the Today view stabilized.
Outcome
Before: ad-hoc research and drafting—roughly ~20–35 min per lead to skim Maps/public B2B data and write a first outreach draft by hand. After: one CSV is the single source of truth; separate research and draft agents fill it; a local Today view is rebuilt from that CSV; the human approves every send (the agent never sends), typically ~5–10 min of review/edit per send (est.); pace is deliberately capped at 5–10 sends per working day (~1–2 h of human review vs. ~2–6 h of manual research+drafting at that same pace, est.); secrets stay on the local machine.

System map

Public local business data

Maps / B2B

Research agent

public data only

Draft agent

separate role

Outbound

CSV source of truth

statuses + drafts

Human send

SMTP pack

What it does

Fills a CSV tracker with drafts

Never sends without a person

Packages SMTP-ready mail packs

Agents research and draft; a human still hits send.

What shipped

  • CSV lead tracker Statuses, contacts, drafts, and follow-ups as the source of truth.
  • Split agent roles Separate research and draft specs — public-data-only research.
  • Human-in-the-loop send SMTP packs with deliverability rules; the agent never sends alone.

Stack Python CSV Maps / B2B SMTP HITL

← Wrike MCP Next: FinOps reconciliation →