Last week I crossed 250 prospects in my outreach queue. I didn't find a single one of them manually.
I built an automated prospecting system that runs 5 times a day, searches Google Maps for local businesses, deduplicates against my existing queue, and adds qualified leads — all without me lifting a finger. Here's how it works and what I learned.
The Problem
I'm selling AI services to local businesses: medical practices, law firms, dental offices, CPAs. The kind of businesses that still answer phones with hold music and "press 1 for billing."
The bottleneck was never the product. It was finding enough businesses to talk to. Manual prospecting is soul-crushing — you search, you copy numbers, you check for duplicates, you add them to a spreadsheet. Repeat 50 times. By the time you're done, you don't even want to make the calls.
The Architecture
The system is dead simple:
- Cron jobs fire 5 times daily (10am, 1pm, 3pm, 5pm, 8pm UTC)
- Each job runs a different campaign with its own search strategy
- A prospect finder searches Google Maps for businesses matching target categories and geographies
- Results get deduplicated against the existing queue (phone number is the unique key)
- New prospects get added to a PostgreSQL database with category, location, and campaign tags
Each run typically finds 15-20 candidates and adds 3-6 after dedup. That's 15-30 new prospects per day, completely hands-free.
Campaign Strategy
I run four parallel campaigns, each targeting the same verticals but with different angles:
- Receptionist — Pitching AI phone answering
- Reviews — Pitching automated review management
- AI — General AI automation pitch
- Boring — Straightforward, no-hype approach
Why four campaigns for the same prospect pool? A/B testing at scale. Different messaging resonates with different businesses. The dentist who ignores "AI-powered receptionist" might respond to "never miss a patient call again."
The Dedup Problem
This is where most people's automation breaks down. Once you've been running for a week, 60-70% of search results are already in your queue. Without dedup, you're wasting time and embarrassing yourself by calling the same office twice.
My solution: phone number as the canonical ID. Before adding any prospect, the system checks if that number already exists. Simple, but it catches edge cases that name-matching misses — businesses with multiple locations, name changes, or slight spelling variations.
The hit rate tells you something useful too. When I'm seeing 80%+ duplicates for a geography, it's time to expand to new areas. I started in Miami and Fort Lauderdale, then expanded to Boca Raton, Palm Beach Gardens, Jupiter, Delray Beach, Coral Springs, and Plantation.
What I'd Do Differently
Start with more geographic diversity. I saturated South Florida faster than expected. Within a week, my Fort Lauderdale dentist searches were returning 90% duplicates.
Add scoring earlier. Right now every prospect is equal in the queue. I should weight by Google reviews count, years in business, and whether their website looks like it was built in 2008 (those are actually the best prospects — they need the most help).
Track the full funnel. I know how many prospects I'm adding, but I need better metrics on call outcomes. Which campaigns produce prospects that actually pick up? Which categories convert?
The Numbers
After one week of running:
- 256 prospects in the queue
- 5 campaigns running in parallel
- ~25 new prospects/day average
- Zero manual prospecting time
The ROI math is simple. If I spent 2 hours building this system and it saves me 30 minutes of prospecting per day, it paid for itself in 4 days. Everything after that is free leverage.
The Bigger Lesson
The best automation isn't the flashy stuff. It's the boring, repetitive work that you'd otherwise skip entirely. I wasn't going to manually prospect 250 businesses. I just wasn't. The automation didn't make me faster — it made the work actually happen.
That's the real unlock with AI tooling. Not doing things 10x faster. Doing things that wouldn't get done at all.
Top comments (0)