Email metrics
What it is
The core campaign-analytics numbers, sourced from Smaily: delivered emails, opens, clicks, unsubscribes. They describe how the email performed; for the engine's revenue impact see engine revenue and incrementality.
How it is computed
- Delivered = sent minus bounces.
- Open rate = opens / delivered.
- Click rate = recipients who clicked / delivered.
- Campaign statistics are synced from Smaily and keep updating for up to ~35 days after sending — late opens and clicks change the numbers for weeks.
- Test sends that the operator has excluded from analysis are not part of campaign aggregates.
How to interpret it
- Open rate is inflated. Apple Mail's privacy protection (MPP) opens emails automatically even when no human looked at them. Use open rate to compare your own campaigns against each other (the noise is roughly uniform), not as absolute truth or for cross-channel comparison.
- Click rate is the most honest email-level signal — a click requires a human. The engine's rescue logic (engagement states) also trusts only clicks.
- A small number of unsubscribes is normal hygiene; a sharp spike after one campaign is a content or frequency signal.
Common misreadings
- "Yesterday's campaign is missing from analytics" — a campaign enters analytics after it reaches COMPLETED status in Smaily and the sync has run (it runs regularly). Also check that it was sent from the same Smaily account that is connected to the engine, and that it was a real campaign (not an automation — automations do not appear in the campaign list).
- "The numbers changed after the fact" — yes, for up to ~35 days; that is the late-opens re-sync, not a bug.
- "Lots of opens but no revenue" — see the MPP note and the "influenced purchase" explanation under attribution.
Technical background
Sync: lib/smaily/campaigns.ts (list + statistics for COMPLETED campaigns
finished < 35 days ago; idempotent upsert). Drafts (DRAFT) are never brought
into the campaign list, and campaigns deleted in Smaily are removed from the
list on the next sync. Cron sync-smaily-campaigns + admin "Sync now".
Test-send flag: smaily_campaigns.excluded. Event level (opens/clicks per
customer): Smaily action-log polling → email_events.
Last updated: 2026-07-11