Email analytics and tracking
Delivery, bounce, complaint, open, click, and unsubscribe rates per sending domain and per recipient provider — with security-scanner opens filtered out, so the numbers reflect people, not bots.
Per-domain and per-provider reports
See sent, delivered, bounced, complained, opened, clicked, and unsubscribed for each sending domain and for each recipient provider — Gmail, Outlook, Yahoo, and the rest — over 7, 30, or 90 days.
Bot opens filtered out
Opens fetched by email-security scanners, link prefetchers, and privacy proxies are detected and kept out of open rates and broadcast counters, so a spike in "opens" is not just a corporate gateway.
Every event, raw
Each open, click, bounce, and complaint is also a signed webhook event and a line on the message’s own timeline, so you can pipe raw events into your warehouse, CRM, or product analytics.
Override tracking for one send
// Tracking defaults are set per domain. Override them for a
// single message — here, a password reset with no tracking:
await poststack.emails.send({
from: 'security@yourdomain.com',
to: ['user@example.com'],
subject: 'Reset your password',
html: '<p><a href="https://app.example.com/reset?t=…">Reset password</a></p>',
tracking: {
opens: false,
clicks: false,
},
});
// Later: the full event timeline for that message
const events = await poststack.emails.getEvents(emailId);Use cases
Deliverability monitoring by mailbox provider
Compare bounce and complaint rates at Gmail, Outlook, and Yahoo side by side. A problem at one provider usually shows up there first — long before it shows in your overall numbers.
Understanding why mail bounced
Bounces are grouped by cause — throttling, reputation blocks, authentication, content, policy, and bad recipients — with the provider’s own response code, and each is marked as your side or the recipient’s side.
Campaign results
Every broadcast reports sent, delivered, opened, clicked, bounced, complained, and unsubscribed. A/B tests pick their winner on human open rate, and you can list who received a campaign but did not click, for a follow-up.
Privacy-sensitive sending
Turn open or click tracking off per domain, or per message for sensitive mail such as password resets and security codes, where a rewritten link or a pixel does not belong.
How it works
Every message PostStack sends produces events — sent, delivered, delivery delayed, bounced, complained, opened, clicked, unsubscribed — stored in the EU alongside the message for your plan’s log retention period (14 days on Free and Starter, 30 on Pro, 90 on Scale). Opens are tracked with a 1×1 pixel and clicks by rewriting links through a PostStack redirect that records the click and sends the reader on with a 302. Open and click tracking are on by default for a new domain; you can turn either off per domain, and override the domain default on any single send with `tracking.opens` and `tracking.clicks`. For each tracked open or click we record the time, IP address, user agent (parsed into email client, operating system, and device type), and an approximate location derived from the IP. Open counts need care: security gateways, link scanners, and privacy proxies such as Apple Mail Privacy Protection fetch images automatically. PostStack flags an open as a machine fetch when the user agent is a known proxy or prefetcher, the IP belongs to a known email-security scanner, or the fetch lands within seconds of hand-off to the receiving server. Flagged opens are kept on the message timeline but excluded from open rates and broadcast counters. The dashboard Overview shows this month’s volume against your plan, sending activity over time, deliverability, and engagement by location and device. The Analytics page breaks the same numbers down per sending domain and per recipient provider over 7, 30, or 90 days. Each domain also gets a deliverability view that groups recent bounces by cause and ownership, plus DMARC aggregate reports showing which sources send as your domain and whether they pass. For your own pipelines, every event is available as a signed webhook, per message via `GET /emails/:id/events`, and to AI agents through MCP tools such as engagement and deliverability summaries.
Full parameters, limits, and examples are in the Email analytics and tracking documentation.
Frequently asked questions
How are opens tracked?
A 1×1 image is added to the HTML body. When the recipient’s mail client loads it, PostStack records an `email.opened` event. Many security gateways and privacy proxies (Apple Mail Privacy Protection among them) load images automatically, so PostStack flags opens that look like machine fetches and excludes them from open rates. Treat opens as a trend rather than proof that a specific person read the message.
How are clicks tracked?
Links in the HTML body are rewritten to pass through a PostStack redirect. When a recipient clicks, the click is recorded as an `email.clicked` event with the destination URL, and the reader is sent on to the original URL with an HTTP 302. The destination itself is unchanged.
Is tracking on by default?
Yes — open and click tracking are enabled by default for a new sending domain. You can disable either one per domain in the dashboard, or per message with `tracking: { opens: false, clicks: false }` on the send. Password resets and other security mail are good candidates for turning tracking off.
What data does tracking collect, and for how long?
For each tracked open or click: the time, IP address, user agent (email client, operating system, device type), and an approximate location (country, region, city) derived from the IP. It is stored in the EU and deleted with the rest of your logs at the end of your plan’s retention period. The Privacy Policy and DPA describe this processing in full.
Can I get the raw events?
Yes. Subscribe a webhook to the event types you want and every event arrives in real time, HMAC-signed. You can also read the full timeline of any message with `GET /emails/:id/events`. There is no bulk CSV export of analytics today; webhooks are the way to feed a warehouse.
Do you track unsubscribes and bounces?
Yes — every unsubscribe, bounce, and complaint is recorded with the reason the receiving server gave. Hard bounces and complaints automatically add the address to your suppression list, and temporary failures are retried before they count as a bounce.