Free for Readers

The Contact Form Outreach System

Two free, open-source tools that implement the framework from Code to Client— the Autofiller that handles the tedious part, and the Tracker that measures every stage of your pipeline. Local-first. No subscription. No signup. No upsell.

How They Work Together

Find URLs
Manual research
Autofiller
Pre-fill & review
Submit
You click Send
Tracker
Measure pipeline

Both tools share a single SQLite database (contacts.db). Contacts submitted by the autofiller appear instantly in the tracker—no sync needed.

Tool 1

Contact Form Autofiller

A Python + Playwright script that navigates to contact form URLs, pre-fills your name, email, company, and outreach message, then pauses and waits for you to review and click Submit yourself. You stay in control of every submission.

Reads a JSON list of contact form URLs—one per outreach batch
Detects the contact form on the page and fills name, email, company, message
Pauses after filling so you can review, edit, and submit manually
Saves submitted contacts to the shared contacts.db SQLite database
Skips URLs already in the database—no duplicate submissions
Optional LLM integration (Together.ai, OpenAI, Ollama) for complex form detection
Heuristic CSS selector fallback always works without any LLM configuration
terminal
$ poetry run python -m autofiller.main \
params/legal-portland.json
Processing 25 URLs...
→ https://firm-abc.com/contact
Form detected. Filling fields...
✓ name, email, company, message filled.
The contact form has been pre-filled.
In the browser:
1) Review and edit the message.
2) Click Submit yourself.
After submitting:
1) Save 2) Next 3) Quit
Choice (1/2/3 or s/n/q): _
Tool 2

Contact Form Outreach Tracker

A local Nuxt 4 frontend + FastAPI backend app for tracking every contact through the eight pipeline statuses defined in Chapter 6 of the book. Dashboard metrics tell you exactly where you are and when to pivot.

Dashboard with 9 key metrics from Chapter 6 (count + % of contacts sent each)
Contact list filterable by status, vertical, city, and postal code
Status history timeline on every contact detail page
Verticals management with per-vertical dashboard views
Dark mode + runtime color theme pickers persisted to localStorage
Shared SQLite DB with the autofiller—contacts appear automatically
8 Pipeline Statuses
CONTACTEDForm sent, no reply
DESIGN_PARTNER_PROSPECTReplied with interest
WAITLISTEDWants to hear later
OTHER_PROSPECTReplied with question
DISCOVERY_CALLCall held/scheduled
DESIGN_PARTNERConfirmed collaborator
CUSTOMERPaying client
NOT_INTERESTEDDeclined post-call

Matches Chapter 6 of Code to Client exactly.

Quick Setup

Autofiller
# Install
poetry install
poetry run playwright install chromium
# Create shared DB
python3 ../tracker-server/create_db.py
# Run a batch
poetry run python -m autofiller.main \
params/my-vertical.json
Tracker
# Backend
cd tracker-server
poetry install
poetry run python -m tracker_server.main
# Frontend
cd tracker-client
npm install && npm run dev
# Open http://localhost:3000