← All work

No-Website Outreach Pipeline

Author2026shipped

A CLI that finds businesses without a website and drafts outreach that is legal to send.

A wrong send is a legal event, so the send stage is dry-run by default and every message must pass compliance checks before it can leave.

Facts

  • Four stages — discover, draft, send, pipeline — each runnable on its own
  • Uses a minimal X-Goog-FieldMask against the Google Places API (New) to find businesses with no websiteUri
  • Drafts personalised outreach with the Claude API (claude-haiku-4-5)
  • The send stage is DRY RUN by default and holds a suppression list
  • Enforces a CAN-SPAM footer with a postal address and an unsubscribe path, and blocks deceptive subject lines
  • Carries explicit GDPR and ePrivacy warnings that require legal sign-off before a real send
  • Tests run fully offline against mocked APIs; ruff and black clean

Stack

  • Python
  • Google Places API (New)
  • Claude API
  • SMTP

Cold outreach tooling is easy to build and easy to build irresponsibly. The constraint that shaped this one is that the default path does not send: it prints what it would have sent, and turning that off is an explicit act.

The compliance checks are not a footer template. A message that lacks a postal address or an unsubscribe route fails before the transport is reached, and a subject line that misrepresents the body is rejected rather than repaired.

← All work