Open tracking
Open tracking uses a transparent 1x1 pixel GIF inserted at the end of the rendered HTML body. When a recipient’s mail client loads the image, the tracking endpoint records an open event.
How it works
- Each campaign recipient gets a unique tracking token. The pixel URL carries that token plus the recipient ID.
- Invalid tokens (e.g. from forwarded emails with rewritten URLs) silently fail — never leaking an error to the client.
- Cache headers force mail clients to re-fetch the pixel on every view, so repeat opens can be counted if your rate-limit rules allow it.
- Each open records the user agent, IP address, and timestamp on a
CampaignEventof typeOpened.
Caveats
Open tracking is inherently imperfect:
- Image blocking— many mail clients block remote images by default. These opens are invisible.
- Privacy proxies— Apple’s Mail Privacy Protection pre-fetches images on a shielded relay. This inflates open counts because every recipient appears to open immediately, regardless of whether they read the email.
- Plain-text-only clients— some mail apps render only the plain-text part, never loading the pixel.
Treat open rate as a directional signal, not an absolute truth. Click rate is a more reliable engagement metric.
Disabling
Each campaign has a Track Opens toggle. Turn it off for high-sensitivity sends (legal notices, transactional follow-ups) where open-tracking pixels would be inappropriate.
Click tracking
Click tracking rewrites every clickable http(s) link in the rendered email to route through a tracking endpoint. When the recipient clicks, the endpoint records the event and 302-redirects to the original destination.
What gets rewritten
- Yes — absolute
http://andhttps://links in the body - No —
mailto:andtel:links - No — in-page anchors (
#section) - No— the unsubscribe link (always preserved intact)
Event data
Each click records:
- The campaign and recipient
- The original URL
- User agent and IP address
- Timestamp
URL deduplication
Identical URLs appearing multiple times in a single campaign are rolled up under one link identifier. This gives you clean “URL X got N clicks” reporting, even if the URL appears in a header, a body CTA, and a footer link.
Disabling
Each campaign has a Track Clicks toggle. Disable this for transactional or deliverability-sensitive sends where link rewriting might trip spam filters or confuse authenticated branded URLs.
UTM parameters
Each campaign has optional UTM fields:
| Parameter | Typical value |
|---|---|
utm_source | newsletter |
utm_medium | email |
utm_campaign | 2026-04-spring-launch |
utm_term | Optional free-text identifier |
utm_content | Optional free-text identifier |
Merging behaviour
When a recipient clicks a tracked link, the click endpoint merges the campaign’s UTM parameters into the destination URL only where the author hasn’t already set them. This means:
- A clean link like
https://example.com/productgets the campaign-level UTM applied - A pre-tagged link like
https://example.com/product?utm_source=email&utm_campaign=customkeeps its author-provided parameters
This gives you consistent Google Analytics or Plausible attribution without rewriting the blocks for every campaign.
Bounces & complaints
When your email service provider (SendGrid, Postmark, Mailgun, Resend) sends CampaignCanvas a webhook reporting a bounce or complaint, the event is recorded against the recipient and the subscriber’s bounce counters are updated.
Hard vs soft bounces
| Type | Typical cause | Action taken |
|---|---|---|
| Hard bounce | Invalid address, blocked by receiving server, mailbox doesn’t exist | Counter incremented. After the configured threshold (default 3) the address is automatically added to the suppression list. |
| Soft bounce | Full mailbox, temporary DNS issue, greylisting | Counter incremented. No automatic suppression — these are transient. |
| Complaint | Recipient clicked “mark as spam” in their mail client | Immediate suppression — complaints are a hard signal that the subscriber does not want to hear from you. |
Event catalogue
Campaign events come in these types:
Sent— dispatched to the ESPDelivered— ESP confirms delivery to the recipient’s inbox providerOpened— tracking pixel firedClicked— click endpoint hitBounced,HardBounced,SoftBounced— bounce webhooks from the ESPComplained— spam complaint webhookUnsubscribed— subscriber unsubscribed from the campaign’s target list
Campaign analytics
Each campaign has an Analytics tab that computes metrics live from event data.
Metrics
| Metric | Definition |
|---|---|
| Recipients | Total unique subscribers targeted |
| Sent | Dispatched to the ESP |
| Delivered | ESP-confirmed delivery |
| Opened | Total opens, counting repeat opens |
| Unique opens | Number of unique recipients who opened at least once |
| Clicked | Total clicks, counting repeats |
| Unique clicks | Number of unique recipients who clicked at least once |
| Bounced | Total bounces, split by hard vs soft |
| Complained | Spam complaints |
| Unsubscribed | Unsubscribes triggered from this campaign’s emails |
Derived rates
| Rate | Formula |
|---|---|
| Open rate | unique opens ÷ sent |
| Click-through rate (CTR) | unique clicks ÷ sent |
| Click-to-open rate | unique clicks ÷ unique opens |
Top links
The Top Links panel shows the 10 most-clicked URLs in the campaign with both total and unique click counts. Useful for identifying the CTA your subscribers actually engage with.
Daily timeline
A chart of (date, opens, clicks) over the 14 days following send so you can see how engagement tails off after launch.
Subscriber timeline
The subscriber detail drawer includes an Activity timeline of every open, click, bounce, complaint, or unsubscribe event for that subscriber across every campaign. Use this to:
- Troubleshoot deliverability for a specific recipient (“why didn’t they get the last send?”)
- Gauge a subscriber’s engagement depth over time
- Trace back a complaint to the campaign that triggered it
Newsletter dashboard
The Newsletter section landing page is a workspace-wide dashboard. Open CampaignCanvas → Newsletter to see:
Subscriber tiles
- Total subscribers across all lists
- Subscribed — active memberships
- Unsubscribed, Bounced, Suppressed
- New in the selected window (default 30 days)
Subscriber growth chart
Interactive chart of net subscriber count over time — granular windows from 1 day to 1 year. Instantly spot where your list took off or stalled.
Scheduled & draft campaigns
List of what’s coming up and what’s still in progress. Click through to open the campaign editor directly.
Upcoming digest runs
When’s the next auto-digest firing? This tile lists the next few runs across all digest campaigns with their thresholds and audiences.
Latest campaigns
Recently sent campaigns with inline open and click rates. Click any row to drill into full analytics.