The Cactus Dispatch / Issue 01
3,000 cold emails, zero replies.
Then we found 585 warm prospects
in 16 minutes.
The tension
A company sent three thousand cold emails and got zero replies. The reflex is to rewrite the pitch, hire a copywriter, test new subject lines. We did something cheaper and faster first: we built a tool to find out whether the message was broken, or the audience was.
What we did
The client sells protection against a specific kind of data exposure. Their hardest sale is to companies that don't yet know they're exposed, which means most of their cold outreach is education, not selling.
So we went after the one group that already understood: companies that had bought this protection, then let it lapse. When the protection lapses, the problem returns, and the company feels it firsthand.
We used a coding agent (Claude Code) to build a Python scraper that pulls public records, flags every company whose protection lapsed in the last six to eighteen months, and ranks them by exposure level. The agent also built a Streamlit dashboard: a simple web page the sales team could open in a browser, filter prospects, and see who was most exposed today. The first working version took about sixteen minutes.
The pattern
If your sales team is doing cold outreach to people who don't know they have a problem yet, you're selling education. That's slow and expensive. The faster path: find the people who already feel the pain. Every industry has a signal: expired contracts, lapsed coverage, compliance violations, public filings, license renewals. That signal is usually public data sitting in a database somewhere, free to scrape.
A coding agent can turn that data into a ranked prospect list in under an hour. The cost is a few dollars in compute. The shift is strategic: you stop guessing who might need you and start calling the people who already do.
How we knew it was right
The agent's first attempt was wrong. It invented field names that didn't exist in the source data and built a schema around fields it had hallucinated. This is the most common failure mode for coding agents: they sound confident, the code runs, but it's operating on a fiction.
The fix was one step: we found a single real record from the source, pasted it into the prompt, and said "use these exact field names." The agent corrected itself immediately. Every field after that matched reality.
Then we built a verification loop. For each company the tool flagged as exposed, it cross-referenced against the live source to confirm the status was real, not cached, not guessed. Any mismatch got flagged for manual review. Out of 585 companies scored, three were wrong. The loop caught all three before anyone acted on them.
If your team is building tools with coding agents and skipping verification, you're trusting output that hasn't been checked. The verification loop took longer to build than the tool itself. It was worth it.
What happened
The dashboard went into a stakeholder meeting with the sales team. Instead of debating which companies to target next, they were looking at a ranked list of 585 prospects already in pain. The conversation shifted from "who do we educate?" to "who do we call first?"
The team identified three companies scoring above 80 on the exposure index: companies whose protection had lapsed within the last 90 days. Those became the priority outreach targets for the following week.
Separately, the email problem turned out to be a one-line fix: the three thousand emails were going out as HTML, and spam filters were treating them like marketing. Nobody noticed until the prospecting tool proved the audience wasn't the bottleneck.
The blueprint
THE STACK
- For your team: Claude Code or any coding agent (Codex, pi)
- Install: Python 3.12+, then run:
pip install streamlit plotly- Cost to run: Free through Streamlit
- What it produces: A ranked list of your most likely buyers, already in pain
FINDING YOUR DATA SOURCE
I sell [your product] to [your ideal customer].
My customers buy when they realize [the problem].
I need public data to find companies experiencing
this problem right now.
Search for data sources specific to my industry:
1. Government databases and registries that track
companies in my space
2. Free APIs or public search portals
3. Customs, licensing, compliance, or filing records
4. data.gov, Socrata, state/county registries
5. Industry-specific public databases
For each source you find, tell me:
- URL and whether it's free
- What fields are available
- How to access (API, scrape, or download)
- How far back the data goes
Then pick the best free source and explain how to
structure a scraper for it.
Example: if my customers are importers, ImportYeti
(free US customs records) would be a strong source
because it shows every shipment by company name.THE PROMPT
I sell [your product] to [your ideal customer].
My customers buy when they realize [the problem].
Data source: [the source you found in step 1]
Access method: [API, scrape, or download]
CRITICAL: paste ONE real record from the source below.
The agent will hallucinate field names without it.
[paste one real record here]
Build a Python tool that:
1. Pulls all records from the source
2. Finds companies currently in [the problem state]
3. Scores each company on fit and urgency:
- How closely they match your ideal customer
- How recently the problem signal appeared
- How severe the signal is
4. Ranks companies by score (0-100)
5. Outputs a Streamlit dashboard with:
- Filterable, sortable table
- Score breakdown per company
- Export to CSV button
Name fields exactly as they appear in the real record above.VERIFICATION LOOP
The agent's first pass had invented field names. The verification function was the safety net: for every company the tool flagged, it re-fetched the live source page and confirmed the data matched. Any row that didn't match went to a manual review list. Out of 585 companies, three were wrong. The loop caught all three.
Add a verification function to the tool that:
1. For each company in the results, re-fetches the
source page and confirms the record still exists
2. Compares every field against what the tool
originally captured
3. Flags any mismatch in a separate list called
"needs_manual_review.csv"
4. Logs how many records passed vs failed
Run this after every scrape. Do not trust the output
until verification passes.The dashboard makes the data visible to non-technical stakeholders in a meeting. A CSV doesn't do that.
Where could AI save your team time?
The AI Readiness Scorecard takes 5 minutes. No email required.
{ TAKE THE SCORECARD }