Skip to main content

Overview

OneSignal records metrics at each step of a message’s lifecycle, from when OneSignal hands the message to a third-party provider (FCM, APNs, Twilio, or an email ESP) through delivery, engagement, and any follow-up events. In-app messages and Live Activities have different lifecycles, which are covered in their own sections below. Use this page to reconcile numbers across the dashboard, API, CSV exports, and Event Streams, or when building internal reports. Each channel section contains:
  1. Terms: the glossary of metrics and their definitions.
  2. Delivery lifecycle: a visual representation of where each metric is captured.
  3. Metrics mapping: the name of each metric across every OneSignal surface (dashboard, API, CSV, Event Streams).
In the mapping tables, columns are surfaces (where the metric appears) and rows are concepts (what the metric represents).

Channel metrics comparison

Different channels have different delivery states and engagement metrics. The table below lists which metrics apply to each channel.
  • Some metrics have both Total and Unique variants in the per-channel tables. This applies to Opens (email) and Clicks (email, SMS/RCS, in-app).

Push terms

Push Unsubscribed and email Unsubscribed are different concepts that share a label. Email Unsubscribed counts users who took an opt-out action in response to that message. Push Unsubscribed counts Subscriptions found unreachable (uninstalled, cleared browser data, or opted out and not returned) at send time, detected when the push service rejects the token. Because token rejection lags the actual opt-out by several sends (and 14+ days on iOS, see Push lifecycle), a push Unsubscribed count cannot be attributed to the timing or content of the individual message it appears on. A high push Unsubscribed count on one send usually reflects accumulated churn since your previous send, not that send itself.

Push lifecycle

Push metrics mapping

Dashboard

API, CSV, and Event Streams

1 The API also includes per-platform metrics for all fields except remaining (for example, ios_clicked, android_clicked). 2 The composite Sent metric does not have a direct field in the View Message(s) API. To derive it, sum successful + failed + errored. Audience activity exports also do not include a Sent field. 3 In the View Message(s) API and Notifications CSV, the field name failed represents unsubscribed Subscriptions and errored represents delivery errors (what the dashboard calls Failed). This naming is preserved for backward compatibility.

Email terms

Total vs Unique clicks and opens Unique clicks and opens are counted once per Subscription, regardless of how many times that user opens or clicks the same email. Total clicks and opens count every interaction, including repeats from the same user.

Email lifecycle

Email metrics mapping

Dashboard

1 The dashboard uses different labels for the same metric across surfaces: Reported as Spam (stat cards, Journey stat cards), Spam (timeseries charts), and Complained (Audience Activity). All refer to recipients who marked the message as spam or junk.

API, CSV, and Event Streams

SMS/RCS terms

SMS/RCS lifecycle

SMS/RCS metrics mapping

Dashboard

1 Audience Activity combines Failed and Rejected into a single Failed & Rejected bucket. Stat cards and Journey stat cards show them separately. 2 Delivery Report timeseries charts break the provider-side failures into Failed (Errored) and Failed (Undelivered), which map to Provider Errored and Provider Undelivered. Stat cards roll these up under Failed.

API, CSV, and Event Streams

3 The sum of failed and errored (both recorded in OneSignal’s internal system when attempting to send to Twilio) is surfaced as Failed in the dashboard.

In-app terms

In-app lifecycle

There is no delivery lifecycle to consider. All metrics captured for an in-app message are from the device through the OneSignal SDK.

In-app metrics mapping

Dashboard

1 We exclude “Close Button” clicks from Total Clicks on the in-app message Delivery Report stat card. 2 While we don’t have a label on the dashboard for unique clicks, we show unique clicks count alongside the CTR.

Event Streams

Live Activities terms

Live Activities lifecycle

Live Activities metrics mapping

Dashboard

API, CSV, and Event Streams

1 The Event Streams names are shifted relative to the dashboard concepts: message.live_activity.sent maps to Delivered (accepted by APNs), and message.live_activity.delivered maps to Confirmed Receipt (acknowledged by the device). Wire report pipelines to the concept, not the literal event name. 2 As with push, the View Message(s) API and CSV field failed represents unsubscribed Subscriptions and errored represents delivery errors (Failed).

FAQ

Why don’t my dashboard and API counts match for push?

The dashboard Sent metric is a composite: it equals Delivered + Unsubscribed + Failed. The View Message(s) API does not return a direct sent field; sum successful + failed + errored to get the equivalent value.

Why does the Push API return failed for unsubscribes and errored for delivery errors?

The field names are preserved from an earlier version of the API. In the View Message(s) API and Notifications CSV, failed means the Subscription is no longer reachable (uninstalled, cleared browser data, or opted out) and errored means a delivery error that OneSignal will retry. The dashboard labels these as Unsubscribed and Failed respectively.

What’s the difference between Total Opens and Unique Opens?

Total Opens counts every open event, including repeat opens from the same recipient. Unique Opens counts each recipient at most once. The same pattern applies to Total Clicks vs Unique Clicks for email, SMS/RCS, and in-app messages.

Why does the Live Activities message.live_activity.sent event map to Delivered instead of Sent?

The event name is historical. message.live_activity.sent fires when APNs accepts the activity update (the Delivered concept), and message.live_activity.delivered fires when the device acknowledges receipt (the Confirmed Receipt concept). Use the mapping table above when configuring downstream analytics.

Why does Twilio’s delivery count sometimes differ from OneSignal’s Delivered for SMS/RCS?

OneSignal’s Delivered metric reflects carrier-confirmed receipt reported back by Twilio. Differences usually come from messages that are still in flight at the time you compare, late status callbacks from carriers, or messages that moved to Provider Undelivered after an initial acceptance. See the SMS/RCS lifecycle above for where each state is captured.

How do I map dashboard labels for SMS Failed to the timeseries chart?

The stat cards show a single Failed bucket, while the timeseries chart splits provider-side failures into Failed (Errored) (Provider Errored) and Failed (Undelivered) (Provider Undelivered). Audience Activity combines Failed and Rejected into Failed & Rejected.

Analytics overview

Tour the dashboards, APIs, and export tools OneSignal provides for measuring performance.

Confirmed Receipt

Platform requirements and SDK setup for the Confirmed Receipt metric on push and Live Activities.

Event Streams

Stream real-time message events to your warehouse using the event names in this glossary.

Engagement trends

Review aggregate engagement over time using the metrics defined here.

Exporting data

Export the Notifications CSV and other data sets referenced in the mapping tables.

Journey analytics

Measure conversion and drop-off across multi-step Journeys using Journey node reports.