intermediate
analytics
reporting
metrics

Engagement Analytics

Per-campaign funnels, per-variant A/B stats, per-journey conversion, and how to read the data.

Levy Fleets TeamMay 18, 20269 min read

Engagement Analytics

Every campaign and journey in Engage has its own analytics view. The data lives in engagement_events, populated by webhooks from Postmark, Telnyx, and Expo as messages move through the pipeline.

Navigation

Access from Engage > Analytics, or click into a specific campaign or journey to see its detail view.

The Campaign Funnel

For every campaign, Engage shows a six-stage funnel:

StageWhat it counts
TargetedRows in campaign_sends for this campaign
Sentstatus = sent (handed off to provider successfully)
DeliveredProvider confirmed delivery via webhook
OpenedRecipient opened (email + push only; SMS has no "open" concept)
ClickedRecipient clicked a tracked link
ConvertedHit the campaign's goal in the attribution window

The funnel also shows drop-off counts:

  • Suppressed - filtered by suppression list before send
  • Bounced - provider returned bounce
  • Complained - recipient marked as spam
  • Unsubscribed - recipient opted out from this send

Computed Rates

Rates are computed against the most useful denominator, not always against targeted:

RateNumeratorDenominator
Delivery rateDeliveredSent
Open rateOpenedDelivered
Click rateClickedDelivered (or Opened, toggle in UI)
CTOR (click-to-open rate)ClickedOpened
Conversion rateConvertedDelivered
Bounce rateBouncedSent
Complaint rateComplainedDelivered
Unsubscribe rateUnsubscribedDelivered

The default denominator for each is the industry convention. If you want a different cut, the same data is available via the analytics API.

What "Good" Looks Like

These are rough benchmarks for transactional-adjacent marketing in micromobility - your numbers will vary:

MetricGoodGreatConcerning
Email delivery rate95%+99%+< 90%
Email open rate25%+40%+< 15%
Email click rate3%+8%+< 1%
SMS click rate8%+15%+< 3%
Push open rate5%+12%+< 2%
Email bounce rate< 2%< 0.5%> 5%
Email complaint rate< 0.1%< 0.05%> 0.3%
Unsubscribe rate< 0.5%< 0.2%> 2%

If complaint rate crosses 0.1%, Engage triggers an automatic warning. At 0.3% the per-subaccount Postmark stream is paused until support reviews.

Per-Variant Breakdown

If the campaign has A/B variants, the funnel splits per variant:

Variant A (subject: "Your scooter misses you")
  Sent:     1,000
  Open:       287  (28.7%)
  Click:       18  (1.8%)
  P(best):    12%

Variant B (subject: "Come back for 20% off")
  Sent:     1,000
  Open:       342  (34.2%)
  Click:       42  (4.2%)
  P(best):    87%

Variant C (subject: "Quick check-in")
  Sent:     1,000
  Open:       198  (19.8%)
  Click:        9  (0.9%)
  P(best):     1%

See A/B Testing for how the P(best) numbers work.

Per-Language Breakdown

For campaigns sent in multiple locales, the analytics page splits open and click rates per language. If your Spanish variant has a 45% open rate while English is at 25%, you know your Spanish copy is resonating.

Conversion Attribution

A "conversion" is hitting the campaign's configured goal within the attribution window. Common goals:

GoalTriggers
Took a rideride.ended within 7 days of send
Topped up walletwallet.topped_up within 7 days
Activated subscriptionsubscription.activated within 14 days
First riderides.total_count goes from 0 to 1 within 14 days

The default attribution window is 7 days. Conversions are last-touch in v1 - the most recent send that the rider engaged with gets the credit.

Time-Series Charts

Every campaign and journey has a time-series chart that shows engagement events over time:

  • Hourly granularity for the first 48 hours after send
  • Daily granularity beyond that
  • Stacked by event type (delivered, opened, clicked, bounced, complained)

This is the best view for spotting send-time problems - if you blasted at 3 PM ET and the opens cluster around 9 AM PT the next morning, you know your West Coast riders are waking up to your email instead of seeing it fresh.

Journey Analytics

For journeys, the analytics view shows:

MetricWhat it counts
Enteredjourney_runs created
Currently activeexited_at IS NULL
Exited (goal hit)Reached a goal node
Exited (terminal)Reached exit node without goal
Goal rateGoal-hit divided by entered

You also get a step-by-step funnel: how many riders made it past each node, how many dropped off at the wait, how many got branched into the "if_false" path. This is how you find the step that's killing your journey performance.

Per-Subaccount Rollups

The top-level Analytics page rolls up metrics across all campaigns and journeys in your subaccount:

  • Total sends this month (per channel)
  • Aggregate open / click / conversion rates
  • Top 10 campaigns by conversion count
  • Top 10 journeys by goal hits
  • Unsubscribe trend (with alert if growing > 1% per month)

Exporting

Click Export on any analytics view to download:

  • Funnel CSV
  • Per-variant CSV
  • Per-event CSV (raw engagement_events rows)

The export honors RLS - you only get rows for your subaccount.

Webhook Backlog

If your analytics look frozen ("delivered" stuck at 0 even though sends went out hours ago), the provider webhook ingest may be backed up. Check Engage > Settings > Diagnostics for webhook lag - normal is under 10 seconds.

Retention

engagement_events has 90 days of hot retention. After 90 days, events are archived to cold storage via the nightly engage-archive cron. Aggregate analytics (totals, rates) remain available indefinitely - the raw per-event timestamps are what gets archived.

If you need older raw events for a regulatory request or deep analysis, contact support for an archive restore.

Best Practices

  • Tag your campaigns consistently. Use a naming convention like [date] [audience] [campaign] so you can scan the list later.
  • Define goals up front. A campaign without a goal is just a vanity metric. "Top-up rate within 7 days" is a goal. "Open rate" is not.
  • Watch the trend, not the snapshot. A single campaign's open rate is noisy. The 30-day average is signal.
  • Spot suppression drift. If your "delivered" count is 80% of "sent" instead of 99%, you have a deliverability problem - usually a dirty list or a deliverability-related complaint cycle.

Troubleshooting

Delivered count is much lower than sent

Either bounces are spiking (check the bounce rate) or provider webhooks are backed up (check Diagnostics).

Open rate is unusually high (60%+)

Apple Mail Privacy Protection inflates open rates by pre-fetching pixel-tracker images. Numbers above 50% on email are not believable without correction. Use click rate as your primary signal.

Click rate is 0% but Postmark shows clicks

Check that the campaign template's links use the Engage click-tracking wrapper. If you hand-rolled an <a href> without the wrapper, Postmark may track it but Engage won't see the event.


Need Help?

For analytics help, contact support@levyelectric.com.