Email campaigns
Campaigns let you send timed email blasts to your event audience — reminders to confirmed registrants and nudges to attendees who haven't completed registration. You control the audience, schedule, and message content.
Updated May 26, 2026
The Campaigns tab lets you send timed email blasts to specific segments of your event audience. Two campaign kinds are available: a Reminder for confirmed registrants and a Claim nudge for people who received a ticket but haven't confirmed attendance.
Each campaign can be sent immediately, scheduled for an exact date and time, or set to fire a set number of days before the event starts. You can customize the subject line and message body, or leave them at their defaults.
Campaigns are email-only. To send a broadcast to your attendees via SMS, use Announcements instead.
Campaign kinds
The kind you choose determines who receives the campaign. The audience count shown at the top of the tab reflects the current size of each pool.
Reminder
Targets confirmed registrations with an email on file. The default subject is Reminder: {event title}. You can optionally narrow the audience to a specific ticket type — useful when different ticket types represent different sessions, tiers, or days.
Claim nudge
Targets two groups:
- Ticket holders with an email address set but no confirmed attendance (
attendee_confirmed_atis null). - Pending ticket invite recipients — people you sent an invite link who haven't claimed their ticket yet.
Both groups are combined and deduplicated by email address before sending. The default subject is You haven't claimed your ticket for {event title}.
Scheduling
Three schedule modes are available when you create a campaign:
- Send now — schedules the campaign for the next cron pass. The campaign becomes active within approximately 5 minutes.
- At a specific time — pick an exact date and time. You enter this in your browser's local time; it is stored and processed as UTC.
- Relative to event start — set a number of days before the event (0–60). The cron fires at the calculated offset; actual delivery may drift up to 5 minutes.
The Relative to event start option only appears when your event has a start date set. If your event has no start date, set one in the event settings before creating a relative-scheduled campaign.
Customizing subject and body
Both fields are optional. When left blank, each campaign kind uses its built-in default template.
- Subject override — up to 200 characters. The placeholder text shows the default for that campaign kind.
- Body override — up to 4,000 characters. Plain text; line breaks are preserved in the sent email. Leaving this blank uses the default template body.
The campaign name (up to 120 characters) is visible only to you — it does not appear in the email.
Check Activate immediately to create the campaign in scheduled status. Leave it unchecked to save the campaign as draft and activate it later.
Statuses and actions
Each campaign moves through a predictable lifecycle. The status tells you where the campaign is and which actions are available.
draft— saved but not active. You can edit, send now, or delete.scheduled— queued for delivery. You can send now (which moves the send time to the next cron pass) or cancel.enqueuing— the cron is actively building the recipient list. You can cancel at this point, but cannot delete until sending completes.sending— emails are being dispatched in batches. You can cancel; the worker will skip any remaining queued sends on its next pass.sent— delivery complete. You can delete the record.cancelled— stopped before or during delivery. You can re-activate with Send now, or delete.failed— an unrecoverable error stopped the campaign. Delete the record and create a replacement campaign.
Delete is only available from draft, cancelled, failed, and sent. If a campaign is in enqueuing or sending state, cancel it first, then delete.
How sending works
Campaigns are dispatched by a cron job that runs every 5 minutes. The worker batches outgoing emails in groups of ~100 using the Resend batch API, so a large audience (5,000+ recipients) completes in a few minutes without tripping rate limits.
"Send now" does not send immediately. It schedules the campaign for the next cron pass, which runs every 5 minutes. Expect a minimum delay of about 5 minutes between clicking Send now and the first emails arriving.
The cron worker has a 4-minute budget per 5-minute window. Very large sends that can't complete in one pass resume on the next. Campaigns in sending state are still in progress; check back in a few minutes if the count hasn't reached the total recipient number.
After a campaign is sent, the record shows sent_count and failed_count so you can see how many emails were delivered and how many bounced or errored.