Outbound Campaigns


Bulk dialing for sales, notifications, and callbacks — with compliance, pacing, and recording built in.

TL;DR

  • What it is — a bulk outbound dialer that takes a contact list, paces calls at a rate you set, dials through a pool of phone numbers, bridges answered calls to an agent or a department, and automatically respects your do-not-call list.
  • Who it's for — admins running lead-qualification, callback, or notification campaigns at scale. The scheduler runs autonomously.
  • Top outcome — thousands of calls placed over hours or days at a predictable rate, each one compliant, recorded, and attached to the contact record in the CRM.

At a glance

Plan tierIncluded with every Lodgestory Voice plan.
Who can manageAccount Owners and Admins configure, start, pause, and cancel campaigns. Agents become bridge targets.
Dial modesCustomer-first — dial the customer, bridge an available agent on answer. Lower agent idle time, some abandonment risk. Agent-first — dial an agent first, then dial the customer, bridge when the customer picks up. Zero abandonment, higher agent idle.
Pacing1 to 20 calls per second, smoothly rate-limited.
Number rotationThree strategies — round-robin across your pool, random, or "same number for the same contact" so callbacks reach the right caller ID.
Retry policy1 to 5 attempts per contact with a configurable backoff.
ComplianceEvery dial checks your per-account do-not-call list. Uploads also flag contacts already on the list.
Business hoursCampaigns respect a business-hours window — no dialing outside it.
Top limitsUp to 50 concurrent calls per campaign. Up to 50 phone numbers in a campaign's rotation. Practical ceiling of hundreds of thousands of contacts per campaign.
APIPartner API available on request.

How to find it

Sidebar: Settings → Calling → [your account] → Outbound Campaigns.

Direct URLs:

  • List: /crm/settings/calling/{accountId}/outbound-campaigns
  • Create wizard: /crm/settings/calling/{accountId}/outbound-campaigns/new
  • Campaign detail: /crm/settings/calling/{accountId}/outbound-campaigns/{campaignId}

📸 [SCREENSHOT: campaigns-landing.png — campaigns list with status badges, progress bars, and active dial counters]

What are Outbound Campaigns?

The problem it solves

Manual click-to-call tops out at a few dozen calls per agent per day. Anything beyond — lead qualification, win-back, confirmation follow-ups, notification blasts — needs autonomous dialing. But naive auto-dialers break fast:

  • Rate limits cause provider-side call failures.
  • Compliance violations happen when you accidentally dial an opted-out number.
  • Abandonment — customers hanging up angry because no agent was ready — breaks customer trust.
  • Messy retry logic calls the same contact three times.
  • A crash loses state and contacts fall through the cracks.

Outbound Campaigns handles all of that. Two dial modes let you pick the trade-off that fits your operation. Built-in pacing prevents provider overload. A compliance layer checks your do-not-call list on every single dial. Retries follow a clear policy. And if anything ever stalls, the system automatically cleans up and keeps going.

What you get

  • Full campaign lifecycle — Draft, Scheduled, Running, Paused, Completed, Cancelled.
  • Contact list upload via CSV or API. Phone numbers normalize to international format automatically. Contacts already on the do-not-call list are flagged during upload.
  • Two dial modes:
    • Customer-first dials the customer, bridges an agent when they answer. Good for high-volume sales where a small abandonment percentage is acceptable.
    • Agent-first dials the agent, then dials the customer on a second line, and bridges when the customer answers. Zero abandonment — the agent is always on the line ready to greet. Agent idle time is higher.
  • Number rotation across a pool. Three strategies:
    • Round-robin spreads calls evenly across the pool.
    • Random picks any number from the pool.
    • Sticky by contact uses the same number for the same contact across retries, so a customer calling back reaches the caller-ID they recognise.
  • Smooth pacing — 1 to 20 calls per second, rate-limited so bursts don't overwhelm your provider.
  • Retry policy — up to five attempts per contact with a configurable backoff. Retryable outcomes (no answer, busy) retry; final outcomes (invalid number, rejected) don't.
  • Transfer target — after the customer answers (customer-first) or the agent answers (agent-first), bridge to a department queue, a specific agent, or a voice menu.
  • Recording on every call, retrievable from the caller's contact timeline afterwards.
  • Do-not-call enforcement on every single dial — even if a number was added to the list after the campaign started, it won't be called.
  • Self-healing scheduler — if a crash leaves a contact in an uncertain state, it's automatically cleaned up within a minute.
  • Live dashboard — counts per status, current dials in flight, pacing bucket, do-not-call blocks, abandonment rate.
  • Pause and resume — stops new dials while letting in-flight ones complete; resume picks up exactly where it left off.
  • Cancel — terminal; no new dials, in-flight completes gracefully.

How it's different

  • Two dial modes as a first-class choice. Most auto-dialers force customer-first. Pick the mode that matches your use case — customer-first for high-volume B2C lead-qualification, agent-first for B2B or VIP flows where abandonment is unacceptable.
  • Smooth pacing that adapts to load. The dialer doesn't queue up "catch-up" calls after a quiet moment — you get the rate you asked for without bursts.
  • Orphan clean-up built in. A scheduler that can crash and resume without dropping contacts is a non-negotiable at scale; Lodgestory's handles it automatically.
  • Sticky-by-contact number rotation. Customers returning a missed call reach the same caller ID they saw — essential for continuity and trust.
  • Zero-abandonment agent-first mode. For campaigns where every answered customer deserves an immediate human, the agent is already on the line before the customer's phone rings.

Customer scenarios

  • Ten thousand-contact lead-qualification campaign. Four phone numbers in round-robin, 5 calls per second, 3 retries with a 2-hour backoff, bridge into the Sales department. Business hours 9am–7pm weekdays. Thirty-five thousand do-not-call entries pre-checked. Drains in about four hours.
  • VIP callback campaign using agent-first. Three hundred high-value contacts, 2 calls per second, up to 5 retries, bridging specifically to the agent who last spoke to the contact. Zero abandonment tolerated.
  • Post-booking confirmation blast. Five hundred recent bookings, customer-first, bridging to a voice menu that plays "Press 1 to confirm, 2 to cancel." No agent involvement — the system records the response and sends it back to the CRM.

How it fits with Lodgestory Voice

  • Phone Numbers provide the pool your campaign rotates through.
  • Departments and Agents provide the bridge target.
  • Voice Menus offer a no-agent destination for confirmation flows.
  • Call recordings land on every contact's timeline for later review.
  • The Calls workspace surfaces every campaign call in the unified history.
  • Per-account do-not-call list is enforced universally — campaigns, manual dials, everything.

Core concepts

TermWhat it means
CampaignA named dialing run with a contact list, pacing, retry rules, and a bridge target.
ContactA single recipient on a campaign. Each one has a phone number, an optional name, and custom fields.
Dial modeCustomer-first or agent-first — the classic dialer trade-off.
Number poolThe set of phone numbers a campaign rotates through for outbound caller ID.
Rotation strategyHow the pool picks the next number — round-robin, random, or sticky by contact.
PacingThe max calls per second the campaign will place, smoothly rate-limited.
ConcurrencyThe max simultaneous calls in flight for this campaign.
Retry attemptsHow many tries per contact before they're marked Failed.
BackoffThe wait between retries.
Transfer targetWhere an answered call gets bridged — a department, an agent, or a voice menu.
Do-not-call listThe per-account list of numbers that should never be dialed. Checked at upload and on every dial.
AbandonmentIn customer-first mode, a customer picks up but no agent was free. The call ends immediately. Aim for under 3% as an industry rule of thumb.

Campaign lifecycle

StatusWhat it means
DraftStill being configured — not yet scheduled.
ScheduledWill auto-start at a future time.
RunningActively dialing.
PausedNo new dials; in-flight ones complete.
CompletedAll contacts processed.
CancelledTerminal; cannot be resumed.

Contact status

StatusWhat it means
PendingNot yet dialed.
DialingA call is currently being placed.
RingingThe phone is ringing.
AnsweredThe contact picked up.
CompletedThe call finished successfully.
FailedAll retry attempts exhausted.
Retry queuedA retry is scheduled for a future time.
BlockedMatched the do-not-call list.
AbandonedCustomer-first only — the customer picked up but no agent was available in time.

Quick Start — run a 500-contact campaign in 20 minutes

Step 1 — Prepare your list

Download the sample CSV template (columns: phone number, contact name, custom fields). Fill it in with your 500 contacts using international phone format.

📸 [SCREENSHOT: campaign-qs-1-csv.png — sample CSV in a spreadsheet]

Step 2 — Create a campaign

Settings → Calling → [your account] → Outbound Campaigns → + New Campaign. A four-step wizard opens.

Step 3 — Basics

Name it "Spring 2026 lead-qual batch 1." Pick Customer-first. Set pacing to 3 per second and concurrency to 15.

📸 [SCREENSHOT: campaign-qs-3-basics.png — basics step with name, mode, pacing, concurrency]

Step 4 — Contacts and number pool

Upload your CSV. Any contacts on the do-not-call list are flagged with a warning. Pick four phone numbers for the rotation pool and set rotation to Round-robin.

📸 [SCREENSHOT: campaign-qs-4-contacts.png — CSV uploaded with DNC warning and number pool picker]

Step 5 — Routing and retry

Set the transfer target to the Sales department. Retries: 3 attempts with a 30-minute backoff. Recording: on. Business hours: account default.

📸 [SCREENSHOT: campaign-qs-5-routing.png — routing step with department picker and retry configuration]

Step 6 — Schedule

Pick a start time (at least 5 minutes in the future). Save as Scheduled.

Step 7 — Start

The campaign auto-starts at the scheduled time — or click Start to begin immediately. Status changes to Running; the scheduler begins dialing.

📸 [SCREENSHOT: campaign-qs-7-running.png — running campaign detail page with live counts]

Step 8 — Monitor

The detail page refreshes every few seconds:

  • Contacts in each status (Pending, Dialing, Answered, Completed, Failed).
  • Current calls in flight versus available agents in the target department.
  • Do-not-call blocks counter.
  • Abandonment counter (customer-first mode).

Step 9 — Pause, resume, or cancel

Use the buttons on the detail page. Pause stops new dials but lets in-flight complete. Resume picks up exactly where the scheduler left off. Cancel is terminal.

What's next

  • Review recordings on each contact's timeline.
  • Export the call-log CSV for campaign analysis.
  • Tune pacing or dial mode for the next campaign based on what you learned.

How it works

  • You upload a contact list, pick a dial mode, set pacing, and schedule the campaign.
  • Once running, the scheduler dials the next eligible contact every tick of its internal clock, respecting your pacing and concurrency limits.
  • Before every dial, the do-not-call list is checked — blocked numbers are skipped and marked.
  • In customer-first mode, the customer is dialed and an available agent is bridged on answer. In agent-first mode, the agent is dialed first and the customer is dialed on a second line once the agent picks up.
  • Every call is recorded, logged, and attached to the contact.
  • If the call fails for a retryable reason (no answer, busy), it's queued for retry at your configured backoff. Final failures end attempts for that contact.
  • If the scheduler or a provider ever stalls a call mid-flight, a self-healing cleanup resets the contact within a minute so nothing is permanently stuck.
  • Pause and resume don't reshuffle — the queue picks up exactly where it left off.

You set the rules; the scheduler runs.

Features in depth

Campaign list and detail

The list shows every campaign with its status, a progress bar of completed over total contacts, an active-dials indicator, and a start time. Clicking a campaign opens the detail view.

The detail view is a live dashboard:

  • Counts per contact status (Pending, Dialing, Ringing, Answered, Completed, Failed).
  • Current pacing level versus the configured rate.
  • Available agents in the target department.
  • Do-not-call blocks counter.
  • Abandonment counter (customer-first).
  • Recent-events stream of the latest dials.
  • Pause, Resume, and Cancel controls.

📸 [SCREENSHOT: campaign-detail.png — campaign detail dashboard with all live counters]

Four-step creation wizard

  1. Basics — name, dial mode, pacing, concurrency.
  2. Contacts and number pool — CSV upload with do-not-call auto-check, number picker with rotation strategy.
  3. Routing and retry — transfer target, retry configuration, recording toggle, business-hours override.
  4. Schedule and review — start time, review summary, save as Scheduled or Draft.

CSV upload

Validated at upload:

  • Phone numbers normalized to international format.
  • Duplicate detection within the CSV.
  • Up to around 200,000 rows per single upload; larger lists are handled via the API.
  • Custom fields passed through so they're available on the contact record.

Do-not-call management

A dedicated sub-page lists the do-not-call entries for the account: manual add, bulk upload, search, export. Campaigns check this list at upload time (flagging any matches) and again on every single dial (catching late additions).

Access it at /crm/settings/calling/{accountId}/dnc.

📸 [SCREENSHOT: dnc-list.png — DNC management with manual add and bulk upload buttons]

Pacing visualisation

A live bar on the detail dashboard shows how close the dialer is to its configured rate. Ramping campaigns show the bar filling smoothly as dialing spins up.

Recording playback

Every call's recording is retrievable from the contact's timeline in the Calls workspace — same place as recordings from inbound calls and manual click-to-call dials.

Roles & permissions

ActionAccount OwnerAdminUser
View campaignsYesYesRead-only
Create, edit, delete campaignsYesYesNo
Start, pause, cancelYesYesNo
Upload contactsYesYesNo
Manage do-not-call listYesYesNo
Be a bridge targetYesYesYes

Connections

  • Phone Numbers — the rotation pool for outbound caller ID.
  • Departments — the typical bridge target for answered calls.
  • Agents — agent-first campaigns dial an agent first; customer-first can also target a specific agent.
  • Voice Menus — a no-agent bridge target for confirmation flows.
  • Calls workspace — every campaign call appears in the unified history.
  • Contacts — campaign results attach to contact records automatically.

Limits a user will run into

LimitValue
Pacing1–20 calls per second
Concurrency per campaign1–50
Retry attempts per contact1–5
Contacts per campaignPractical ceiling of hundreds of thousands
Number pool per campaign1–50
Do-not-call entries per accountNo hard cap

Errors & FAQ

How do I choose between customer-first and agent-first?
Customer-first keeps agent idle time lower, but some customers will hear silence-then-drop when an agent isn't immediately available. Aim for under 3% abandonment. Use it for high-volume B2C where that's acceptable.

Agent-first puts the agent on the line first, so every answered customer gets an immediate greeting — zero abandonment. Agent idle time is higher since they're connected while the customer is dialed. Use it for B2B, VIP flows, or anywhere abandonment is unacceptable.

Why does my pacing show 3 per second but I'm seeing 1 dial every few seconds?
Concurrency is capping you. If max concurrency is 5 and there are already 5 calls in flight, the scheduler waits for one to complete before starting another.

What happens to contacts when I pause a campaign?
Nothing — they stay in their current status. Resume continues from the exact point the scheduler left off. The queue isn't reshuffled and no contacts are dropped.

Can I retry only the failed contacts from a previous campaign?
Not in place. Export the failed contacts as CSV and start a new campaign with that subset.

How does pacing interact with my provider's rate limits?
If you dial faster than your provider allows, you'll see failed calls from the provider side. Reduce pacing or expand the number pool — more numbers often translate into more concurrent-call headroom with the provider.

Can I change pacing mid-run?
Yes. Edit and save; the new rate takes effect on the next tick.

What's the difference between "sticky by contact" number rotation and the sticky-agent feature in departments?
Sticky by contact keeps the same outbound caller ID on retries, so callbacks from the customer reach the number they recognise. Sticky agent routes a repeat caller back to the agent they last spoke to. Combine both for full continuity.

Do campaigns respect business hours?
Yes. Dials outside the business-hours window are simply queued until the next open window.

Troubleshooting

SymptomLikely causeFix
Campaign won't startNumber pool is empty or no transfer targetAdd numbers or fix the target
Contact stuck in Dialing for several minutesA rare scheduler or provider stallThe self-healing cleanup resets it within a minute; admins can also reset manually
High abandonment in customer-firstPacing too high relative to agent availabilityReduce pacing, add agents to the target department, or switch to agent-first
Calls never bridge after the customer answersTarget department has no available agentsFix the target or pause the campaign
Do-not-call blocks appear highMany numbers in the upload match the listExpected — check the blocks counter; accept or curate the list

Changelog

  • Apr 2026 — Verified in production with customer-first and agent-first modes, per-account do-not-call list, and self-healing scheduler.
  • Feb 2026 — Per-tenant do-not-call registry added.

Related modules

  • Phone Numbers — the number pool for outbound caller ID.
  • Departments — the primary bridge target.
  • Agents — agent-first dialing and per-agent targeting.
  • Voice Menus — no-agent bridge target for confirmation flows.
  • Contacts — the source of your campaign lists and the destination for campaign results.
  • Voice product hub — the overall picture.