DEV Community

RyanCwynar
RyanCwynar

Posted on • Originally published at ryancwynar.com

Building an Automated Prospecting Pipeline With AI

I spent the last week watching my AI assistant add over 250 prospects to our call queue — automatically, around the clock, without me lifting a finger. Here's how we built it and what I learned.

The Problem

If you're selling B2B services (in our case, AI voice receptionists for medical practices, law firms, and dental offices), prospecting is the bottleneck. Finding businesses, checking for duplicates, categorizing them, and queuing them for outreach — it's tedious, repetitive work that eats hours every day.

I knew AI could handle this. The question was how to make it reliable enough to run unsupervised.

The Architecture

Our pipeline runs on a simple loop:

  1. Cron triggers fire multiple times per day (we run 4-5 campaigns with different angles)
  2. AI agent searches Google Maps for specific business types in target geographies
  3. Deduplication checks phone numbers against the existing queue
  4. Enrichment pulls basic info — name, phone, category, location
  5. Queue insertion adds qualified prospects to our call database

The whole thing runs on a VPS with PostgreSQL, some cron jobs, and an AI agent (Claude) doing the actual searching and decision-making.

What Actually Works

Geography-based targeting is key. We started broad ("doctors in South Florida") and quickly learned to get specific: "orthodontists Boca Raton," "immigration attorneys Miami," "chiropractors Fort Lauderdale." Specific queries yield better prospects with less overlap.

Multiple campaigns prevent staleness. We run separate campaigns — receptionist, reviews, AI-focused, and a general one — each with slightly different search strategies. This naturally diversifies the prospect pool.

Deduplication by phone number is non-negotiable. As the queue grows, duplicate rates climb. We went from ~10% duplicates in week one to ~60% on some searches by the end of the week. Phone number matching catches businesses listed under slightly different names.

Saturation is real. After 250+ prospects in South Florida, our searches started returning mostly duplicates. The signal was clear: time to expand geographically or vertically into new business categories.

The Numbers

Over one week of automated prospecting:

  • ~250 prospects added to the call queue
  • 5 campaigns running daily
  • 4-6 new prospects per run (down from 10+ at the start)
  • 0 human hours spent on prospecting
  • Categories covered: Medical, dental, legal, CPA, wealth management, chiropractic

The cost? Basically just API calls and compute time — maybe $5/day total.

Lessons Learned

Start narrow, expand systematically. Don't try to prospect every business type in every city on day one. Pick a geography and category, saturate it, then expand. You'll build a cleaner dataset.

Track saturation metrics. When your duplicate rate on a search hits 70%+, it's time to move on. We track this per-campaign and per-geography.

Let the AI make judgment calls. Our agent decides which search queries to run, evaluates whether a business is a good fit, and skips obvious mismatches. Trying to hard-code every rule would be brittle. The AI handles edge cases naturally.

Batch, don't stream. Running prospects in batches (4-6 at a time, several times per day) is better than trying to maintain a continuous stream. It's easier to debug, monitor, and the results are more consistent.

What's Next

The prospecting pipeline feeds into automated voice outreach — AI calls that pitch our service to each prospect. That's a whole other blog post. But the key insight is this: the hardest part of sales automation isn't the pitch, it's building the pipeline that feeds it.

If you're doing any kind of B2B outreach and still manually searching for prospects, you're leaving money on the table. An AI agent with access to search APIs and a simple database can do in a day what used to take a week.

The future of sales isn't just AI making the calls — it's AI finding the people to call.

Top comments (0)