Campaigns

Run outbound calling campaigns at scale — upload a contact list, pick an agent, and Nerva dials each contact for you.

A campaign is a list of contacts that Nerva calls automatically using one of your voice agents. Perfect for appointment reminders, lead qualification, re-engagement drips, customer surveys, and any outbound calling at volume.

You upload the list, configure how aggressively to dial, and start it. Nerva handles the rest — dialling, recording, retrying busy/no-answer numbers, tracking which contacts answered, and writing per-contact outcomes back to your CRM.

When you need one

You want a campaign whenever you'd otherwise pay someone to make the same call 100+ times. Common use cases:

  • Appointment reminders — call patients/clients 24 hours before their booking to confirm or reschedule.
  • Lead qualification — call new website leads within minutes to qualify them and book a follow-up with a human salesperson.
  • Re-engagement — call dormant customers with an offer.
  • Survey / NPS — quick post-purchase satisfaction calls.
  • Renewal outreach — call customers whose subscription is about to expire.
  • Event reminders / RSVP — confirm attendance before a webinar or event.

Creating a campaign

Dashboard → Campaigns → New.

You'll need three things:

1. A voice agent

Pick one of your existing voice agents — the one whose prompt is tuned for the script you want. If your agent doesn't exist yet, create it first (Voice agents).

The agent's system prompt should explicitly handle the outbound context. Example for an appointment reminder agent:

You're calling to confirm an existing appointment. Greet the contact by name, state the date and time of their appointment, and ask if they can still make it. If yes, thank them. If no, offer to reschedule and capture their preference. Keep the call under 60 seconds.

2. A contact list

Upload a CSV with at minimum a phone column. Add as many extra columns as you want — they become prompt variables the agent can reference.

Example CSV:

phone,first_name,appointment_date,appointment_time,doctor
+14155551234,Sarah,2026-05-15,2:30 PM,Dr. Patel
+14155555678,Mike,2026-05-15,3:00 PM,Dr. Chen
+14155559012,Linda,2026-05-16,10:00 AM,Dr. Patel

In your agent's system prompt, reference any column with {{column_name}}. For example:

Hi {{first_name}}, this is a reminder of your appointment with
{{doctor}} on {{appointment_date}} at {{appointment_time}}. Can you
still make it?

Each contact gets a personalized call with their own variables substituted.

3. A phone number

Pick one of your phone numbers as the caller ID. See Phone numbers.

Campaign settings

SettingWhat it controls
Start timeWhen dialling begins. "Now" or a specific date/time.
ConcurrencyHow many calls to run in parallel. Higher = faster but more load on your endpoints; respect your plan's concurrent-calls cap.
Calling windowThe hours during which dialling is allowed (e.g., 9 AM – 5 PM contact-local time). Calls queue outside the window.
Retry policyWhat to do on busy / no-answer. Defaults: retry busy after 30 min, retry no-answer after 2 hours, up to 3 total attempts.
Stop afterAuto-pause if N consecutive calls fail, to catch bad lists early.

Running a campaign

Click Start and Nerva begins dialling. The campaign page shows:

  • Live progress — contacts called / answered / pending.
  • Per-contact rows — phone, status, duration, outcome, link to the call detail page.
  • Real-time chart — answers per hour, with calling-window overlay.

You can pause at any time — in-flight calls finish, queued calls hold. Resume picks up where you stopped.

Outcomes

Each contact gets an outcome the agent (or the LLM analysis) decides:

OutcomeMeaning
reachedContact answered and conversation completed
voicemailVoicemail detected; agent left a message (or didn't, per your config)
no_answerRang out without anyone picking up
busyLine was busy
failedDial failed (invalid number, blocked, carrier error)
do_not_callContact requested to be removed

You can export the outcome CSV any time during or after the campaign.

Compliance basics

Most jurisdictions regulate outbound calling. A few non-negotiables to respect:

  • Time-of-day rules — many regions ban calls before 8 AM or after 9 PM local time. Use the Calling window setting.
  • Do-not-call lists — never dial numbers from registry-listed contacts. Maintain your own DNC list and filter your CSV against it.
  • Consent — you should already have permission to call these contacts. This is your responsibility, not Nerva's.
  • Disclosure — many regions require agents to disclose they're AI when asked. Bake "If asked, say you're an AI assistant on behalf of {company}" into your agent prompt.
  • Opt-out handling — when a contact says "remove me", the agent should acknowledge and exit. The contact's outcome becomes do_not_call and you should respect it in future campaigns.

We provide the tools. You're responsible for using them within your local laws.

Webhooks

Subscribe to these events to integrate campaigns with your stack:

  • campaign.completed — fires when the campaign finishes (org-scoped event)
  • contact.reached — fires per contact that answered (org-scoped event)
  • call.ended / call.analyzed — same per-call events as any other voice call

See Webhook events.

Per-contact CRM sync

If your campaign agent has a CRM integration attached (e.g., GoHighLevel), every successful call writes back to that CRM:

  • Contact created/updated (matched on phone)
  • Note appended with the call summary
  • Tag applied based on outcome
  • Pipeline stage moved according to your mapping

See CRM integrations.

Limits

Campaigns are subject to your plan's limits:

  • Campaigns per month
  • Contacts per campaign
  • Concurrent calls (a cap across all campaigns combined)

See Billing & plans for the per-tier numbers.

Tips for SMB owners

  • Test with 5 contacts first. Always run a tiny campaign to catch agent-prompt issues before dialling 1,000 people.
  • Time it right. Appointment reminders work best at 10 AM the day before. Sales outreach: Tuesday/Wednesday 10 AM – 12 PM.
  • Personalize ruthlessly. Use every CSV column you have — first name, last visit, last product purchased, anything specific. Generic calls get hung up on.
  • Keep it short. 30–60 seconds is the sweet spot. Longer calls have higher hang-up rates.
  • Always offer a way out. Train the agent to take "remove me" / "don't call again" gracefully.

See also

On this page