This is the lead-generation notebook for the design-partner campaign (July goal #1, ar006: 200 qualified leads). It defines who we target, the channels we source them from, and the pipeline that turns a raw company name into a verified, send-ready contact. The mechanics are automated by the prospecting CLI (src/clis/prospect_cli), which finds and verifies contacts via Hunter and records them to src/artifacts/leads.jsonl. A lead only becomes a Qualified Lead when its email is verified deliverable and the contact is an ICP-role fit, anything else is held for review or rejected, so we never bounce on the warmed domain. The live results are at the bottom; run … stats for the current count.
The decisive filter is who owns the agent’s quality, and the practical filter is who Hunter can reach:
/customer-stories + /pathways, Cognigy, Kore.ai, Yellow.ai. Companies proud they built a support agent; the hook writes itself. Catch: front pages skew enterprise; Botpress 403s automated fetch (manual pass). G2 / Capterra reviews are the back door, reviewers name their employer.Each candidate runs through the same steps, recorded one row per contact to leads.jsonl (company · domain · person · role · email · hook · source · status):
add, stage a candidate found via the channels above (company, domain, source, and the hook, the specific reason we’re reaching out). Lands as manual. Dedups against the active list and the reject store.enrich, Hunter domain-search lists contacts; we rank them by ICP role (support / CX / success / conversational-AI / applied-AI / founder / CTO), then email-verifier checks the best one.ready (a Qualified Lead). Deliverable but off-ICP → verify (human review, never the send list). Undeliverable or no contact found → moved out to rejected.jsonl.add refuses a previously-rejected company unless --force.Status model: manual → verify → ready (QL); rejects exit to rejected.jsonl. Quality over volume, a vetted contact with a real hook beats a 1,000-row blast.
uv run python src/clis/prospect_cli/cli.py add --company X --domain x.com \
--source builder_case_study --connection "uses Voiceflow, hiring an AI eng"
uv run python src/clis/prospect_cli/cli.py enrich --all --yes
uv run python src/clis/prospect_cli/cli.py statsThe operational list, the CLI run end to end with verified emails, recorded to src/artifacts/leads.jsonl. Each row carries its source, a connection link (the blog post, case study, or job ad we open the email with), outreach stage (0 not sent → 3 final follow-up), and last contact. It renders only in local development (leads.jsonl is gitignored, contact data is never published; production shows a placeholder).
The live qualified-leads table renders only in the operational app (contact data, never published).