Campaigns

Creating and sending campaigns

How to create a campaign, choose an audience, and send it to your subscribers.

A campaign is a single email send to a group of your subscribers. You write the content once (or reuse a template), pick a segment, and fire.

Campaign lifecycle

Draft → (optional) Scheduled → Sending → Sent
                              → Cancelled
Status Meaning
draft Editable — body, subject, and segment can still be changed
scheduled Locked to a send time — only the send time and name can be changed
sending In progress — recipients are being queued and emails are going out
sent Complete — all recipients processed (some may have failed delivery)
cancelled Cancelled before send started

Creating a campaign

In the dashboard → NewsletterCampaignsNew Campaign:

  1. Give the campaign a name (internal label, not shown to subscribers)
  2. Write or paste a subject line
  3. Write the email body in HTML (or start from a saved template)
  4. Choose a segment (or send to all active subscribers)
  5. Save as draft

IMPORTANT

When you create a campaign from a template, the campaign copies the template body at that moment. Editing the template later does NOT change the campaign. This is intentional — scheduled sends are deterministic: the email that goes out is the exact body you approved when you scheduled it.

Sending immediately

From the campaign detail page → Send now.

What happens:

  1. The service resolves your recipient list (segment filter + exclude unsubscribed/bounced/suppressed)
  2. Credits are charged upfront: Math.ceil(recipients / 5) credits
  3. If the charge succeeds, one email job is queued per recipient
  4. The campaign status moves to sending
  5. Jobs process in batches of 50, delivered via your email provider
  6. When all recipients are processed, status moves to sent

If you have insufficient credits, you'll get a 402 error and nothing is queued. No emails go out.

Scheduling for later

From the campaign detail page → Schedule → pick a date and time (your local timezone — converted to UTC internally).

  • The campaign locks its body at the moment you schedule it
  • A Durable Object alarm fires at exactly the scheduled time and triggers the send
  • You can change the scheduled time or cancel the campaign before it fires

NOTE

Once scheduled, only the send time and campaign name can be changed. To edit the body, cancel the campaign and create a new draft.

Segments

Segments let you send to a subset of your subscribers. You define a segment with filter rules:

Filter Example Matches
Tag "tag": "vip" Subscribers with the vip tag
Status "status": "active" Active (confirmed) subscribers only
Subscribed after "subscribedAfter": "2026-01-01" New subscribers since Jan 1 2026

Segments can combine multiple rules. The recipient count shown in the dashboard is an estimate — it may be slightly higher than the actual send count because suppressed addresses are excluded at send time (not at segment creation time).

Viewing results

After a campaign sends, the dashboard shows:

Metric Definition
Sent Total emails processed (queued and attempted)
Delivered Confirmed delivery by the email provider
Opens Unique opens tracked by pixel (where supported by the email client)
Clicks Unique link clicks tracked by URL redirect
Bounced Hard or soft bounces reported by the provider
Failed Jobs that exhausted all retries without a provider confirmation

Hard bounces automatically add the address to the global suppression list — that address won't receive emails from any Vlozi tenant in future.

Test send

Before sending to your full list, send a test email to yourself:

Dashboard → campaign → Send test → enters your account email.

Test sends cost 1 credit regardless of audience size. They are not tracked in the campaign stats.

Newsletter · CampaignsEdit on GitHub