How We Built an AI Outbound System That Books Calls on Autopilot
A behind-the-scenes look at Bosar Agency's own AI-powered outbound engine — from lead scraping to personalized cold email to automated onboarding.
Most agencies that sell AI solutions don’t actually use AI to run their own business. They build automations for clients all day, then manually send follow-up emails, Google potential leads one at a time, and spend hours every week on sales activities that could be automated.
We decided that was ridiculous. If we’re going to sell AI-powered systems to service businesses, we should be eating our own cooking. So we built an end-to-end AI outbound system for Bosar Agency — from finding leads to sending personalized cold emails to onboarding new clients — with minimal manual intervention.
This is the full behind-the-scenes breakdown. What we built, how it works, what it cost, what went wrong, and the real numbers. No cherry-picked metrics. No “and then revenue went up 500%” fantasy. Just the honest story of building and iterating on an AI-powered outbound engine.
The Problem We Were Solving
Like most small agencies, our client acquisition was a mix of referrals, inbound from our website, and manual outbound. Referrals are great but unpredictable. Inbound takes months of content marketing to build up. Manual outbound — me personally researching companies, finding email addresses, writing personalized emails — worked but didn’t scale. I was spending 8-10 hours per week on outbound sales activities and producing maybe 20-30 personalized emails.
That’s not sustainable when you’re also running projects, managing a team, and trying to grow. We needed a system that could:
- Find relevant leads at scale (hundreds per week, not dozens)
- Enrich those leads with accurate contact info and context
- Generate genuinely personalized emails (not “Hi {first_name}” template garbage)
- Send campaigns through proper infrastructure that doesn’t land in spam
- Handle responses intelligently
- Streamline the onboarding process when someone says yes
Here’s how we built each piece.
Stage 1: Lead Scraping
We needed to find service businesses that could benefit from AI voice agents, chatbots, or automations. Our initial target markets were roofing companies, water damage restoration firms, and business coaches — all industries where missed calls and slow follow-up cost serious money.
The Tools
We built our scraping pipeline on two primary sources:
Google Maps via Apify: For local service businesses (roofing, water damage, plumbers), Google Maps is the best source. We use Apify actors to scrape business listings by category and geography. A typical scrape: “roofing companies in Texas” returns hundreds of businesses with name, phone, website, address, and review data.
Google Search via Apify: For less location-specific leads (business coaches, consultants), we use Google Search scraping to find businesses by keyword combinations.
The Config-Driven Approach
Rather than hardcoding scraping parameters, we built a YAML-based configuration system. Each niche gets its own config file defining:
- Source (Google Maps, Google Search, Instagram)
- Target geographies (states, cities)
- Business categories and search terms
- Minimum review count (to filter out inactive businesses)
- Over-provisioning ratios (more on this below)
This means launching a scrape for a new niche takes minutes — we just create a new YAML config — instead of writing new code.
What We Learned About Scraping Yield
Not every scraped business is usable. Many don’t have working websites. Some are duplicates. Some are enterprises too large for our services. Some have email addresses that don’t exist.
Our real yield rates:
- Google Maps → valid lead with email: ~30-40% after cleaning and email verification
- Google Search → valid lead with email: ~25-35%
- Instagram hashtags (coaches): ~6% yield at $0.22/lead — we abandoned this quickly as too expensive
The key insight: you need to over-provision significantly. If you want 200 leads for a campaign, scrape 600. This sounds wasteful, but the scraping cost is minimal ($5-$15 per batch) compared to the time cost of running out of leads mid-campaign.
Stage 2: Email Enrichment and Verification
Raw scraped data gives you business names, websites, and sometimes a generic info@ email. That’s not enough for cold outreach. You need the actual decision-maker’s email address.
The Enrichment Stack
We run a multi-tool enrichment pipeline:
- AnyMailFinder for finding email addresses associated with domains
- Tomba.io as a secondary source (roughly 62% hit rate on Google Maps leads)
- MillionVerifier as the final gate — every email gets verified before it enters a campaign
The verification step is critical. Sending to invalid emails tanks your sender reputation. MillionVerifier costs approximately $0.001 per email — basically free — and it prevents the kind of bounce rates that get your domain blacklisted. We gate our campaign creation on verification results: if an email doesn’t pass as “valid” or “catch-all with high confidence,” it doesn’t get sent.
First Name Quality Control
This sounds like a small detail, but it nearly torpedoed our early campaigns. Email enrichment tools sometimes return company names or garbage data in the “first name” field. Imagine receiving a cold email that starts “Hi Big Water Services” — that’s an instant delete.
We built a validation layer using a dictionary of known first names. If the “first name” from the enrichment tool isn’t in the dictionary, we either skip personalization or use a fallback like “Hi there.” We also maintain a blocklist of company words that commonly get mistaken for names: “Big,” “Total,” “National,” “Premier,” etc.
This quality control step single-handedly improved our reply rates by reducing the number of emails that scream “I’m a mass-sent template.”
Stage 3: AI-Powered Personalization
This is where the system goes from “automated email blast” to something genuinely useful. Generic cold email doesn’t work in 2026. People’s spam filters — both algorithmic and mental — are too good.
Website Scraping for Context
For each lead, we scrape their website to extract:
- What services they offer
- What areas they serve
- Any unique selling propositions or specializations
- Their company tone (formal, casual, family-business vibe)
This context feeds into the personalization engine.
Icebreaker Generation with Claude
We use Claude (Haiku, for cost efficiency) to generate a personalized icebreaker for each email. The icebreaker references something specific about the business — their service area, a notable aspect of their website, or their positioning in the market.
The key is making the icebreaker feel observational, not creepy. “I noticed you serve the greater Houston area and specialize in storm damage repair” is good. “I saw you posted a photo of your team on your About page on February 12th” is surveillance.
We also use Claude to “casualize” company names. Enrichment data often returns verbose legal names like “Johnson & Sons Roofing and Restoration LLC.” The AI rewrites it to “Johnson & Sons” or “Johnson Roofing” — whatever sounds natural in a casual email.
Email Copy That Doesn’t Sound Like a Robot
We avoid the classic cold email formula everyone recognizes. Our structure: one-line personalized icebreaker, the problem in their industry’s language, what we do about it (one sentence), soft ask (“worth a quick chat?”), and sign-off (“Bohdan, Founder, Bosar Agency”). Total: 60-100 words. Short enough for a phone screen. Long enough to communicate value.
Stage 4: Campaign Infrastructure
Personalized emails mean nothing if they land in spam. Cold email deliverability is a whole discipline, and we invested heavily in getting it right.
SmartLead.ai for Sending
We use SmartLead.ai as our sending platform. The key reasons:
- Multiple sender accounts: We rotate across 12 sender accounts per campaign. This distributes volume and protects any single domain from reputation damage.
- Warm-up built in: New sender accounts go through an automated warm-up period before sending cold emails.
- Smart scheduling: Emails are sent at varied times throughout the day, mimicking human sending patterns.
- Reply tracking: Responses are centralized across all sender accounts.
A Critical Technical Detail
We learned the hard way that SmartLead uses snake_case merge fields: {{first_name}}, not {{firstName}}. CamelCase renders empty — so every personalized field shows up blank. Our first test campaign went out as “Hi , I noticed that is…” to 50 leads before we caught it. Not our proudest moment. But better to learn on a small batch.
Campaign Creation, Not Campaign Launch
This is a deliberate design choice: our system creates campaigns in SmartLead but does NOT start them automatically. Every campaign goes through a manual quality audit before launch. We check:
- First name quality (no company names, no garbage data)
- Icebreaker quality (relevant, specific, not weird)
- Email addresses (verified, no obvious issues)
- Overall tone (matches the niche’s expectations)
- Blocklist compliance (no emails to domains we’ve previously been asked to stop contacting)
We maintain a blocklist of 60+ domains that should never receive outbound emails — competitors, existing clients, previous unsubscribes, personal email providers, etc. The quality audit catches anything the automated filters missed.
This manual checkpoint adds 20-30 minutes per campaign but prevents embarrassing mistakes that can damage your brand permanently.
Stage 5: Response Handling and Onboarding
When a lead replies, AI-assisted auto-reply handling through SmartLead categorizes the response — interested, curious, not interested, or unsubscribe — and drafts appropriate follow-ups. Interested leads and angry replies always get human review before any response goes out.
When a lead converts to “let’s work together,” our automated onboarding kicks in: the system generates a tailored proposal (AI-personalized sections from templates), includes a Stripe payment link, and once payment clears, sends a calendar link for the kickoff call. The proposal still gets human review, but manual onboarding work dropped from 2-3 hours per client to about 20 minutes.
The Real Numbers
I promised transparency, so here it is.
Pipeline Volume
- Leads scraped per niche per batch: 400-800
- Leads after cleaning and email verification: 150-300 (35-45% yield)
- Emails sent per campaign: 100-250
- Average open rate: 55-65%
- Average reply rate: 3-8% (varies significantly by niche)
- Positive reply rate (interested or curious): 1.5-4%
Cost Per Lead
- Scraping cost: $0.01-$0.03 per raw lead
- Email enrichment: $0.02-$0.05 per lead
- Email verification: $0.001 per email
- AI personalization (Claude Haiku): $0.002-$0.005 per lead
- SmartLead sending: ~$0.01 per email sent
- Total cost per campaign-ready lead: $0.05-$0.10
- Total cost per interested reply: $2-$7
Compare that to LinkedIn outbound ($50-$100 per connection request that gets a response) or paid ads ($30-$200 per qualified lead in the B2B services space). The economics are compelling.
What Didn’t Work
Instagram scraping for coaches was a money pit. 6% yield at $0.22/lead — we burned $200 before switching to Google Search.
Generic “small business” targeting was too broad. Personalization falls flat when you’re emailing a restaurant and a law firm with the same pitch. Niche-specific campaigns (roofing, water damage, coaches) doubled reply rates.
Overly aggressive follow-up. 5 follow-ups over 10 days was too much. Scaling back to 3 over 14 days improved reply quality significantly.
Full company names in icebreakers. “Johnson and Sons Premium Roofing and Restoration Services LLC” sounds robotic. The casualized “Johnson Roofing” is night and day.
Can You Build Something Like This?
The honest answer: the individual components are accessible, but the integration is where it gets complex.
If you have technical skills (comfortable with Python, APIs, Zapier/Make), you could build a simpler version of this system in 2-4 weeks. Use Apify for scraping, Hunter.io or AnyMailFinder for enrichment, ChatGPT or Claude API for personalization, and SmartLead or Instantly for sending.
If you’re not technical, platforms like Instantly.ai, Lemlist, and Apollo combine several steps into one platform. You won’t get the same AI personalization, but you’ll have a functional outbound system.
If you want the full custom version, that’s a $15,000-$25,000 build. I’d only recommend it if you’re sending 1,000+ emails per month and outbound is a core growth channel, not a side experiment.
The Bigger Lesson
Before we built this, outbound sales was a manual, dreaded activity in the “I should do this more” category. Now it runs in the background. We spend 3-4 hours per week on the entire outbound operation — reviewing quality, handling interested replies, optimizing campaigns. That freed up 6-7 hours weekly for client work and strategic projects.
That’s what AI automation, done well, actually looks like. Not “set it and forget it.” Just a well-oiled system that handles the repetitive parts so humans can focus on building relationships, closing deals, and delivering great work.
Frequently Asked Questions
How long did it take to build the entire outbound system?
The first working version took about 3 weeks to build and test. But we’ve been iterating continuously over the past several months — adding email verification gates, improving icebreaker quality, tuning follow-up cadence, adding niche-specific configs. The system today is significantly better than the V1. I’d estimate total development time at around 8-10 weeks spread over several months, including all iterations. If you’re building something similar, plan for 2-3 weeks for a basic version and 2-3 months of iteration to get it optimized.
What’s the deliverability like? Do cold emails land in spam?
Deliverability is good but requires constant attention. We maintain 55-65% open rates, which indicates strong inbox placement. The keys are: multiple sender domains (not your primary business domain), proper SPF/DKIM/DMARC configuration, gradual warm-up of new sending accounts, rotating across 12+ sender accounts per campaign, keeping daily volume per account under 40 emails, and cleaning your list aggressively with MillionVerifier before sending. If you skip any of these steps, your deliverability will suffer. Cold email infrastructure is a discipline, not a one-time setup.
Is this system legal? What about spam laws?
We operate within CAN-SPAM and GDPR guidelines. Every email includes a clear way to opt out (reply “stop” or an unsubscribe mechanism). We honor unsubscribe requests immediately and permanently. We don’t use deceptive subject lines. We include our physical business address. We only email business addresses, not personal ones. We maintain a suppression list and never re-contact someone who’s opted out. That said, cold email regulations vary by country, and enforcement is evolving. We recommend consulting with a legal professional if you’re planning high-volume outbound, especially if targeting prospects in the EU.
What response rate should I expect from AI-personalized cold email?
Realistic expectations: 3-8% total reply rate, with 1.5-4% being positive or curious replies. These numbers vary significantly by niche, offer, and email quality. A well-targeted campaign to roofing companies offering a specific, relevant service can hit 6-8% reply rates. A broad campaign to generic “small businesses” with a vague value proposition will struggle to hit 2%. The AI personalization typically adds 1-2 percentage points over templated emails — meaningful in aggregate but not a magic bullet. The biggest factor in reply rates is still targeting and offer fit, not personalization sophistication.
How much does it cost to run this system monthly?
Our monthly operational costs break down roughly as: SmartLead ($94/month for our plan), Apify scraping credits ($30-$60/month depending on volume), email enrichment tools ($50-$100/month), MillionVerifier ($10-$20/month), Claude API for personalization ($15-$30/month). Total: roughly $200-$300/month in tooling costs to run 3-5 active campaigns generating 300-500+ emails per month. That doesn’t include the development cost to build the system — just the ongoing operational cost. At a cost per interested reply of $2-$7, and an average project value of $15,000-$25,000, the unit economics are strong even with modest conversion rates from reply to closed deal.
Ready to Get Started?
Tell us what you're working on. We'll review every submission and respond within 24 hours.