DEV Community

RyanCwynar
RyanCwynar

Posted on • Originally published at ryancwynar.com

Building an AI Prospect Finder That Runs Itself

I spent the last week building something I've wanted for a long time: a fully automated prospect finder that researches businesses, qualifies them, and queues them for outreach — all without me lifting a finger.

The Problem

If you've ever done B2B outreach, you know the grind. Find businesses, look up their phone numbers, figure out if they're a good fit, add them to your CRM. Repeat 50 times. It's the kind of work that feels productive but eats your entire day.

I'm running multiple outreach campaigns right now — AI receptionist demos for dental offices and law firms, review management for medical practices, and a few others. Each campaign targets different verticals in South Florida. Manually finding 5-10 good prospects per campaign per day was killing my momentum.

The Architecture

The system runs on cron jobs through my AI assistant (which I built on top of Claude). Every few hours, a job fires that does the following:

  1. Searches Google Maps for businesses matching the campaign criteria (dentists in Boca Raton, law firms in Fort Lauderdale, etc.)
  2. Scrapes basic info — name, phone, website, reviews, category
  3. Filters duplicates against the existing Redis queue
  4. Qualifies prospects — checks if the website is active, if they're a solo practice vs. large chain, if they're in the right geography
  5. Pushes to Redis as a JSON queue that my voice outreach system pulls from

The whole pipeline is orchestrated by the AI agent itself. No separate microservice, no complex ETL. The agent has access to web search, a browser for scraping, and Redis for state. The cron job gives it a prompt, and it figures out the rest.

What I Learned

Redis as a simple queue works great for this scale. I'm not processing millions of records. A JSON array in a Redis key handles 150+ prospects without breaking a sweat. I can inspect it with redis-cli, manipulate it with jq, and the voice system pops items off the front. No need for RabbitMQ or SQS.

Multiple campaigns need clear separation. Each prospect gets a campaign field — receptionist, reviews, ai, boring (yes, that's the actual name for the generic pitch). This way the voice system can tailor the script per campaign without me maintaining separate queues.

Deduplication is harder than it sounds. Phone numbers are the best unique key, but formatting varies wildly. Some have country codes, some don't. Some Google listings show tracking numbers. I normalize everything to E.164 format before comparison, which catches most dupes.

The agent gets better at prospecting over time. This sounds hand-wavy, but it's real. Early runs would return chain restaurants and closed businesses. By tuning the prompts — "skip national chains," "verify the phone number appears on their website," "prefer practices with fewer than 50 Google reviews" — the hit rate improved dramatically.

Results So Far

In the last 5 days, the system has found and queued over 150 qualified prospects across 4 campaigns. That's roughly 30 per day, across dental, medical, legal, and financial verticals in the Miami/Fort Lauderdale/Boca Raton area.

Before automation, I was finding maybe 10 per day on a good day, and it took an hour of focused work. Now it runs in the background while I write code.

The Bigger Picture

This is part of a larger system I'm building at byldr.co — AI-powered tools for small business outreach. The prospect finder feeds into a voice AI system that makes the actual calls (built on OpenAI's Realtime API with Twilio). The whole pipeline from "find a dentist" to "call them with a personalized pitch" is automated.

I'm not saying this replaces a good sales team. But for a solo founder testing market fit across multiple offers, having an AI that does the research legwork is a massive multiplier.

Tech Stack

  • Orchestration: Claude-based AI agent with cron scheduling
  • Search: Google Maps API + web scraping
  • Queue: Redis (simple JSON arrays)
  • Voice: OpenAI Realtime API + Twilio
  • Hosting: Hostinger VPS with Docker
  • Backend: Convex (self-hosted)

If you're building outreach automation and want to compare notes, hit me up on Twitter. Always happy to talk shop.

Top comments (0)