DEV Community

RyanCwynar
RyanCwynar

Posted on • Originally published at ryancwynar.com

I Built an AI Prospect Engine That Finds 150+ Leads While I Sleep

Last week, my AI agent added 153 prospects to my outreach queue. I did not lift a finger.

No manual Googling. No spreadsheet wrangling. No VA. Just a series of cron jobs, a Redis queue, and an AI that knows how to search, filter, and qualify leads on its own.

Here is how it works and what I learned building it.

The Problem

I am building voice AI products for local businesses — think AI receptionists, review follow-up calls, that kind of thing. The target market is doctors, dentists, law firms, and CPAs in South Florida.

The old way: manually search Google Maps, copy phone numbers into a spreadsheet, check for duplicates, repeat. Maybe 20 leads per hour if you are fast. Soul-crushing work.

The Architecture

The system runs on four campaign types, each hitting different angles:

  • Receptionist campaign — targets businesses that clearly need phone handling help
  • Reviews campaign — finds businesses with review management pain points
  • AI campaign — pitches the broader AI automation angle to tech-curious firms
  • Boring campaign — straightforward cold outreach, no fancy hook

Each campaign runs as a cron job at staggered intervals throughout the day (10am, 1pm, 3pm, 5pm, 8pm UTC). The AI agent:

  1. Searches Google for businesses matching the campaign criteria
  2. Extracts name, phone, website, and category
  3. Checks Redis for duplicates against the existing queue
  4. Adds qualified prospects with campaign metadata
  5. Logs everything to daily memory files

The Tech Stack

  • OpenClaw — the AI agent framework that orchestrates everything
  • Redis — stores the call queue as a JSON array (simple but effective)
  • Google Search — prospect discovery (no fancy APIs, just web search)
  • Cron jobs — five runs per day across four campaigns

The whole thing runs on a single VPS. No Lambda functions, no Kubernetes, no over-engineering.

What 5 Days of Data Looks Like

Here is the progression:

  • Day 1: 94 → 110 prospects (16 added)
  • Day 2: 116 → 133 prospects (17 added)
  • Day 3: 141 → 153 prospects (12 added, more duplicates now)
  • Day 4: 119 → 131 prospects (queue was reset, rebuilt)
  • Day 5: 131 → 143 prospects (12 added)

The duplicate detection is crucial. As the queue grows, more search results are already captured. The system gracefully handles this — it just skips and logs.

Lessons Learned

1. Deduplication is the real problem. Finding leads is easy. Not calling the same dentist three times from three different campaigns? That is the engineering challenge. I normalize phone numbers and check against the full queue before every insert.

2. Campaign diversity matters. Running four different angles means I am not just hammering the same search queries. The receptionist campaign finds different businesses than the reviews campaign, even in the same city.

3. Let the AI be messy, then clean up. Early versions tried to be too precise with search queries. Now I let the agent cast a wider net and rely on the dedup + qualification step to filter. More candidates in, better prospects out.

4. Logging is non-negotiable. Every run logs exactly what was added, what was skipped, and why. When something looks off, I can trace it back to the exact search query and result.

5. Redis is fine. I know, I know — a proper database would be more robust. But for a queue of 150 prospects? JSON in Redis with atomic SET operations works perfectly. Do not over-architect early.

What is Next

The queue feeds into an automated voice calling system (Retell AI + Twilio). Each prospect gets a personalized call based on their campaign type. That is a whole other post.

The bigger insight: AI agents are not just chatbots. They are workers. Give them a clear task, the right tools, and a schedule, and they will grind through repetitive work better than any human.

My agent runs 20 prospect searches per day. It never gets bored, never makes typos in phone numbers, and never forgets to check for duplicates.

That is the future of sales ops. Not replacing salespeople — replacing the tedious prospecting work that burns them out before they ever pick up the phone.

Top comments (0)