Saaya Campaigns

Million-call scale. One playbook.

Bulk outbound voice, WhatsApp, and SMS, driven by the same Saaya agent runtime. Upload a CSV, define a channel cascade, set retry and time-of-day rules, hit launch. Live ops dashboard watches every dispatch in flight.

What it is

A dispatch engine, not a dialer.

Saaya Campaigns turns a CSV into a million conversations without anyone touching a phone. Voice first, with WhatsApp and SMS as cascading fallbacks, same agent definition, three channels, automatic hand-off based on reachability, consent, and outcome.

It is not a dumb dialer. The runtime is the same Saaya Agent that picks up your inbound calls, versioned, knowledge-grounded, tool-using, multilingual. The only difference is who initiates the conversation: this time, it is you.

Production discipline is baked in. Retry policies on busy/no-answer/voicemail. Time-of-day windows by region. Opt-out lists and DNC registries respected automatically. Throttle and pacing per region so you never trip carrier rate-limits. Every state change emits a webhook and a row in the live ops dashboard.

Capabilities

What ships with Campaigns.

The pieces every outbound program needs in week one, and the ones most teams discover they need in week six.

CSV ingest with templates

Drop a CSV with phone, name, and any custom fields. Map columns to template variables. Validate against E.164, region, and DNC lists before a single call goes out.

Channel cascades

Voice first. If unreachable, fall through to WhatsApp. If still no answer, SMS. Configure the order, the wait between hops, and the per-hop opt-out behavior.

Retry & time-of-day windows

Per-outcome retry rules, busy, no-answer, voicemail, machine-detected. Region-aware time-of-day windows so you never call a US lead at 2am India time.

Live ops dashboard

Pacing, completion, delivery, opt-out, and conversion in real time. Drill into any in-flight call, see live transcript, override or pause without redeploying.

Opt-out & DNC

Per-org opt-out list, plus carrier DNC registries by region (TCPA, DPDP, GDPR, OFCOM). Suppression is automatic; an opt-out on voice propagates to WhatsApp and SMS instantly.

Throttle & rate-limits per region

Concurrency caps and per-second pacing per region and per carrier. Prevents carrier blocks, smooths spikes, and keeps deliverability scores healthy across millions of dispatches.

How it works

Three steps from CSV to in-flight.

Most teams launch their first production campaign on day one.

  • 01

    Upload list

    Drop a CSV. Saaya validates phone numbers (E.164), de-duplicates, scrubs against opt-out and DNC lists, and maps custom fields to template variables.

  • 02

    Configure cascade

    Pick the agent, the channel order (voice → WhatsApp → SMS), retry rules, time-of-day windows, and concurrency caps. Preview a dry-run against five rows.

  • 03

    Launch & monitor

    Hit launch. Watch the live ops dashboard, pacing, completion, conversion. Pause, throttle, or amend mid-flight. Webhooks fire on every state change.

  • For developers

    Launch a campaign from code.

    The dashboard and the API do the same things. Use whichever fits your workflow.

    TypeScript SDK
    import { saaya } from '@saaya/sdk'
    
    // 1. Create the campaign
    const campaign = await saaya.campaigns.create({
      name: 'q2-renewal-outreach',
      agentId: 'agent_renewals_v3',
      list: { type: 'csv', url: 's3://acme-leads/q2.csv' },
      cascade: [
        { channel: 'voice',    waitAfterSeconds: 0 },
        { channel: 'whatsapp', waitAfterSeconds: 3600 },
        { channel: 'sms',      waitAfterSeconds: 14400 },
      ],
      retry: {
        busy:      { maxAttempts: 3, backoffMinutes: 30 },
        noAnswer:  { maxAttempts: 2, backoffMinutes: 60 },
        voicemail: { maxAttempts: 1, backoffMinutes: 0  },
      },
      windows: { 'US': '09:00-19:00', 'IN': '10:00-20:00' },
      pacing:  { concurrency: 500, perSecond: 50 },
    })
    
    // 2. Start it
    await saaya.campaigns.start(campaign.id)
    
    // 3. Watch it
    const live = await saaya.campaigns.list({ status: 'running' })
    Pricing

    On every tier, what you get.

    Campaigns sits on top of the Agents runtime. Voice and WhatsApp minutes are billed at usage rates; the dispatch engine itself is free below the included quota.

    Free

    Not available on Free. Campaigns require Growth or higher.

    Growth

    Up to 50K dispatches/month · channel cascades · retry & TOD rules · live ops dashboard · opt-out & DNC · webhooks on every state change.

    Enterprise

    Million-call scale · dedicated carrier routes · region-pinned dispatch · BYO SIP trunk · SOC2 + DPA · priority support during launches · 99.95% SLA.

    See it in context

    Pair this with the right Solution.

    FAQ

    Frequently Asked Questions.

    Final step

    Launch your first campaign.

    CSV in, calls out, in under thirty minutes. Growth and Enterprise plans include the dispatch engine; voice and WhatsApp minutes billed at usage.

    Get started with CampaignsSee it on Sales

    Free plan · No credit card · 15-min setup