Campaign analytics in Adapty Mail

Adapty Mail tracks every SES delivery event and every revenue event attributed to an email click. Metrics are exposed per variation row in two places:

  • Flows page: Inline with each segment row in a trigger view, regardless of whether the row’s content is a campaign or an A/B test.
  • A/B Tests page: For A/B tests only — this is where you compare variations side by side.

The metric set is identical in both views. There’s no standalone Analytics dashboard; analytics live next to the rows being measured.

What’s tracked per variation

Each variation row exposes the following raw counts:

  • Sends: Emails dispatched to SES.
  • Deliveries: SES-confirmed inbox deliveries.
  • Bounces: SES-reported bounces. Hard and soft bounces aren’t distinguished — both count as one Bounce.
  • Opens: Pixel loads. Apple Mail Privacy Protection pre-fetches images on iOS 15+ and inflates this count — rely on clicks and revenue for stronger signals.
  • Clicks: Link clicks in the email body.
  • Unsubs: Unsubscribes from the footer link or the List-Unsubscribe header.
  • Purchases: Attributed purchase events, counted uniquely per scheduled email. A recipient who makes multiple purchases from the same scheduled email counts once.
  • Revenue: Sum of attributed revenue (USD) across subscription starts, renewals, and one-time purchases.

Derived rates

Each rate is computed from the raw counts. Denominators vary — pick the one that matches the funnel step you’re measuring.

RateFormula
Del RateDeliveries / Sends
Bounce RateBounces / Sends
Open/SendOpens / Sends
Open/DelOpens / Deliveries
Click/SendClicks / Sends
Click/DelClicks / Deliveries
Click/OpenClicks / Opens
Purch/SendPurchases / Sends
Purch/DelPurchases / Deliveries
Purch/OpenPurchases / Opens
Purch/ClickPurchases / Clicks
Unsub/SendUnsubs / Sends
Unsub/DelUnsubs / Deliveries
Unsub/OpenUnsubs / Opens
Rev/SendRevenue / Sends

Revenue attribution

Revenue is attributed via last-click on a tracked link:

  1. When a recipient clicks any link in an email, Adapty Mail stores the scheduled_email_id against that profile in a short-term store.
  2. If a purchase event arrives afterward with no existing attribution, Adapty Mail back-fills the stored scheduled_email_id onto the transaction — provided the purchase timestamp is after the click.
  3. Purchases without a preceding tracked click stay unattributed.

The tracked parameter is scheduled_email_id. The checkout URL also carries the recipient’s identity via the {email} and {external_profile_id} placeholders so the web paywall can personalize the flow — that’s a separate mechanism from attribution. See Set up checkout.

Limitations

  • No consolidated dashboard: Metrics are surfaced inline in the Flows editor and on the A/B Tests page — there’s no cross-project or cross-campaign rollup view.
  • A/B Tests page hides campaign rows: Single-campaign flow rows are stored as internal A/B-test wrappers, but the A/B Tests page filters them out. To see their metrics, open the flow they’re attached to.
  • No date filter: The counts are cumulative from the first SES event on the variation — you can’t narrow to “last 7 days” in the UI.
  • No per-recipient drill-down: The analytics view doesn’t expose individual user email histories.
  • No soft vs hard bounce distinction: Every bounce, temporary or permanent, collapses into a single Bounce count.
  • Purchases count unique scheduled emails, not recipients: A recipient who matches multiple emails in the sequence can contribute more than once in aggregate across the variation.
  • Eventual consistency, not real-time: Data is aggregated from ClickHouse event tables. Fresh events usually appear within minutes, but there’s no streaming guarantee.