Subscribers & analytics
The lifecycle
signup → pending → (clicks confirm) → active → (opts out) → unsubscribed
↓
bounced / complained
| Status | Receives campaigns | How it's reached |
|---|---|---|
pending | No | Signed up, hasn't clicked the confirmation link |
active | Yes | Clicked the confirmation link |
unsubscribed | No | Used an unsubscribe link |
bounced | No | Delivery hard-failed; suppressed automatically |
complained | No | Marked your mail as spam; suppressed automatically |
Only active subscribers are ever sent a campaign.
A pile of pending subscribers usually means confirmation emails aren't arriving — check
domain verification before concluding people simply didn't
click.
Re-signups
Someone signing up again with the same address doesn't create a duplicate; addresses are
unique per project. If they're already active, no confirmation email is sent — they're
simply still subscribed.
A previously unsubscribed person can resubscribe through the form and confirm again. Bounced and complained addresses stay suppressed.
Viewing subscribers
The Subscribers tab lists everyone with their status, signup source, and date. The
source label is whatever the signup form sent — use distinct labels per surface
(footer, blog-post, crm-import) and you'll be able to tell what's actually
converting.
To pull the list programmatically, see
GET /api/v1/subscribers. It needs a key with subscribers:read;
there's no public access to subscriber data.
Analytics
The Newsletter tab shows per-project figures over a time range:
| Metric | Meaning |
|---|---|
total_subscribers | Every subscriber, all statuses |
active_subscribers | Confirmed, currently receiving campaigns |
pending_subscribers | Signed up, never confirmed |
signups_in_range | New signups in the window |
campaigns_in_range | Campaigns sent in the window |
sent_in_range / delivered_in_range / failed_in_range | Send outcomes |
open_count_in_range / click_count_in_range | Tracked opens and clicks |
unsubscribes_in_range | Opt-outs in the window |
average_open_rate / average_click_rate | Opens and clicks over delivered |
Per campaign, you also get sent, delivered, bounced, complained, failed,
open, click, and unsubscribe counts.
Reading the numbers honestly
Open rates are soft. An open is recorded when a tracking pixel loads. Apple Mail Privacy Protection pre-loads images for every message, inflating opens; clients that block images suppress them entirely. Treat opens as a trend line, not a measurement.
Click rates are the real signal. A click requires deliberate action, so it survives both of the distortions above. If you optimise for one number, use this one.
Delivered is not "landed in the inbox." It means the receiving server accepted the message. It may still have been filed as spam.
Watch complaints and unsubscribes as a ratio. A rising unsubscribe rate after a change in frequency or tone is the clearest feedback you get. Complaints matter more than they look: they damage sending reputation for every site on your domain, not just this newsletter.
Privacy
IP addresses recorded with opens and clicks are hashed with a secret salt before storage — raw IPs are never persisted. Subscriber data is not public and has no unauthenticated API path.
If you're subject to GDPR or DPDP, note that you're the controller of this data: honour deletion requests by removing the subscriber, and make sure your privacy policy says what you track. Double opt-in gives you a defensible record of consent, which is much of why it isn't optional here.