Skip to main content

Overview

OneSignal provides multiple ways to measure message performance, understand user behavior, and export engagement data. Whether you are reviewing campaign results in the dashboard or sending events to your internal analytics stack, this page gives you a complete picture of what data is available and how it is structured. Use this guide to:
  • Understand which analytics exist and where to find them
  • Learn how message events and outcomes are attributed
  • Decide when to use reports, trends, or exports
Jump to common advanced analytics features:

Message reports

Every message sent through OneSignal’s API or Dashboard > Messages form has a message report. These reports show delivery, engagement, and outcome metrics for that specific message. You can view reports in the OneSignal Dashboard or retrieve them programmatically using the:
Each message has a unique message ID. Analytics only exist if a message ID was created (for example, API requests that fail validation do not create reports).
If you send messages using Journeys or Templates (including Transactional Messages), use Templates analytics to see aggregated performance instead of reviewing each message individually.
Engagement Trends show how message activity changes over time across your entire app. These charts help you identify seasonality, spikes, or long-term engagement changes. Use Engagement trends to track message:
  • Sends (aka Delivered, Impressions)
  • Opens and clicks
  • Unsubscribes

Engagement Trends chart in the Dashboard

Subscription Trends show how Users’ Subscriptions subscribe and unsubscribe to messaging over time, broken down by channel. Use this chart to understand:
  • Growth or decline in subscribed users
  • The impact of permission prompts
  • Unsubscribe spikes after campaigns

Subscription Trends chart in the Dashboard

MetricDescription
Total SubscribedThe count of all subscribed Subscriptions. Counts will fluctuate as users install and uninstall your app, clear browser data, subscribe and unsubscribe to your messages, or get deleted. For details on how these events are tracked, see Subscriptions.
New SubscribesThe count of subscription status changes from unsubscribed to subscribed. This includes newly created subscribed Subscriptions and current Subscriptions that subscribed to messages in the selected timeframe.
New UnsubscribesThe count of subscription status changes from subscribed to unsubscribed. This does not include newly created Subscriptions that never subscribed or denied the push prompt.

Outcomes

Outcomes measure what users do after sending messages. Outcomes help you understand downstream impact—such as purchases, sign-ups, or content views—not just clicks. Outcomes include:
  • Built-in engagement outcomes like clicks and confirmed deliveries
  • Custom Outcomes you define in your app or site

The Global Outcomes Chart in the dashboard.

Outcome attribution

Each outcome is attributed based on how the user interacted with messages before the action occurred.
AttributionWhen it applies
DirectThe user clicked the in-app message block, email link, or push notification which launched a new session (app was closed >30s), and triggered the outcome.
InfluencedThe user did not click a push notification, but opened the app within the influence window (default: 24 hours) and triggered the outcome. Applies to the 10 most recent push notifications.
UnattributedThe outcome occurred outside of any attribution window or click. Not linked to a specific message.

Influenced attribution

Influenced attribution applies only to push notifications and helps measure passive impact. How Influenced Outcomes work:
  • Configure the Influenced time period under Settings > Push & In-App > Influenced Opens (changes take effect per-device on the next new session).
  • As push notifications are sent, if the user doesn’t click it, but opens the app, they will be considered “influenced”.
  • This attribution is credited to up to 10 messages sent within the Influence time period.
    • Example: If your Influenced time period is 24 hours, you send 15 messages that day, and the user doesn’t click any of them, but opens the app and performs the action that calls our Outcomes SDK methods, the most recent 10 messages will be considered “influencing the Outcome”.
How an influenced outcome is recorded: An influenced outcome requires a push notification to be sent but not clicked, followed by a new app session that occurs within the influence window:
  1. A push notification is sent.
  2. The user opens the app without clicking the notification.
  3. The app stays open for at least 30 seconds to establish a session.
  4. The app is closed or backgrounded for at least 60 seconds.
  5. The user opens the app again, which creates a new session and triggers the influenced Outcome.
Any custom Outcomes that occur during this session are attributed as Influenced (up to the 10 of the most recent push notifications within the influence window).

FAQ

How long is message data retained?

Message TypeRetention Period
Dashboard-sent messagesLifetime of the app
API-sent messages30 days
Audience activity CSV30 days
Journeys messagesSee Journeys analytics

How to aggregate data across multiple messages?

Each message has a unique message ID, which makes manual aggregation via the API possible but inefficient. Recommended approach:

Which analytics should I use?

Use this section to quickly choose the right analytics tool based on your goal. Most teams use more than one option depending on whether they are optimizing campaigns, debugging delivery, or analyzing long-term behavior.
Your goalUse this
Review performance of a single messageMessage reports
Compare performance across many similar messagesTemplate analytics
Measure conversion across a multi-step flowJourney analytics
Track trends over time (opens, clicks, sends)Engagement trends
Monitor opt-ins and opt-outsSubscription trends
Measure downstream actions like purchases or sign-upsOutcomes / Custom Outcomes
Confirm delivery to individual devicesConfirmed delivery (push)
Send raw events to your own analytics stackEvent Streams
Export data for offline analysisCSV exports