Outreach Agent
Finds local businesses, drafts a pitch and sends only what passes its checks.
Won’tNever sends without two confirmations and a daily cap.
- Role
- Personal project
- When
- Jan – Sep 2026
- Built with
- PythonSQLiteOpenAIOpenStreetMapGmail
- Links
- DiscoverLocal businesses from OpenStreetMap
- EnrichFind contact emails and record the source
- StoreSQLite with deduplication and do-not-contact suppression
- Score and gateOnly contacts with ≥ 70% confidence from approved sources
- PreviewDry run by default, nothing is sent
- SendNeeds --send and --confirm-send, under a daily cap
- LearnCampaign analytics, follow-ups, CSV export
From the project README. Highlighted steps are the two safety gates.
Why it exists
Cold outreach tools blast unverified emails at scale. This agent is built to be deliberate instead: it shows its work, previews by default, and needs an explicit confirmation to send anything.
What it does
- Finds local businesses on OpenStreetMap and enriches them with contact emails.
- Stores leads in SQLite with deduplication, do-not-contact suppression and retry handling.
- Scores leads, drafts short pitches with an LLM and previews the campaign.
- Tracks outcomes and follow-ups in a dashboard, with CSV export.
What it won’t do
- It never sends on a dry run. Live delivery needs two flags, --send and --confirm-send, plus a daily cap.
- Only contacts with at least 70% confidence from an approved source (website, OSM, Hunter, Clearbit or manual) are eligible.
- Pattern-guessed addresses are excluded until a person verifies them.
How it works
A Python pipeline with a SQLite lead store. Each stage writes to the database, so every campaign leaves an audit trail.
By the numbers
70%Confidence floor
5Approved email sources
2Flags needed to send
Next build notesTokenCap
Maps every file and import in a repo, locally, then packs only what an AI coding task needs.
