Hari Rajashekar
All work
(00)
Case study · 02

Barky AI

How a voice agent for home service businesses booked 23 demos from 100 cold calls.

Role  Solo build·Timeline  Ongoing·Stack  VAPI, Make.com, Twilio, Claude API
23
Demos booked from cold outreach
100
Calls placed by the agent
23%
Conversion to demo
<60s
Average call length
(01)
TL;DR

Barky AI is a voice agent I built for home service businesses — plumbers, HVAC, roofing, the kind of small operators who lose money every time a call goes to voicemail. The interesting part: instead of selling Barky the normal way, I had Barky sell itself. The agent placed its own cold calls and booked 23 demos in a week.

(02)

The problem.

Home service businesses live and die by inbound calls. A plumber misses a call, the customer hits the next plumber on Google. Most small shops can't afford a full-time receptionist, so they either let calls go to voicemail or pay $200+ a month for an answering service that mostly takes messages.

The bigger problem on the sales side: this is a hard market to reach. Owners are on rooftops and under sinks, not on LinkedIn. Cold email doesn't work because half of them barely check their inbox. The only channel they actually answer is the phone — which is a problem when you're trying to sell them phone software.

(03)

Constraints.

Built solo, nights and weekends. No marketing budget. The agent had to work end-to-end on its own — answer calls, qualify leads, book demos into a calendar — without me babysitting it. And it had to sound like a person, not the obviously-robotic voice agents most people have already hung up on.

Three hard limits:

  • 01Per-call cost had to stay under $0.50.
  • 02Latency under 800ms — anything slower and people interrupt the agent.
  • 03Had to handle interruptions and tangents naturally, not robotically.
(04)

What I tried first.

First version was the "agent as receptionist" pitch. I built a demo where Barky answered an inbound call, qualified the lead, and booked an appointment. Recorded the demo, made a Loom, started cold emailing plumbers and HVAC companies.

Open rates were okay. Reply rates were almost zero. The few replies I got were variations of "interesting, send more info" — which is the cold email graveyard. The product worked. The motion didn't.I was selling phone software through a channel they don't use.

(05)

What actually worked.

The realization was obvious in hindsight: if Barky is good enough to answer calls for a plumber, it's good enough to make calls for itself.

I built a second agent — a sales version — and pointed it at a list of home service businesses pulled from Google Maps. The agent introduced itself, explained what Barky does in two sentences, and asked if they wanted a 15-minute demo. If yes, it offered times and booked them. If no, it ended politely and hung up. No follow-up, no pressure.

Before · cold email~0% reply
"Hi — I built a voice agent that answers calls for home service businesses. Would you be open to a 15-minute demo this week?"
After · the agent sells itself~23% book
"Hey — this is Barky calling from Barky AI. I'm actually the product. I answer calls for shops like yours when you can't pick up. Want me to book you a 15-minute demo with the founder?"

In a week of intermittent runs, Barky placed about 100 calls and booked 23 demos. The conversion didn't surprise me as much as the reaction. About a third of the people who booked told me, on the demo, that they hadn't realized they were talking to an AI until halfway through the call. That was the actual product demo — the demo was happening to them in real time.

barky-sales-agent.tssimplified
// the product is the pitch. let the agent do what it does.
const call = await vapi.dial({
  number: lead.phone,
  voice: 'barky-v2',
  system: 'you are barky, calling a home service business.',
  tools: [bookDemo, transferToHuman, endCall],
  maxDuration: 180, // hang up at 3 min regardless
});

if (call.outcome === 'demo_booked') {
  await make.run('sync-to-calendar', call.booking);
}
Fig. 01 · call architectureBarky AI call architectureFour-layer stack: Twilio for telephony, VAPI for voice, Claude for conversation logic, Make.com for orchestration. Inbound call surfaces back up as a booked appointment.04MAKE.COMOrchestration · calendar, lists, follow-ups03CLAUDEConversation logic and tool calls02VAPIVoice · latency, interruption, turn-taking01TWILIOTelephony · placing and receiving callsinbound callbooked appointment<800ms latency$0.31 / callInbound call surfaces back up as a booked appointment. Four services, each doing one job.
01 · Twilio → VAPI → Claude → Make.com (calendar + CRM)

The architecture is simple. Each layer does one job:

  • ATwilio. Actual telephony — placing and receiving calls.
  • BVAPI. Voice layer, handles latency and interruption.
  • CClaude. Conversation logic and tool calls.
  • DMake.com. Orchestration — lists, calendar, follow-ups.
(06)

The numbers.

100 calls placed. 23 demos booked. Average call length under 60 seconds when the prospect wasn't interested, around 2–3 minutes when they were. Per-call cost averaged $0.31 including VAPI, Twilio, and LLM costs. Roughly $1.35 per booked demo, which is absurd compared to any other B2B channel.

The deeper number: of the 23 demos booked, 7 converted to paid pilots. The agent that sold itself paid for the whole build twice over.

Cost per booked demo, by channel
Typical B2BBarky
$400$300$200$0$320$85$1.35PAID ADSCOLD EMAILBARKYIndustry ref.Industry ref.The agent
(07)

What I'd do differently.

  • 01Add objection handling earlier. Version 1 ended the call too quickly on soft no's. Version 2 has light follow-up logic and the conversion rate ticked up.
  • 02Record everything from day one. I didn't save the first 30 calls. Those would have been the most valuable training data.
  • 03Pick one vertical first. I started with plumbers, HVAC, and roofing in parallel. The pitch needed to be different for each, and trying to generalize hurt the conversion rate.