Reach out with campaigns

Updated July 2026

A campaign lets your agent reach a whole list of people for you — by phone call, WhatsApp, or email. Upload your contacts, pick the agent, and Qalyb works through the list while you watch progress live.

WhatsApp campaigns are coming soon:
The WhatsApp channel is pending Meta app review, so WhatsApp campaigns are not yet available in the dashboard — voice and email campaigns are. The WhatsApp parts of this page describe how it will work once it launches.

A campaign takes a list of contacts and reaches every one of them through a single channel, with the same agent handling each conversation. Qalyb dials the numbers, sends the WhatsApp messages, or sends the emails — then tracks each contact's progress and hands any reply straight back to the agent. You'll find campaigns under Campaigns in the Workspace group of the dashboard sidebar.

Plans & roles:
outbound campaigns are included on the Pro, Ultra, and Enterprise plans. Admins and members can create and run campaigns; only admins can delete them.

What goes into a campaign

Every campaign — whatever the channel — is built from the same four ingredients. You decide who to reach, who reaches them, and when:

  • Your contacts come from a CSV file you upload. Qalyb cleans the list for you — phone numbers are converted to the international E.164 format, email addresses are checked, and invalid, duplicate, and assumed entries are flagged — so no contact is reached twice.
  • A sender is who the outreach comes from: a phone number for voice, a WhatsApp channel for WhatsApp, or an email inbox for email.
  • An agent runs the conversation. If your agent's prompt has required variables, each one needs a matching column in your CSV so every contact gets a personalized conversation.
  • Send rules control timing — send now or schedule for later, keep calls inside an operating-hours window, retry failed voice calls, and (for messaging) add follow-up nudges when a contact doesn't reply.

Once launched, Qalyb works through the list in the background. A campaign marks itself done on its own when every contact has reached a final outcome — connected or exhausted on voice, replied or expired on messaging.

Extra CSV columns become variables:
any column beyond the destination is carried through as per-contact data. Reference it in the agent prompt or message template with {{column_name}} placeholders to personalize each conversation.

Creating a campaign

Campaigns are built in a step-by-step wizard. Click New Campaign at the top-right of the Campaigns page to open it — the wizard adapts to the channel you choose, with five steps for voice and six for WhatsApp and email. Create a campaign walks through every screen, and Contacts & follow-ups covers preparing your list.

app.qalyb.ai/campaigns/new
Screenshot: New Campaign wizard step 1 — three channel cards for Voice Call, WhatsApp, and Email
Step 1 of the New Campaign wizard: pick Voice Call, WhatsApp, or Email.
Default Country for local numbers:
for voice and WhatsApp campaigns, set a Default Country so locally formatted numbers convert correctly — a Saudi 05xxxxxxx becomes +966xxxxxxx. GCC countries are listed first. Numbers that can't be converted block the launch until you fix or remove them.

Calls vs. messages

The channel you pick changes more than the wizard — it changes how the campaign runs and what you see on its detail page. There are two families: voice campaigns place live phone calls, and async campaigns (WhatsApp and email) send messages and wait for replies.

AspectVoiceAsync (WhatsApp / Email)
SenderPhone NumberWhatsApp Channel or Email Inbox
Wizard length5 steps6 steps (adds a Message step)
Per-contact trackingCall Log with attemptsDelivery Log with delivery status
Timing controlsOperating Hours + Retry policySend Window + Campaign Expiry + Follow-up cadence
Reaching a contact againAutomatic retry on failed / no-answerFollow-up nudges until reply, opt-out, or bounce
Final outcomesConnected, no-answer, busy, voicemail, failed, max retriesDelivered, read, replied, no response, opted out, bounced, failed

Voice campaigns

A voice campaign dials each contact in turn within your operating hours. The detail page shows four KPI cards (Total Contacts, Completed, Progress, Pick-up Rate), a progress bar, a summary of the campaign's settings, and a Call Log with one row per contact — status, phone, attempts, and last attempt. Rows with multiple attempts expand to show each attempt's status, duration, and time. While the campaign is active you can retry an individual failed or no-answer call, and the list refreshes itself every five seconds.

WhatsApp and email campaigns

WhatsApp and email campaigns send a message and then track its journey. The detail page shows KPI cards for Total Contacts, Sent, Delivered, and Replied, plus a Delivery Funnel visualizing Sent → Delivered → Read → Replied, with chips for final outcomes like No response, Opted out, Bounced, and Failed. The table becomes a Delivery Log showing each recipient's status, follow-ups sent, and last sent time. A reply ends the journey: it hands the contact to the agent conversation and stops any pending follow-ups. For email, a replied row links straight to the conversation in your inbox.

app.qalyb.ai/campaigns/cmp_abc123
Screenshot: async campaign detail page — KPI cards and a Sent to Delivered to Read to Replied delivery funnel with terminal-outcome chips
A WhatsApp or email campaign detail page: delivery funnel plus a per-recipient Delivery Log.
WhatsApp templates must be pre-approved:
WhatsApp campaigns send approved message templates. Create and approve them in WhatsApp Business Manager first, then enter the exact Template Name and Language Code in the wizard — there is no in-product template picker yet. Each follow-up step needs its own approved template, because WhatsApp's 24-hour messaging window requires it. See the WhatsApp guide for setup.

The campaigns list

The Campaigns page lists every campaign in your organization, ten per page. Each row shows the campaign name and description, a status badge, a channel pill, a live progress bar (completed contacts over total, with a percentage), and the last-updated date. Click any row to open that campaign's detail page. If you have no campaigns yet, the page invites you to create your first one.

app.qalyb.ai/campaigns
Screenshot: campaigns list table with mixed statuses, channel pills, and progress bars
The campaigns list: status badge, channel pill, and a live progress bar per row.

What the statuses mean

StatusMeaning
queuedCreated and waiting to start — typically a campaign scheduled for later.
runningActively dialing or sending. The badge pulses and progress updates live.
doneEvery contact reached a final outcome. The campaign completed on its own.
cancelledStopped early. Queued and in-flight work was drained; pending follow-ups cleared.
Cancel, not pause:
there is no pause-and-resume — the only way to stop an active campaign is Cancel Campaign from the detail-page header. Cancelling marks all queued and in-flight contacts as cancelled and cannot be undone.

While a campaign runs

Most management happens from the campaign detail page. From the header you can Export the campaign's data (the file lands under Reports) and, while a campaign is queued or running, Cancel it. Voice campaigns additionally let you retry an individual failed call from its row in the Call Log.

Settings are locked while a campaign is active:
a campaign's configuration can only be edited once it is done or cancelled — changes are rejected while it is queued or running. Adding contacts after creation is currently supported for voice campaigns only.

For developers

Everything the dashboard does is backed by the campaigns API. Outbound campaigns are part of the campaigns.outbound entitlement, and the endpoints require the campaigns:read or campaigns:write permission.

List every campaign for your organization:

curl · bash
curl https://api.qalyb.ai/campaigns \
  -H "Authorization: Bearer sk-live-..."

Cancel an active campaign, draining its queued and in-flight work:

curl · bash
curl -X POST https://api.qalyb.ai/campaigns/cmp_abc123/cancel \
  -H "Authorization: Bearer sk-live-..."
EndpointWhat it does
POST /campaignsCreate a campaign (the body is channel-specific). Requires campaigns:write.
GET /campaigns/:idFetch one campaign with its stats and progress.
GET /campaigns/:id/callsPaginated per-contact rows — calls for voice, deliveries for async.
POST /campaigns/:id/calls/:callId/retryRe-queue a single failed or no-answer voice call on an active campaign.
POST /campaigns/:id/cancelCancel the campaign and drain queued and in-flight work.
DELETE /campaigns/:idDelete a campaign and its calls. Requires campaigns:delete (admin only); rejected while running or queued.
Was this guide helpful?