//Outreach
SMS outreach
Facts checked against official sources · September 9, 2026
SMS outreach is the one-to-many channel: one message, one saved list, sent in the background and reported per recipient. It lives under Outreach → SMS in the dashboard, next to the peer-to-peer workspace, and it is the right tool when the message is the same for everyone (a polling-place reminder, an early-vote deadline, an event invite) and you do not need a conversation back.
Before a single text can go out, the campaign needs a registered sending line. The SMS page walks you through that first and only then unlocks the compose wizard. Every send after that passes through the same roll check, suppression check, and delivery plumbing, whether it was launched from the dashboard or scheduled for later.
What it is
An SMS campaign in Culper is a name, a saved voter list, and a message body. The body can use three merge fields, {{firstName}}, {{lastName}}, and {{city}}, and the compose screen previews it in a phone bubble with a running character count and the number of 160-character segments each recipient will cost. A campaign moves from draft to sending to sent (or failed), and the campaign card shows sent versus total recipients, failures, and how many recipients were skipped as opted out.
The page is available to the candidate, campaign managers, and staff. Volunteers never see it and cannot reach the underlying actions, because a mistaken blast to a few thousand voters is exactly the kind of error that cannot be undone.
It is a different tool from peer-to-peer texting. P2P is a human pressing send on one message to one voter and reading the reply. SMS outreach is the campaign sending one message to a list; replies other than STOP are not part of the workflow.
Registering to text: brand, campaign, and number
US carriers require anyone sending political texts from a standard 10-digit number to register with The Campaign Registry (A2P 10DLC). The SMS page opens with a setup chooser that offers two routes, and the New SMS campaign button stays disabled until one of them is complete.
Register New Service is a two-step wizard plus a waiting state. Step 1 collects the brand: organization or candidate name, contact email and phone, an optional EIN and website, and a plain description of how you will use SMS. Step 2 collects the campaign use case: two real sample messages of at least 20 characters, your opt-in workflow, the opt-in confirmation text, and the STOP and HELP auto-responses (sensible defaults are filled in). Step 3 is phone-number assignment once the campaign is approved. While each step is under review the page shows a day counter against the typical review time (about 8 days for the brand, about 5 for the campaign), so nobody has to wonder whether it is stuck.
Connect Existing Service is for a campaign that already has an approved Twilio messaging service. You paste the Account SID, Auth Token, and Messaging Service SID. Credentials are stored in a per-campaign vault that is never shared between campaigns, and Culper immediately asks Twilio whether the service actually has a verified A2P campaign attached. If it does not, you are told so on the spot, with the specific Twilio error (21703) that every send would otherwise fail with. A service that is connected but still in review shows a pending warning until it is verified.
- SMS Settings shows the connected service and the webhook URL to paste into Twilio for incoming messages (which is how STOP is caught) and for status callbacks (which is how delivery receipts reach your dashboard).
- Send a test message texts up to five numbers through your connected service with a [TEST] prefix, no list required, so you can confirm the line works before building a campaign. Test sends respect the suppression list too.
- The wizard collects and tracks the registration details; approval itself comes from The Campaign Registry and Twilio, and the page re-checks live status every time it loads.
Composing and launching a send
New SMS campaign is a three-step wizard. Audience: name the campaign and pick a saved list; the screen tells you how many voters are on it and that only those with a phone on file will be texted. Message: write the body, watch the phone preview and segment count, and send a test to up to five numbers. Confirm: a summary of the list, the segment count per recipient, and a short list of what will happen (voters who replied STOP are excluded, the global suppression list is checked before every message, only voters with a phone receive it, the send cannot be undone), then Launch SMS campaign.
Launching flips the campaign to sending and hands it to a background job. The job splits the list into 200-voter chunks and processes them in parallel, so a large list finishes in seconds rather than minutes. For every recipient it skips voters who are no longer on the current county roll, marks a voter with no usable phone as failed with the reason, records a suppressed number as opted out, and only then sends. Each recipient is claimed in the database before the provider call, so a retried chunk can never text the same person twice. When every chunk is done the counts are tallied from the stored message rows and the campaign is marked sent.
Opt-outs, STOP, and the global suppression list
Incoming texts arrive on a webhook that rejects anything not signed by Twilio, so nobody can forge a STOP to knock a supporter off your list or spray fake opt-outs across the platform. STOP, UNSUBSCRIBE, CANCEL, END, and QUIT are honored immediately: the number is written to a global, campaign-agnostic suppression list and any consent records for it are revoked across every campaign. No campaign can override that list, and it applies to test sends, P2P, and polls as well as broadcast SMS.
Numbers are stored and compared in one canonical form, so a voter who opted out as “(555) 123-4567” is still suppressed when a list carries them as “5551234567” or “+15551234567”. The lookup fails closed: if the suppression check itself errors, the send stops rather than proceeding against an empty list.
Consent is handled as a positive record, separate from suppression. Culper writes a consent entry when a voter opts in through its public join form, canonicalizes it the same way, and can enforce a per-recipient consent check at send time that marks any number without documented consent as skipped with the reason shown in the campaign detail. Absence from the suppression list is never treated as consent; what consent posture a given list carries is a decision your campaign makes with counsel.
Scheduling and delivery reporting
A campaign can be created as a scheduled send with a future time instead of launched immediately; today that path is exposed through the API the mobile app uses, while the web wizard sends when you press launch. A dispatcher runs every minute, claims any due campaign with a single atomic update so two overlapping runs can never both fire it, and hands it to the same background pipeline as an immediate send. Scheduled and immediate sends share one enforcement path for roll, suppression, and consent.
Reporting is per message. Every recipient gets a row with the number texted, the status, the provider message ID, any error text, and sent and delivered timestamps. Twilio’s status callbacks update the row to delivered or failed as the carrier reports back. The campaign card rolls that up into sent over total, failures, and opted-out skips, with a status badge and the time it went out.
How a local campaign uses it
City council, early-vote reminder. You have 3,200 likely voters with a mobile on file saved as a list. You write a 140-character reminder with the early-vote site and hours, test it to your own phone and the campaign manager’s, and launch it Saturday morning. One segment per recipient, so the send is 3,200 segments. The card shows the count climbing within seconds, and the handful of failures (disconnected numbers) are listed with the carrier reason.
School board, location change. A polling site moves the week before the election. You build a list of the 600 voters assigned to that precinct, send a two-line text with the new address, and use the {{firstName}} field so it reads as a note rather than a notice. Anyone who replied STOP to an earlier send is skipped automatically.
County party, event invite. The party schedules a reminder for 10am the day before a candidate forum to a 5,000-person list. The dispatcher picks it up on the minute, the background job sends it in 25 parallel chunks, and the party watches delivery land on the campaign card.
Why it matters
Texting is the cheapest direct contact a local campaign can buy, and it is also the channel most likely to end a campaign if done carelessly. The registration steps, the consent rules, the FCC’s revocation rule, and quiet hours are laid out in Political texting rules: TCPA and 10DLC; Culper’s job is to make the compliant path the default one.
Used well, a text list turns a win number into a schedule. If a council seat takes 2,000 votes and your universe is 6,000 likely voters, three well-timed reminders to the people you have already identified are worth more than any single mail piece. The arithmetic is in How many votes does it take to win a local election, and the vote-by-mail version, where the reminder goes only to people whose ballot has not come back yet, is in Ballot chase in vote-by-mail states.
What it does not do
Broadcast SMS is intentionally narrow. The things it leaves out are either handled by a sibling feature or are decisions the campaign has to make itself.
- No conversations. Replies other than STOP are not surfaced on the SMS page; use peer-to-peer texting when you want a human on the other end.
- No MMS. Broadcast sends are plain text; the campaign flyer attachment is a P2P feature.
- No quiet-hours gate on this path. A broadcast goes out when you launch it or when its scheduled time arrives, so launch inside 8am to 9pm in your recipients’ local time. Polls and P2P enforce the window per recipient; broadcast does not yet.
- Three merge fields only ({{firstName}}, {{lastName}}, {{city}}); no link shortener, no click tracking.
- The registration wizard collects and tracks your brand and campaign details; approval comes from The Campaign Registry and Twilio and can take days to weeks. Nothing in the product promises texting in ten minutes.
- Culper does not decide your consent posture. It records consent from its own opt-in forms, can enforce a consent check per recipient, and always enforces suppression; whether an imported list carries documented consent is your call to make with counsel.
Works with
SMS outreach starts from a saved list and shares its registration and STOP handling with every other texting feature.
- Peer-to-peer texting for one-to-one conversations on the same registered line.
- Polls by text, which reuses the A2P check, quiet-hours logic, and suppression list.
- Search, lists, and tags to build the audience.
- Email outreach, the same compose wizard for the other channel.
- Compliance and data security for the suppression list, consent log, and per-campaign credential vault.
- Dashboard and reporting for the outreach counts on your home screen.
Frequently asked questions
How long does A2P 10DLC registration take before I can text?
Typically 8 to 14 days in total: brand review is usually around 8 days and the campaign use-case review around 5. The SMS page shows a day counter for each step while it is under review. If you already have an approved Twilio messaging service, connecting it takes minutes, and Culper checks its live A2P status the moment you connect.
Can I use my own Twilio account?
Yes. Choose Connect Existing Service and paste your Account SID, Auth Token, and Messaging Service SID. The credentials are stored in a per-campaign vault and never shared with other campaigns. Culper verifies live that the service has a verified A2P campaign, because a service with numbers but no registered campaign fails every send.
What happens when someone replies STOP?
The number is added to a global suppression list the instant the reply arrives and any consent records for it are revoked across every campaign on the platform. Future sends from any campaign, including test sends, P2P, and polls, skip it. The webhook only accepts requests signed by Twilio, so opt-outs cannot be forged.
Will it text voters who have moved or fallen off the roll?
No. At send time each recipient is checked against the current county roll, and anyone retired from it is skipped even if an older saved list still includes them. Voters with no usable phone are marked failed with the reason so the counts stay honest.
Can I schedule a send for later?
Yes. A scheduled campaign carries a future send time, and a dispatcher that runs every minute claims it when it is due and hands it to the same pipeline as an immediate send. The scheduling path is exposed through the mobile API today; the web compose wizard sends when you press launch.
Does Culper require consent for every number?
Consent is part of the design: opt-ins from the public join form are logged, and a per-recipient consent check can be enforced at send time so any number without documented consent is skipped with the reason shown. Suppression is always enforced. What consent an imported list carries, and how you document it, is a decision to make with counsel; the TCPA guide on this site explains what the law expects.
Register once, then text your list in three steps
Keep reading