Performance tracking
Every campaign recipient is sent as an individual tracked email, so opens, clicks, bounces, and complaints surface per-contact in the dashboard and via webhooks.
A campaign is not a single send — it fans out into one tracked email per recipient. Each of those emails is logged exactly like a transactional `POST /emails` send, with its own id, status, and event timeline.
That means campaign performance reuses the same delivery, open, and click tracking as the rest of the platform — there is no separate analytics surface to learn.
What is tracked
- Delivery —
email.sent,email.delivered, andemail.delivery_delayedper recipient. - Engagement —
email.openedandemail.clicked, when open/click tracking is enabled on the sending domain. - Negative signals —
email.bouncedandemail.complained, which also add the address to your account suppression list. - Unsubscribes — recipients who opt out via the per-campaign unsubscribe link, flipping that contact to
unsubscribedin the audience.
Headline metrics
Open a sent campaign in the dashboard to see its performance right away. The headline insights are:
- Emails delivered — how many copies the receiving servers accepted.
- Open rate — the share of delivered emails that were opened.
- Click rate — the share of delivered emails with at least one tracked-link click.
- Unsubscribed — how many recipients opted out from this campaign.
Reading results
Each recipient email carries an event log you can read the same way as any other email:
- In the dashboard, open the campaign to see per-recipient status and aggregate delivery, open, and click counts.
- Via the API, retrieve an individual recipient email with `GET /emails/:id` to inspect its
last_eventand status. - Via webhooks, subscribe to the
email.*events to stream delivery and engagement to your own systems in real time. See Event types.
Aggregate stats endpoint
For a single rolled-up view, call GET /campaigns/:id/stats. It returns the campaign’s aggregate open, click, and unsubscribe counts (with the underlying delivered/sent totals) plus the top clicked links — the same numbers shown on the dashboard, fetched in one request.
import { MailBlastr } from 'mailblastr';
const mb = new MailBlastr('mb_xxxxxxxxx');
const { data, error } = await mb.campaigns.stats('CAMPAIGN_ID');
console.log({ data, error });Because bounces and complaints feed account-wide suppression, contacts that hard-bounce or complain are automatically excluded from subsequent campaigns — keeping your sender reputation healthy without manual list hygiene.