Most salespeople spend hours scrolling Google Maps, copying phone numbers into spreadsheets, and manually researching businesses before making a single call. I automated the entire thing.
Over the past few weeks, I've built a fully autonomous prospecting system that finds local businesses, qualifies them, and queues them for outreach — running on cron jobs throughout the day with zero human intervention.
The Architecture
The system runs four parallel campaigns, each targeting a different value proposition:
- Receptionist — AI phone answering for medical offices, law firms, and dental practices
- Reviews — Automated review management and reputation building
- AI — General AI automation for professional services
- Boring — The unsexy but profitable stuff: wealth management, dermatology, estate planning
Each campaign has its own cron job that fires at staggered intervals throughout the day. The agent searches for businesses in South Florida (Miami, Fort Lauderdale, Boca Raton, Palm Beach), filters by industry, checks for duplicates against existing prospects, and pushes qualified leads into a Redis queue.
How It Actually Works
Discovery: The AI agent searches Google Maps for specific business types in target zip codes. It rotates through categories — dentists one run, law firms the next — to keep the pipeline diverse.
Qualification: Not every business is a fit. The agent checks for existing web presence, reviews their current setup, and filters out chains and franchises. We want independent practices that would actually benefit from AI tools.
Deduplication: Every prospect gets checked against the existing Redis queue and historical outreach data. No one likes getting called twice.
Queuing: Qualified prospects get pushed to Redis with full metadata — name, phone, address, category, campaign source. The outreach dialer pulls from this queue when it's time to make calls.
The Numbers
In the last three days alone:
- 76 prospects queued across all campaigns
- 37 outreach calls completed by the automated dialer
- 4 campaigns running simultaneously
- 6 cron jobs firing daily (some campaigns run multiple times)
The receptionist campaign alone is adding 6-8 prospects per run, twice a day. That's 12-16 new qualified leads daily from a single campaign.
What I Learned Building This
Redis queues beat databases for this use case. The outreach dialer needs to pop prospects off the queue atomically — no double-dials, no race conditions. Redis LPUSH/RPOP is perfect. Postgres is great for historical data, but the hot queue lives in Redis.
Stagger your cron jobs. I initially had everything firing at the same time. API rate limits, context window bloat, and resource contention made it unreliable. Now each campaign runs at a different hour: 10 AM, 1 PM, 3 PM, 5 PM, 8 PM. Smooth sailing.
Campaign diversity matters. Different businesses respond to different pitches. A dentist cares about missed calls and appointment booking. A law firm cares about intake screening. A wealth manager cares about sounding professional. One campaign with one pitch would leave money on the table.
Let the agent make decisions. Early versions had rigid search templates. The current version gives the AI agent a target profile and lets it figure out the best search queries. It finds prospects I wouldn't have thought to look for.
The Stack
- OpenClaw — AI agent runtime (handles cron scheduling and tool orchestration)
- Redis — Prospect queue with atomic operations
- PostgreSQL — Historical prospect data and call logs
- Retell AI — Voice AI for the actual outreach calls
- Google Maps API — Business discovery and verification
What's Next
The pipeline finds and queues prospects. The dialer makes calls. But the gap between "prospect picked up" and "deal closed" still needs work. I'm building conversation analysis to automatically score call quality and route hot leads to a human follow-up queue.
The dream: wake up, check the dashboard, see which prospects are ready to close. Everything upstream is handled.
If you're building outbound sales and still doing manual prospecting in 2026, you're leaving time and money on the table. The tools exist. The APIs exist. Build the pipeline and let it run.
Top comments (0)