Outbound sales campaign
Take a list of cold or stale leads, dial them with an AI agent that re-qualifies and books demos straight into your sales team's calendars. Concurrency-paced so you don't blow through your trunk limits; outcomes auto-tagged by intent so you can see what worked.
What you'll build
- A contact list uploaded from CSV (or pulled from your CRM).
- A voice assistant scripted for re-qualification.
- A calendar pool shared across your sales reps.
- An outbound campaign that paces calls and tags outcomes.
- An intent library that classifies each call (
qualified_lead,not_interested,bad_number,callback_requested).
Step 1 — Upload the contact list
- Open Outreach → Contacts.
- Click Import CSV. At minimum:
first_name,last_name,phone. Add any custom fields you want the agent to reference (e.g.last_product_viewed,signup_date). - Tag the import (e.g.
q4-stale-trials) so you can target this batch in the next step.
Step 2 — Build the qualification assistant
-
Build → Assistants → Add assistant.
-
Pick
gpt-4ofor outbound work — empathy and improvisation matter when you're cold-calling. -
System prompt:
You're calling former trial users of Acme CRM who let their trial expire 30+ days ago. Your goal is to re-engage and, if they seem interested, book a 15-minute demo with a rep this week.
Open with: "Hi
{{contact.first_name}}, this is Maya from Acme CRM — do you have 30 seconds?"If they say no: thank them, offer to text a recap, end the call. If they say yes: ask one question about why the trial didn't convert. Listen. Then offer a 15-minute demo with a specialist. If they accept, check the calendar pool and book.
Never push past two attempts to schedule. Never quote pricing — say "your demo specialist will walk through pricing live."
-
Pick a voice. For outbound, slightly warmer pacing performs better than the receptionist preset.
Step 3 — Build the intent library
- Build → Library → Intents → Add intent.
- Add at least these intents — each is a name + 1-2 line description
the LLM uses to classify the call:
qualified_lead— caller engaged, asked questions, agreed to a demo or showed strong interest.callback_requested— caller wants to talk later, gave a time.not_interested— explicit decline, no future interest.bad_number— wrong person or non-working number.
- Attach the intent set to the assistant.
Intents fire at conversation close and become a tag on each call record — invaluable for slicing campaign performance later.
Step 4 — Set up the demo calendar pool
A calendar pool lets the agent treat several reps' calendars as one bookable resource and spread demos across them.
- Automation → Calendar Pools → Add pool.
- Connect each demo rep's Google Calendar.
- Use least-busy distribution so demos spread evenly.
- Set 30-minute slots with a 15-minute buffer.
Link the pool on the assistant so the agent can offer real available slots in real time.
Step 5 — Launch the campaign
- Open Outreach → Campaigns → New campaign.
- Pick the contact tag from Step 1 (
q4-stale-trials). - Pick the assistant from Step 2.
- Configure pacing:
- Concurrent calls — start low (e.g. 3) and ramp once you've seen the agent perform on real calls.
- Calling window — local time per contact (e.g. 9am–6pm in each contact's time zone).
- Retries — up to 2 attempts per number, 24 hours apart.
- Click Start. The campaign queues calls and respects pacing automatically.
Step 6 — Monitor and tune
- Engagements → Conversations —
filter by campaign + intent. Listen to a sample of
qualified_leadandnot_interestedcalls. Iterate on the system prompt and intent definitions based on what you hear. - Calendar pool — check that bookings are spreading across reps evenly. If one rep is getting all the demos, switch the pool from least-busy to round-robin.
What to do next
- Auto-route qualified leads to Slack — add a
Workflow on the
qualified_leadintent that fires acall_webhookto your Slack incoming-webhook URL. - Sync outcomes to your CRM — connect HubSpot or Zoho and write the call disposition + intent back as a contact activity.
- A/B-test scripts — clone the assistant, change the opener, run
half the list through each. Compare
qualified_leadrates in the conversations dashboard.