Outbound Sales
Qualify cold leads from a CSV. Book demos. Handoff hot leads to a human.
A campaign that calls a list of prospects, qualifies them with 2-3 questions, books a demo with the qualified ones, and pushes everything to your CRM.
Goal
- Call cold leads from a CSV
- Open with a friendly personalized intro
- Disqualify if they're not the buyer / don't have budget
- For qualified leads: book a 30-min demo slot
- Save lead status to your CRM via webhook
Recommended preset
Premium — gpt-5.4 + Deepgram nova-3 + ElevenLabs Sarah. More expensive but you only pay per minute, and the voice quality directly affects pickup → qualification conversion.
For Indian-language outreach: Premium (India) variant.
System prompt (copy-paste)
You are Arjun, a sales development rep at CloudSync — we sell project-management software to mid-size IT consultancies (50-500 people).
You're calling {{first_name}} at {{company}}. Their LinkedIn says they're a {{title}}.
Your job, in order:
1. Open warmly: "Hi {{first_name}}, this is Arjun from CloudSync. Got 2 minutes?"
2. If they say no or sound busy: "Totally understand — can I send a quick email instead?" then use the save_lead tool with status=callback_requested.
3. If they say yes:
a. Confirm they're the right person: "Are you the one who picks productivity tools for {{company}}'s engineering teams?"
b. If not: ask who is, save their name and end politely.
4. Qualify in this exact order:
- Pain: "What's slowing your team down with [their current tool] today?"
- Budget: "Are you currently evaluating new tools, or is this more of a future conversation?"
- Timing: "When would you ideally roll something new out?"
5. Decide:
- QUALIFIED (has pain + budget + Q1/Q2 timing): "I'd love to show you a 20-min demo — what's a good time this week or next?"
Get the slot, then call save_lead with status=qualified + slot=<time>.
- NOT QUALIFIED: "Got it, doesn't sound urgent. Mind if I check in next quarter?"
Call save_lead with status=not_now.
6. Always thank them by name before hanging up.
Hard rules:
- NEVER spend more than 4 minutes on a call.
- If they say "remove me from your list" or "don't call me again" — IMMEDIATELY say "I'm sorry, I'll take you off the list right now" and call save_lead with status=opt_out. Don't argue.
- Never invent product features or prices. If asked, say "I'll have our solutions consultant share that on the demo."
- Don't read the variables aloud — just speak the values naturally.
Tone: warm, confident, brief. Match the prospect's energy. Stop talking the moment they start.Welcome message
Hi {{first_name}}, this is Arjun from CloudSync. Got 2 minutes?Dynamic variables (per lead, from the CSV)
Your campaign CSV needs these columns:
phone,first_name,company,title
+919876543210,Arjun,Acme Industries,Engineering Manager
+919876543211,Priya,BlueLeaf Pvt Ltd,VP Product
+919876543212,Vivek,Cool Foods,CTOEvery column becomes a {{variable}}. Required: phone. Everything else is optional.
Settings
| Setting | Value | Why |
|---|---|---|
| Max call duration | 240 sec | Sales calls run long; cap to control cost |
| Allow interruptions | On | Prospects will cut in often |
| Enable voicemail detection | On | Save 40% of cost on calls that hit voicemail |
| Voicemail message | (see below) | Leave a short callback ask |
| Enable call recording | On | Train + review qualifications |
| Enable post-call analysis | On | Auto-extract qualification status |
Voicemail message
Hi {{first_name}}, this is Arjun from CloudSync. I was hoping to chat about CloudSync for {{company}}. I'll send a quick email follow-up, but if you'd rather chat, call us back at +91-XXXXXXXXXX. Thanks!Tools
1. save_lead (HTTP tool)
Posts the qualification outcome to your CRM.
Configure → Actions → HTTP Tools → + Add
| Field | Value |
|---|---|
| Name | save_lead |
| Description | "Save the lead outcome to the CRM. Call this exactly once at the end of every call, after the qualification decision is made." |
| Method | POST |
| URL | https://crm.yourcompany.com/api/leads |
| Headers | Authorization: Bearer SECRET |
| Parameters | status (enum: qualified/not_now/callback_requested/opt_out, required), pain (string), budget_signal (string), slot (string), notes (string) |
| Silent | On (don't read the API call aloud) |
| Wait message | (leave blank — silent) |
2. Post-call analysis (auto-extracts everything to your webhook)
Configure → Advanced → Post-Call Analysis → On
Schema:
| Name | Type | Required | Description |
|---|---|---|---|
qualified | boolean | yes | Did the lead express budget + timing match? |
pain_point | string | no | What slowing-down problem did they mention? |
current_tool | string | no | What tool are they using today (if mentioned)? |
demo_slot | string | no | If they booked a demo, what time? |
disposition | enum | yes | One of: qualified / not_now / callback_requested / opt_out / no_decision |
Plus:
- ✓ Include summary
- ✓ Include sentiment
- ✓ Success criteria: "The agent qualified the lead and either booked a demo OR captured a callback time."
Set the org default webhook URL under Settings → Webhook so qualified leads auto-fire into your CRM.
Campaign setup
- Campaigns → + New Campaign
- Name: "Q2 mid-size IT outreach"
- Pick this agent + your outbound phone number
- Max concurrent: 5 (good middle ground — won't trip your provider rate limits)
- Schedule: Mon-Fri, 10 AM-6 PM, in your prospects' timezone
- Retry policy: 3 attempts, 2 hours apart, retry on
no_answer+busy - Webhook URL: your CRM endpoint (will receive
campaign.lead_completedevents) - Upload your CSV
- Start
How to test (before sending to 1,000 real prospects)
In the agent page, click Simulate (top right).
Mock turn 1 (user): "Hi, who's this?" Mock turn 2 (user): "I'm the VP of Product, yeah." Mock turn 3 (user): "Our biggest issue is everyone using different task trackers." Mock turn 4 (user): "We have budget approved for Q2 — about 100 seats." Mock turn 5 (user): "Friday at 3 PM works."
Run simulation. Confirm the agent:
- Asks pain → budget → timing
- Books the slot
- Says it'll call
save_lead
Save this as a test case so you can re-run after every prompt edit.
Typical cost
A 3-minute qualified call:
LLM (gpt-5.4, ~1800 tokens): ₹4.50
STT (3 min): ₹1.50
TTS (ElevenLabs Flash, ~900 chars): ₹3.40
SIP (3 min): ₹4.23
Post-call analysis (gpt-4o-mini): ₹0.05
─────────────────────────────────────
Total: ~₹17.50/callAt a 60% answer rate × 30% qualification rate × 50 calls/day = ~9 qualified leads/day for ~₹800.
Common mistakes
| Mistake | Fix |
|---|---|
| Agent over-talks the prospect | Add to prompt: "Stop talking the moment the prospect starts — even mid-sentence." |
| Agent never disqualifies | The 3-step qualification (pain → budget → timing) is too soft. Be explicit about what "qualified" requires. |
| Voicemail rate is 80% | Calling outside your prospects' working hours. Switch dialing window to their local timezone. |
| Webhook didn't fire | Check Settings → Webhook → Default URL. Webhook only fires if the analyzer ran (postCallAnalysis must be on). |
| Opt-out wasn't honored | Confirm save_lead is called with status=opt_out AND you've added the number to your DNC list. |
What's next
- Campaigns deep-dive — scheduling, retries, DNC
- Dynamic variables — per-lead personalization
- Post-call analysis — structured data extraction
- Webhooks — CRM integration