RefreshDocsConsole →

Dashboard

Broadcasts

One message per subscriber of a topic. Compose, A/B the subject, schedule, cancel, read the stats.

A broadcast sends bulk messages to the subscribers of a topic. A segment can narrow the recipients. The platform turns the broadcast into one message per contact, never a shared to list. Each message has kind: broadcast.<topic>, so the one-click unsubscribe applies to that topic only. The same object is available over the API. See Broadcasts API.

Compose

Go to Broadcasts → New broadcast and complete the form:

  • Name — an internal label.
  • From — a local part on one of the verified domains of the organization.
  • Topic — required; recipients are the contacts with effective state subscribed for the topic and contact status Subscribed.
  • Segment — an optional further filter.
  • Content — a published template version, or an inline subject plus HTML/text.
  • Subject B — an optional A/B subject that about half of the recipients (split by contact id) get.

Two optional envelope fields complete the form:

  • Reply-To — the address that receives replies on every message of the broadcast.
  • Preview text — the inbox snippet. It goes into a hidden block at the top of the HTML part. The text part does not change.

Content renders per contact with contact.email, contact.first_name, contact.last_name and every contact property under contact.<key> ({{contact.plan}}). Properties never override the fixed keys.

Template mode uses the declared variables of the version. The platform prunes the data and coerces it to the declared types. Inline mode treats every {{contact.x}} as an optional string.

The compose page shows an eligible count (matched minus suppressed). It also shows a preview rendered for the oldest eligible contact. The preview includes the preview text and the postal/unsubscribe footer of the organization. When the organization has no postal address, the page shows a warning. Add the address under Settings → Organization.

The Insights list next to the preview flags common problems. The checks are: no-reply From address, missing text part, large body, inline SVG, embedded YouTube, zero eligible contacts. The list is advice. It does not block Create draft.

When you save, the platform creates a Draft. It sends nothing yet.

Test send

On a Draft or Scheduled broadcast, Test send sends the broadcast to your own address. The message renders as for a contact with your e-mail and no properties. It uses the From and Reply-To of the broadcast. Its kind is test.broadcast, so it has no one-click unsubscribe, and the fan-out stats do not count it.

Send, schedule, cancel

On the broadcast page:

  • Send now — queues the fan-out (Draft/Scheduled → Scheduled → Sending).
  • Schedule — select a future time. A new schedule replaces the pending time.
  • Cancel — possible until the broadcast is Sent. A Sending broadcast stops at its next batch. Messages already in the queue still go out.

Statuses: Draft → Scheduled → Sending → (Testing → Sending) → Sent, or Canceled.

Fan-out

The worker walks the eligible contacts in batches of 500. It skips suppressed addresses. It creates one message per contact through the same path as POST /emails. Each message has the tags topic=<slug> and broadcast=<id>, and for templates also template and template_version.

The worker records a heartbeat between batches. After a crash, the fan-out resumes and does not send twice. Per-contact render or API failures count as skipped, not as fatal.

Stats

The worker writes the stats when the fan-out ends. The stats are eligible (matched − suppressed), queued, skipped and suppressed. queued counts recipient rows in the queued state. In Testing, that count includes recipients that wait for the winner.

testShare is the number of messages the test created. A reason is present when the worker ended the broadcast itself (content missing, segment filter invalid). Delivery, open and click numbers live in the message list, in the report below, and in Metrics.

A/B test with a winner

When you enter Subject B, you can ask the platform to pick a winner.

  • Turn on Pick a winner on the compose form.
  • Set Test share % from 10 to 50 (default 20).
  • Set Wait to 30 min, 1 h, 4 h, 12 h, 24 h or 72 h (default 4 h).
  • Set Decide by to opens or clicks (default opens).

The worker sends the test share first. Each contact in the share gets subject A or subject B. The other contacts wait. The status becomes Testing.

After the wait, the worker counts distinct messages per variant. Opens count a message with an open or a click. Clicks count a message with a click. The larger count wins. A tie, or two zeros, selects A.

The worker then sends the rest of the audience with the winning subject. The worker skips a contact who left the topic during the wait. The status becomes Sent.

Pick the winner now runs the same choice at once. Cancel during Testing stops the rest and removes the pending choice.

When Pick a winner is off, about half of the recipients get subject B. The broadcast does not pick a winner.

Resend to non-openers

On a Sent broadcast that is not itself a resend, Create resend draft makes a child broadcast. The child copies the content, the topic and the segment. It has no subject B.

The worker computes the audience when the child sends. It selects parent recipients whose message status is sent or delivered and that have no open and no click. Bounces, complaints, failures and skipped rows stay out. A contact who left the topic stays out.

You cannot send the child until 24 hours after the parent finished. The broadcast page shows the earliest time.

The platform refuses a second resend while that child is not canceled. Cancel that child to create another. A resend cannot be resent.

Report

The broadcast page shows a report once sending has started. The same numbers are on GET /broadcasts/{id}/report. See Broadcasts API.

Delivered, Opened, Clicked, Bounced and Unsubscribed count distinct messages.

Open rate, click rate and unsubscribe rate use delivered messages as the base. The bounce rate uses sent messages. A rate is empty when the base is 0.

opened counts a message with an open or a click. clicked counts a message with a click.

tracking_enabled is true when the sending domain has a tracking host. When it is false, opens and clicks are not collected. The page tells you to set a tracking domain.

When any recipient has a variant, the report lists A and B. winner is A, B or empty.

Top links lists up to 10 URLs. Each count is distinct messages that recorded a click on that URL.