The gist
Every neighborhood has a dental office where the phone rings and nobody picks up. A salon where the receptionist quit and appointments get lost. A parking garage where nobody answers after 6 p.m. These businesses lose customers simply because nobody's there to answer.
A voice agent is a virtual receptionist who never gets tired, never gets sick, never goes on vacation and works 24/7. It picks up on the first ring, speaks with a human voice, books appointments, answers common questions and passes tricky cases to a real person.
You're not building Siri or ChatGPT. You're building a specialized worker for one specific business: the dental office down the street or the restaurant across the road. And you offer it for a fixed monthly fee. The amounts in this lesson (for example, $500 a month) are examples for doing the math, not an income forecast or a pricing recommendation: calculate your costs using current rates and go by your own market.
Over 7 days we'll go through the full cycle: from finding your first client to launching a working agent that takes real calls.
🎯 End state on Day 7
A week from now you should have:
- ✅ A Vapi + Twilio + Claude API configuration answering real calls
- ✅ Your first SMB client connected (a pilot or paid, on terms you agree on together)
- ✅ A dashboard with transcripts of every call (for the client)
- ✅ A reusable template for your next 5+ clients
- ✅ A cold outreach playbook: what to write, to whom, and what response you got
NOT the goal for Day 7: a perfect AGI agent, 10 clients at once, a fully autonomous flow. The goal is one working loop, a first client, and an understanding of the economics.
Stack and economics
Components and prices
Prices change: check current terms on the services' websites, and Claude prices on the What's current page.
| Component | Price | What it does |
|---|---|---|
| Vapi platform fee | $0.05/min (orchestration ONLY, as of October 2026) | Glues together the STT + LLM + TTS pipeline |
| STT (for example, Deepgram or OpenAI's speech recognition models) | per the provider's rates | Speech recognition |
| Claude API | Sonnet 5.5: $2 / $10, Haiku 4.5: $1 / $5 per 1M tokens (input / output, as of October 2026) | The LLM brain (Sonnet for booking, Haiku for FAQs) |
| ElevenLabs TTS | Starter subscription $6/month or Creator $22/month (as of October 2026), usage depends on volume | A premium TTS voice |
| Twilio | a fee for the number and for minutes, per their rates | Phone number + carrier connection |
| Calendly API | see the site for terms | Booking integration |
The real cost per minute of conversation (full stack)
Vapi platform: $0.05 (as of October 2026, platform only) STT: per the provider's rates Claude API: depends on the model and the length of the conversation ElevenLabs TTS: per their rates Twilio: per their rates --- Total: the sum of the five lines, calculate it with your own rates
⚠️ Don't confuse this with the marketing "$0.05/min": that's ONLY the Vapi platform fee. The real full stack costs noticeably more: recognition, LLM, voice and telephony are all billed separately.
Monthly estimate: (calls per month) × (average length in minutes) × (cost per minute at your rates). Build in a buffer for your budget: a pricier model for complex calls, a cheaper one for FAQs.
Pricing for the client
Three models:
- Per-minute: the client pays for every minute of conversation
- Flat retainer: a fixed monthly amount with a cap on minutes and an overage charge
- Hybrid: a setup fee + per-minute billing (for larger businesses)
For a small business, a flat retainer is often easier to understand: the client knows what they'll pay, and it's predictable for you. You set the amount based on your costs and your market (the lesson's examples use $500 a month).
Key concepts
- Voice agent: a programmatic flow: incoming call → STT (speech recognition) → LLM (Claude generates the reply) → TTS (voice synthesis) → reply to the caller. The loop repeats on every turn
- Vapi: a managed platform that glues the STT/LLM/TTS pipeline together and handles interruptions, latency and edge cases. Alternatives: Retell AI, Bland AI
- Twilio Programmable Voice: the phone carrier that gives you a real phone number and a SIP connection to Vapi
- System prompt: the main artifact of a voice agent. It defines the personality, the brand, knowledge about the business, and what it can and can't say
- Tool calling: Claude calls functions right during the conversation (book_appointment, check_hours, transfer_to_human)
- Conversation flow: the sequence of typical user intents: greeting → identify need → action → confirmation → close
- Latency budget: the total time from the end of the caller's turn to the start of the agent's reply. Target: <1 second. Otherwise the conversation "breaks"
Theory
Why voice agents are a promising niche in 2026
Three parallel trends:
- STT/TTS quality has crossed the threshold. ElevenLabs, OpenAI Realtime and Vapi's default voices sound very close to human on a typical phone line. Just a couple of years ago everyone could hear the "robot"
- SMBs are still missing calls. Small businesses often can't answer every incoming call, and a missed call is potentially a lost customer
- The price has dropped noticeably over the past few years. The full stack costs little enough that a small business can afford a voice agent
There's a window of opportunity, but nobody knows how long it will stay open: the market may get saturated by big players (as happened with chatbots in 2017-2019). A solo specialist can claim a local niche, but there are no guarantees.
Which business is the right target
Not all SMBs are equal as clients. A voice agent works best where:
- Each customer is worth a lot (LTV higher than the fee for your service). One dental patient brings in noticeably more than one pizzeria customer, so it's easier for a dentist to recoup the cost of this kind of service
- Communication is standardized. "Book me for a tooth extraction" is a repeatable flow. "Pick out a bouquet that matches my wife's mood" isn't
- A high share of calls go unanswered: the client is aware of the pain themselves
- One location or a small chain. Not corporate chains: those require enterprise sales
Top 5 niches (by priority):
- Dental offices ⭐: high LTV, a standard flow (booking + insurance + basic questions)
- Veterinary clinics: emotional callers, the phone is critical, a clear appointment structure
- Law offices (family law, immigration): high LTV, lots of FAQs
- Local beauty salons (4+ stylists): lots of calls, simple services
- Realtors (boutique agencies): after-hours calls, high LTV
Avoid: restaurants (low LTV), pizzerias (ChowNow will beat you), cab companies (their phones are already automated)
Call architecture
┌─────────────┐ ┌─────────────┐ ┌──────────────┐
│ Caller │───▶│ Twilio │───▶│ Vapi │
│ dials │ │ (number) │ │ (pipeline) │
└─────────────┘ └─────────────┘ └──────┬───────┘
│
▼
┌──────────────┐
│ STT │
│ (Deepgram) │
└──────┬───────┘
│
▼
┌──────────────┐
│ Claude API │
│ + tools │
└──────┬───────┘
│
▼
┌──────────────┐
│ TTS │
│ (ElevenLabs)│
└──────┬───────┘
│
▼
back to the callerVapi hides all the complexity: you configure YAML/JSON, and Vapi handles the streams itself.
DAY 1: Niche + first prospect
Goal for the day: identify 20 target businesses, reach out to 5, set up 2-3 prospect calls.
Hour 1-2: Target list
Open Google Maps. Search in your city (or another one if you work remotely):
"dentist near [city]" "veterinary clinic [city]" "immigration lawyer [city]"
For each business, look at:
- Number of reviews: >50 = an active business
- Rating: 4.0-4.6 = there's room for improvement. 4.9 = too perfect, most likely a family business that won't hire an outsider
- Recent negative reviews: gold. Especially: "calling for days, no answer", "left voicemail, never called back", "phone always busy". That's your sales pitch
Save them in a spreadsheet:
| Business | Rating | Reviews | Pain signal | Owner contact |
|---|---|---|---|---|
| Smile Dental | 4.3 | 127 | "tried calling 3x" | front desk |
| Cuenca Vet | 4.5 | 89 | "voicemail full" | dr_garcia@ |
Goal: 20 rows. It takes about 2 hours.
Hour 3-4: Cold outreach
Don't cold call. Email > a phone call for first contact (a call with no context = you're the very spammer you're trying to protect them from).
Email template (in English for the US; for Latin America, write it in Spanish):
Subject: Saw the reviews about missed calls — Smile Dental Hi Dr. Pérez, I noticed on Google that patients mention unanswered calls (reviews from María L. and Carlos R., in the last week). I build AI voice assistants for clinics like yours. The assistant answers 24/7, books appointments on your calendar, answers common questions and transfers complex cases to your receptionist. Cost: [price] per month, flat rate. No long contracts. Do you have 15 minutes this week for a live demo (with your clinic, set up for you)? — [Your name] [Phone]
Key elements:
- ✅ A specific pain point (names from the reviews)
- ✅ A specific price (not "affordable," but a number)
- ✅ A specific next step (a 15-minute demo)
- ❌ NO "AI revolution," "transform your business"
Send 5-10 emails. You'll only learn your own response rates by doing it. Cold email is regulated by law (for example, CAN-SPAM in the US, CASL in Canada, GDPR in the EU): check the rules in your country.
Hour 5: Prospect calls (if someone replied)
If no one replies on Day 1, don't panic. The goal for Day 1 is list + outreach sent, not "client signed."
If someone does reply, schedule a demo for Day 5-6 (after you have a working prototype).
DAY 2: Vapi account + first voice prototype
Goal for the day: a working voice agent (on a test number) with a basic conversation flow.
Hour 1: Vapi setup
# Sign up at vapi.ai
# You get starter credits for testing when you sign up (as of October 2026, $5; see Vapi's site for terms)
# Get your API key from the dashboard
export VAPI_API_KEY=your_key_hereIn the Vapi dashboard, create your first Assistant. Vapi gives you a temporary phone number for testing: call it from your own phone and test.
Hour 2-3: Conversation flow design
Before you set up the prompt, sketch the flow on paper:
Call → "Hello, Smile Dental"
│
├── Wants to book → check_calendar → propose_slots → confirm
│
├── Asks about hours → answer from FAQ
│
├── Asks about insurance → answer from FAQ
│
├── Urgent case (pain) → transfer_to_human (during business hours)
│ → save_callback (after hours)
│
└── Something else → "I'll take a message for the receptionist to call you back"5-7 intents cover most of the calls to a dental office.
Hour 4: Build the agent on Vapi
Model names and parameters in the Vapi configuration (voice, recognition, LLM) get updated: pick current values in the Vapi dashboard, and check the list of supported Claude models there as well.
A basic Vapi assistant configuration (JSON via the API or the dashboard):
{
"name": "Smile Dental Reception",
"voice": {
"provider": "11labs",
"voiceId": "EXAVITQu4vr4xnSDxMaL",
"model": "eleven_turbo_v2_5",
"stability": 0.5,
"similarityBoost": 0.8
},
"model": {
"provider": "anthropic",
"model": "claude-sonnet-5-5",
"temperature": 0.3,
"systemPrompt": "You are the assistant for Smile Dental. Greet callers briefly and ask how you can help. Hours: Mon-Fri 9-6, Sat 10-2. Book appointments with the book_appointment tool. Urgent cases: transfer to a person with transfer_call."
},
"transcriber": {
"provider": "deepgram",
"model": "nova-2",
"language": "en"
},
"firstMessage": "Hello, Smile Dental. This is Anna, how can I help you?",
"endCallPhrases": ["goodbye", "have a nice day"],
"maxDurationSeconds": 600
}Hour 5: Test with your own phone
Call the Vapi test number. Test these scenarios:
- "Hi, I'd like to book a cleaning"
- "What are your hours?"
- "Do you take insurance X?"
- (5 seconds of silence): how the agent handles silence
- (interrupt the agent mid-sentence): handling interruptions
Write down what works badly: latency, unnatural pauses, repetition, hallucinations.
DAY 3: Custom prompts + tool calling
Goal for the day: an agent with the right personality + booking integration.
Hour 1-2: A system prompt with a persona
A sloppy default prompt = a weak agent. A custom prompt with brand DNA = a real worker.
The clinic, doctor, prices and insurance plans in this example are made up: in a real project, use only information the client has verified.
You are Anna, the virtual receptionist for "Smile Dental."
PERSONALITY:
- Warm, professional, but not saccharine
- You speak in short sentences (15-25 words max)
- You never use slang or coach-speak
- If you don't know something, say so honestly: "I'll check with the doctor and call you back"
CLINIC:
- Smile Dental, Cuenca, Av. Florencia Astudillo 7-12
- Hours: Mon-Fri 9:00 a.m.-6:00 p.m., Sat 10:00 a.m.-2:00 p.m., closed Sunday
- Doctor: Dr. María Pérez, 15 years of experience
- Services: general dentistry, cleanings, implants, whitening
- We DON'T do: orthodontics (braces), jaw surgery
- Insurance: we accept Salud SA, Ecuasanitas
- First consultation: $30, cleaning: $80, implant: $1,200
TOOLS:
- book_appointment(date, time, service, patient_name, phone)
- check_availability(date, service)
- transfer_to_human(reason)
- save_callback(phone, reason, urgency)
RULES:
1. Urgent pain or injury → ALWAYS transfer_to_human (during business hours) or save_callback with urgency=high
2. DON'T give medical advice (booking only)
3. DON'T promise an implant price without a consultation
4. If the caller is angry, stay calm: "I understand, I'll pass this on to the doctor. She'll call you back within the hour"
5. If the caller speaks slowly or seems confused, switch to simple SpanishSystem prompt length: 300-500 words is a reasonable target; the longer the prompt, the higher the risk of confusion.
Hour 3-4: Booking tool: Calendly integration
In Vapi, define the tool:
{
"type": "function",
"function": {
"name": "book_appointment",
"description": "Book a patient appointment. Use when the caller has clearly agreed to a specific time.",
"parameters": {
"type": "object",
"properties": {
"patient_name": {"type": "string"},
"phone": {"type": "string"},
"service": {
"type": "string",
"enum": ["consultation", "cleaning", "implant", "whitening"]
},
"datetime_iso": {"type": "string", "description": "ISO 8601 datetime"}
},
"required": ["patient_name", "phone", "service", "datetime_iso"]
}
},
"server": {
"url": "https://your-backend.com/api/book"
}
}On your backend (a Vercel Edge Function works):
// api/book.ts
export default async function handler(req: Request) {
const { patient_name, phone, service, datetime_iso } = await req.json();
// Calendly API call
const response = await fetch(
"https://api.calendly.com/scheduled_events",
{
method: "POST",
headers: {
Authorization: `Bearer ${process.env.CALENDLY_TOKEN}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
event_type: `https://api.calendly.com/event_types/${service}`,
start_time: datetime_iso,
invitee: { name: patient_name, phone }
})
}
);
if (!response.ok) {
return Response.json({
success: false,
message: "That time is already taken. Offer another one."
});
}
return Response.json({
success: true,
confirmation: `Booked: ${patient_name}, ${datetime_iso}`
});
}Hour 5: FAQ knowledge
Put the most common questions into the system prompt ahead of time (DON'T expect Claude to guess):
FREQUENTLY ASKED QUESTIONS:
- "How much is a cleaning?" → $80, takes 45 minutes
- "Do you take insurance?" → Salud SA and Ecuasanitas; for others, call their call center
- "Can I come on Saturday?" → Yes, 10:00 a.m.-2:00 p.m., by appointment only
- "How long is the wait for an implant?" → First a consultation ($30), then the doctor will lay out a plan
- "Do you do braces?" → No, we'll refer you to a partner orthodontistDAY 4: Voice quality tuning
Goal for the day: the conversation sounds like talking to a real person (or close to it).
Hour 1: Choose a voice
Vapi's defaults (Cartesia/Deepgram TTS) are acceptable, but "robotic" over long stretches.
The ElevenLabs voice library (https://elevenlabs.io/voice-library):
- Search voices with filters: language (en/es), gender, age, accent
- Listen to each one and pick 3 candidates
- A/B test them on test calls with friends
Recommendation for US businesses (English): a female voice, 30-40 years old, "warm," with a neutral American accent. Pick a suitable voice in the ElevenLabs catalog.
Recommendation for Latin America (Spanish): Latin American Spanish, female, neutral accent (not Mexican, not Argentinian, but neutral).
Hour 2-3: Personality tuning
Through iterations: call, listen, adjust the prompt.
Typical problems:
| Problem | Fix in the prompt |
|---|---|
| Too formal | "Use a casual, first-name tone if the caller sounds young" |
| Replies too long | "25 words max per turn" |
| Keeps repeating the caller's name | "Use the name only when confirming the appointment, no more often" |
| "Sorry to bother you" | "Never apologize without a reason" |
| Stuttering / humming | Lower the temperature to 0.2-0.3 |
Hour 4: Latency optimization
Target: < 1 second from the end of the caller's turn to the start of the agent's reply.
What affects it:
- STT latency: depends on the provider and the recognition model
- LLM latency: Haiku is faster than Sonnet, and the bigger models are slower still
- TTS latency: depends on the voice model (turbo and flash variants are faster)
Measure the delay in your own test calls.
A speed hack: for short replies (FAQs, confirmations), switch to Haiku. For booking and complex intents, use Sonnet.
In Vapi this is done with model.fallbackModels:
{
"model": {
"provider": "anthropic",
"model": "claude-sonnet-5-5",
"fallbackModels": ["claude-haiku-4-5"]
}
}Hour 5: Edge cases: interruptions, silence, accents
Interruptions (the caller talks over the agent):
{
"responseDelaySeconds": 0.4,
"llmRequestDelaySeconds": 0.1,
"numWordsToInterruptAssistant": 2
}Silence (the caller says nothing):
{
"silenceTimeoutSeconds": 7,
"voicemailDetectionEnabled": true
}Accents: if the business is in Latin America with customers from Venezuela / Argentina / Colombia, test the Deepgram language code es (neutral) against es-419 (Latin America).
DAY 5: Integration + edge cases
Goal for the day: a real phone number + integrations + a full production checklist.
Hour 1: Phone number setup
# Sign up at twilio.com
# Buy a number in the US/Ecuador/wherever you need
# Price: a monthly fee for the number + a per-minute fee (see Twilio's rates)
# In the Vapi dashboard → Phone Numbers → Add Twilio Number
# Enter:
# - Twilio Account SID
# - Twilio Auth Token
# - Phone Number (E.164 format: +1... or +593...)
# Link the number to your AssistantCall the number you bought from your own phone: your agent should answer.
Hour 2-3: Real systems integration
The client uses their own Google Calendar / Google Sheets / CRM. You connect through a webhook on your backend:
// Webhook for every completed call
app.post('/vapi-webhook', async (req, res) => {
const { type, call, transcript, summary } = req.body;
if (type === 'end-of-call-report') {
// Write to Google Sheets (the client sees the log)
await sheets.append({
spreadsheetId: CLIENT_SHEET_ID,
range: 'Calls!A:F',
values: [[
call.startedAt,
call.endedAt,
call.customer?.number,
summary,
call.cost,
transcript.length
]]
});
// If it was a booking, send a confirmation by email to the business owner
if (call.toolCalls?.some(t => t.name === 'book_appointment')) {
await sendNotification(`New appointment: ${summary}`);
}
}
res.json({ ok: true });
});Hour 4: Edge cases playbook
Prepare responses for 5 awkward scenarios:
An angry caller: "Where's my order?! I've been calling for three days!" → Agent: "I understand, I'll pass this to the manager right now. Let me take your number for an urgent callback"
Language switch: the caller starts in Spanish and switches to English → System prompt: "If the caller switches languages, follow them"
Can't understand the agent (bad connection): says "what? say that again" → Agent: "Sorry, I'm having trouble hearing you. If you'd like, I can call you back later"
Spam/a robot on the line: → Detection: if there's silence > 5 sec 3 times in a row → end the call
The caller asks for a person: "put me through to a real person" → Tool call:
transfer_to_human(reason="customer_requested")
Hour 5: Production deployment checklist
DAY 6: Customer onboarding
Goal for the day: the client is signed, the agent is live on their number, the first real calls are coming in.
Hour 1-2: Onboarding call
A 1-hour video call with the client. Show them:
- Live demo: call while they watch and show how it works
- Dashboard: a Google Sheet with the history of every call (they can see it)
- Customization options: what can and can't be changed
- Pricing: the agreed monthly amount ($500 in the example), first week free (trial)
- Contract: a simple 1-page document (email + a reply saying "I agree")
Hour 3: Knowledge ingestion
Collect from the client:
- Business hours (exact, including holidays)
- Services + prices (if they can be quoted, or "we'll confirm at the visit")
- FAQs: what they actually hear every day
- A list of services they DON'T offer (prevents wrong expectations)
- Name and contact of the live person for transfers
- Brand voice preferences: formal / informal
Write all of it into the system prompt (Day 3 format). 30-45 minutes of work.
Hour 4: Tracking dashboard
The client needs to see that the agent is working. The simplest option is a shared Google Sheet:
| Time | Duration | Phone | Outcome | Transcript |
|---|---|---|---|---|
| 14:23 | 2:14 | +593... | booking_confirmed | [link] |
| 15:47 | 0:45 | +593... | hours_question | [link] |
| 16:12 | 4:33 | +593... | transferred_to_human | [link] |
The advanced option (week 2+): a simple Next.js dashboard on Vercel. But for Day 6, a Google Sheet is enough.
Hour 5: Go live
- Switch the Twilio routing from the current setup to your agent (or the client forwards their calls)
- For the first 24 hours, stay close to your phone
- If something breaks, fall back to the client's old number (have a rollback ready)
Agree on a 6-hour check-in: call the client and find out how the first calls went.
DAY 7: Refinement + scale
Goal for the day: the agent is stable, the first invoice is sent, the plan for Week 2 is ready.
Hour 1-2: Review the first 20 calls
Open all the transcripts. Look for patterns:
- Where did Claude hallucinate? ("Said we do braces, but we don't")
- Where did a call not wrap up? (the caller hung up halfway through)
- Where did a transfer to a person go wrong? (sent to the wrong place / didn't give a heads-up)
- Where did a booking fail? (Calendly returned an error and the agent didn't handle it gracefully)
Every problem = a patch to the system prompt or a tool.
Hour 3: Tune prompts based on real conversations
The most valuable data = real transcripts. Use them for:
- Adding to the FAQ what callers actually ask
- Removing from the prompt what nobody asks (saves tokens)
- Refining the personality based on live reactions
Hour 4: Invoice + retainer
Send the first invoice for the agreed amount. Payment method:
- US / Canada: Stripe (easy) or Wise
- Latin America: PayPal or a local bank
- Other countries: choose a payment method based on the laws and available services in your country and the client's, taking currency and sanctions restrictions into account
Set up monthly recurring billing: an automatic charge on the 1st of each month.
Hour 5: Plan Week 2
You have:
- 1 working voice agent
- 1 paying client
- ~20 transcripts with insights
- A reusable Vapi template
The plan for Week 2:
- Mon: Outreach to 10 new SMBs (use the Day 1 template)
- Tue: Refine your pitch based on what you learned (now you have a case study with numbers)
- Wed-Thu: Demo calls with prospects
- Fri: Close 1-2 new clients
Your growth pace depends on your hours for support and on market demand: there are no fixed benchmarks for the number of clients here.
Real economics
Setup cost (one-time per client, the author's time estimate)
| Item | Time | Cost |
|---|---|---|
| Outreach + sales | 5h | $0 |
| Vapi configuration | 8h | $0 |
| Custom prompt + tools | 6h | $0 |
| Integration (Calendly, Sheets) | 5h | $0 |
| Voice tuning | 3h | $0 |
| Onboarding | 3h | $0 |
| Total per client | 30h | $0 cash |
Variable cost per client per month
Avg calls/month: N (estimate it together with the client) Avg duration: M minutes Total minutes: N × M Cost per minute: at your rates (see the "Stack and economics" section) Variable cost: Total minutes × Cost per minute + Twilio number: per their rates + ElevenLabs sub: per their rates (can be shared across clients) --- Per-client cost: the sum of the lines
Revenue per client
Margin = the price you agreed on with the client, minus the variable cost and a share of your fixed costs. Calculate it with your own rates and the client's data: there are no universal numbers.
Scale
As your number of clients grows, so does the time spent on monitoring, prompt edits and support. The limit for one person is set by that time. When it runs out, bring in a helper for onboarding and monitoring, or revisit your price.
Common pitfalls
| Day | Pitfall | Safeguard |
|---|---|---|
| Day 1 | Targeting the wrong niche (pizza < dentist) | Filter for LTV above the price of the service |
| Day 1 | "AI revolution" in the pitch | A specific pain point + numbers |
| Day 2 | A first prototype that's too complex | Start simple with 1 intent, then expand |
| Day 3 | System prompt > 800 words → confusion | Keep it to 300-500 words, move the FAQ into tools |
| Day 3 | Hardcoding prices that change | "Confirmed at booking" for anything that changes |
| Day 4 | Default Vapi voice = "robot" → the caller thinks it's spam | A premium ElevenLabs voice is mandatory |
| Day 4 | Latency >2 seconds | Haiku for FAQs, Sonnet only for complex cases |
| Day 5 | Deploying without stress testing | 10 test calls with different scenarios are mandatory |
| Day 6 | The client doesn't understand what they're buying | A live demo > slides |
| Day 6 | No rollback plan | A backup to the client's old number is ready |
| Day 7 | No transcript review | A weekly review is mandatory, otherwise quality drifts |
| Day 7 | Price too low | Calculate from your costs: a price below them means working at a loss |
What you have at the end of Day 7
✅ A live voice agent answering real calls 24/7 ✅ Your first SMB client connected (payment terms agreed) ✅ A dashboard (Google Sheet) with transcripts of every call ✅ A reusable template: the next client goes faster ✅ An outreach playbook with your real response rates ✅ Real economics: calculations based on your first client's real numbers
And most importantly: you have a template for a case study with numbers for your next prospects: "[Clinic]: in the first month, the agent took [N] calls that used to be missed, and [M] of them turned into appointments." Use only the client's real data, and only with their permission.
Tools and resources
- Vapi: a voice agent platform (starter credits for testing, terms on the site)
- Twilio Phone Numbers: buying and setting up real numbers
- Calendly API: booking integration
- ElevenLabs Voice Library: a catalog of premium voices
- Deepgram: one of the popular STT services for real-time conversations
- Claude Console: Claude API keys and monitoring
- Vercel Edge Functions: hosting for webhooks (a commercial project needs a paid Vercel plan; Cloudflare Workers work too)
- Cal.com: an open-source alternative to Calendly if the client wants to self-host
Key takeaways
Don't build a universal voice agent. Build a specialized worker for one niche and one business. A dentist doesn't buy "AI." They buy "we don't miss calls." Sell the result, not the technology.
The economics only work if one customer brings the business noticeably more than your service costs (LTV above the price of the agent). Dental offices usually fit, pizzerias usually don't. Filter prospects by this criterion on Day 1, or you'll reach Day 7 with a contract that doesn't pay off.
Setup time drops with each new client: the template, reused prompts and accumulated FAQs create a compound effect. You'll see how long each next client takes on your own projects.
Related lessons
- First clients: choosing your first clients and target personas
- Voice AI agents: Vapi, Retell, Bland.ai: Vapi setup in detail (advanced configuration)
- Real-time AI: real-time AI and latency optimization patterns
- Call Support AI: Vapi + Bland.ai: voice agents in customer support: how they work and how they're paid for
- Build-Along: AI Consulting Practice: the next Build-Along
Next lesson
The mark stays in this browser only and is never sent anywhere. My progress