Every business needs leads. Most founders spend hours on Google Maps, copying phone numbers into spreadsheets, deduplicating, and organizing. I automated the entire thing with an AI agent, Redis queues, and a handful of cron jobs.
Here's how it works and what I learned building it.
The Problem
I'm selling AI services to local businesses — doctors, lawyers, dentists, CPAs in South Florida. The kind of businesses that still answer phones with hold music and paper appointment books.
The manual process looked like this: search Google for "dentists Boca Raton," open each result, check if they have a website, grab the phone number, make sure I haven't already contacted them, add them to a list. Repeat for every city and every profession.
It took about 2 hours to find 20 good prospects. That's not scalable.
The Architecture
The system runs as a set of scheduled tasks on my AI agent (built on OpenClaw). Here's the stack:
- Brave Search API for finding businesses by category and city
- Web scraping to pull phone numbers and verify websites
- Redis as the queue backend — simple, fast, perfect for this
- Deduplication by phone number and business name against the existing queue
- Multiple campaigns running on different schedules throughout the day
Each campaign targets different verticals and pitches. The "receptionist" campaign finds medical offices that need AI phone answering. The "reviews" campaign targets businesses with mediocre Google ratings. The "AI" campaign goes after firms that could benefit from automation.
How a Single Run Works
- The cron job fires and tells the agent: "Find prospects for the receptionist campaign."
- The agent picks 3-4 search queries based on the campaign's target verticals and cities it hasn't saturated yet.
- For each result, it extracts the business name, phone number, website, and city.
- It checks the Redis queue for duplicates — both by phone number and fuzzy name matching.
- New prospects get pushed to the queue with campaign tags.
- A summary gets logged to the daily memory file.
The whole thing takes about 60 seconds per run. Four campaigns running 1-2 times per day means I'm adding 15-25 new qualified prospects daily without lifting a finger.
The Numbers
After one week of running this system:
- 190+ prospects in the queue
- 4 campaigns running autonomously
- ~60% duplicate detection rate — meaning the system is smart enough to skip businesses it's already found
- Zero manual prospecting time
The duplicate rate actually tells me something useful: it means I'm covering the market thoroughly. When duplicates start hitting 80-90%, I know it's time to expand to new cities or verticals.
What I'd Do Differently
Redis works great as a quick queue, but I'm already hitting the limits of storing everything in a single JSON key. The next iteration will use PostgreSQL with proper indexing — I've already got a Postgres instance running for other things.
I'd also add automatic enrichment: pull Google review counts, check if the website is mobile-friendly, look for existing chatbots. The more data per prospect, the better the outreach pitch.
The Bigger Picture
This isn't just about lead gen. It's about the pattern: take a repetitive task, break it into discrete steps, and let an AI agent handle each step on a schedule.
The same architecture works for:
- Content research — find trending topics in your niche automatically
- Competitive monitoring — track competitor pricing or feature changes
- Recruitment — scan job boards for candidates matching specific criteria
The agent doesn't get bored. It doesn't forget to check a city. It doesn't accidentally add duplicates. And it runs while I'm building the actual product these leads will buy.
If you're still manually prospecting in 2026, you're leaving time on the table. The tools exist. Build the pipeline, set the schedule, and let the machines do the tedious work.
Top comments (0)