OneSignal

Upsell & Expansion with OneSignal

How to drive expansion revenue using OneSignal. Step-by-step implementation guide with real examples.

RD
Ronald Davenport
March 30, 2026
Table of Contents

Why Upsell Timing Breaks Most SaaS Growth Plans

Most upsell attempts fail because they're triggered by time, not behavior. You send a "ready to upgrade?" email at day 30 whether the user has logged in twice or two hundred times. OneSignal gives you a way to fix that — by connecting real usage signals to targeted push and in-app messages that reach users at the moment they're actually ready.

This guide walks through a practical implementation using OneSignal's core features to identify expansion-ready users and move them toward an upgrade decision.

---

What OneSignal Actually Does Here

OneSignal is a push notification and in-app messaging platform. It is not a product analytics tool or a CRM. That distinction matters for this use case because the behavioral signals that indicate upgrade readiness — feature usage depth, seat count, API call volume — live in your database or your analytics stack, not in OneSignal natively.

What OneSignal does well is act on those signals. Once you pipe the right data in, you can segment precisely, trigger messages automatically, and test offers without touching your codebase repeatedly.

The features you'll use most:

  • Segments — dynamic user groups built from tags and data you send to OneSignal
  • Data Tags — key-value pairs attached to each user, synced from your backend
  • Automated Messages — trigger-based notifications sent when a user enters a segment or meets a condition
  • In-App Messages — overlay messages shown inside your product without requiring notification permissions
  • A/B Testing — built into both push and in-app message creation flows

---

Step-by-Step Implementation

Step 1: Define Your Upgrade-Ready Signals

Before touching OneSignal, decide what "upgrade ready" means in your product. Common indicators:

  • User has hit a usage limit (e.g., 3 of 3 free projects created)
  • User has used a feature gated behind a paid plan more than once
  • Team account has more than 2 collaborators on a free tier
  • User has been active for 14+ days and opened the product 5+ times in the last week

Write these down as specific thresholds. You need concrete numbers because you'll be encoding them as tag values.

Step 2: Send Behavioral Data to OneSignal via Data Tags

Use the OneSignal REST API or your server SDK to push tag values onto each user's OneSignal profile. This happens server-side, triggered by your application logic.

Example tags to send:

```

projects_created: 3

plan_type: free

collaborators_added: 4

sessions_last_7_days: 9

used_export_feature: true

```

OneSignal tags support strings and numbers. You can compare tag values in segment rules, so numerical tags like `sessions_last_7_days` are particularly useful for threshold-based logic.

Update these tags in real time as users take actions. OneSignal's SDK also lets you set tags client-side, which works for lightweight signals that don't require server verification.

Step 3: Build Segments Around Upgrade Intent

Navigate to Audience > Segments in your OneSignal dashboard. Create a new segment using tag filters.

An example "Upgrade Ready — Free Power User" segment:

  • `plan_type` is `free`
  • AND `projects_created` >= `3`
  • AND `sessions_last_7_days` >= `5`

Segments in OneSignal update dynamically. As users meet or exit these conditions, they move in and out of the segment automatically.

Build multiple segments for different upsell contexts:

  • Users who hit a hard limit (immediate, high-intent)
  • Users with high engagement but no limit hit yet (warmer nurture)
  • Team accounts approaching seat limits (expansion into higher team tier)

Getting the most out of OneSignal?

I'll audit your OneSignal setup and show you where revenue is hiding.

Step 4: Create Automated Messages Triggered by Segment Entry

Under Messages > Automated, create a new automation. Set the trigger to "User enters segment" and point it at the segment you just built.

For a hard-limit trigger (user created their 3rd free project), the push notification message should be direct:

  • Title: You've used all 3 free projects
  • Body: Upgrade to Pro and create unlimited projects. Your work is waiting.
  • CTA URL: Your upgrade page with a UTM parameter so you can track conversion

For in-app messages (which show inside the product and convert better for upsell because the user is actively engaged), use In-App Messages under the Messages tab. Set the trigger to match the same segment or a specific tag condition.

In-app message format that works for upsell:

  • Headline: You're hitting your project limit
  • Body: Upgrade to Pro for $29/month and remove limits permanently.
  • Primary button: Upgrade Now (links to checkout)
  • Secondary button: Remind me later (sets a tag to suppress for 3 days)

The "Remind me later" flow requires a small piece of logic: when the user taps that button, set a tag like `upsell_snoozed_until: [timestamp]` and add that as an exclusion filter in your segment or automation rules.

Step 5: Run A/B Tests on Offer Framing

OneSignal's A/B Testing feature lets you split message variants within a single automated message. Test:

  • Feature-focused vs. limit-focused messaging ("Unlock advanced exports" vs. "You've reached your export limit")
  • Monthly vs. annual pricing emphasis
  • Specific discount offer vs. standard price

Set a primary goal (link click or custom conversion event) and let OneSignal determine a winner automatically after a statistically significant sample.

Step 6: Track Conversion Back Into OneSignal

When a user upgrades, update their tag immediately:

```

plan_type: pro

upgraded_at: [timestamp]

```

This removes them from your upgrade-ready segments instantly, stopping further upsell messages. It also lets you build a separate segment for recently upgraded users if you want to trigger an onboarding sequence into paid features.

---

Limitations to Know Before You Build

OneSignal is not the right tool for every part of this problem. Be clear-eyed about what it cannot do:

  • No native behavioral tracking. OneSignal does not observe what users do in your product on its own. All behavioral data must be pushed in via API or SDK. If you don't have the engineering bandwidth to keep tags updated in real time, the segmentation breaks down.
  • No multi-step visual workflows. Unlike tools like Braze Canvas or Iterable Workflow Studio, OneSignal has no drag-and-drop journey builder. Automated messages are single-trigger, single-message flows. Complex nurture sequences require multiple automations with careful tag logic.
  • Push requires opt-in. Web push notifications require permission from the user. On mobile, iOS opt-in rates average below 50%. In-app messages bypass this, which is why they're more reliable for upsell flows inside the product.
  • Limited revenue attribution. OneSignal can track click-throughs, but connecting those clicks to actual revenue requires you to close the loop on your side with UTM tracking and your payment processor data.

---

Frequently Asked Questions

Can OneSignal trigger messages based on in-app events without a backend integration?

Partially. The OneSignal client SDK lets you set tags directly from the front end, so if your product's front end has access to the relevant event data, you can update tags and trigger segment changes without a server call. However, for anything involving server-verified data — like billing status or API usage counts — you need the backend integration. Client-side tags are easier to manipulate and should not be used for anything tied to entitlement or pricing logic.

What's the difference between using push notifications vs. in-app messages for upsell?

In-app messages show when the user is actively inside your product. That active context makes them significantly more effective for upsell conversion — the user is already engaged. Push notifications work for re-engagement: pulling a user back into the product when they're approaching a limit they haven't noticed. Use both in sequence. Push notification to drive them back; in-app message to close the upgrade when they arrive.

How do I prevent users from being bombarded with upsell messages?

Build a frequency cap using tags. When a upsell message is sent, write a tag like `upsell_shown_at: [Unix timestamp]`. Add a filter to your segment or automation that excludes users where `upsell_shown_at` is less than 72 hours ago. You can also use OneSignal's built-in Intelligent Delivery and frequency cap settings at the account level, though the tag-based approach gives you finer control per campaign type.

Does OneSignal work for B2B expansion (selling more seats) or only individual upgrades?

It works for both, but B2B seat expansion requires you to model the account at the user level. OneSignal tracks individual users, not accounts. You need to tag each user with account-level data — `account_seat_count: 5`, `account_plan: team_free` — pushed from your backend whenever account-level changes happen. Once those tags exist, you can segment all users on a given account and message the account admin (filtered by a tag like `is_account_admin: true`) when expansion thresholds are met.

Related resources

Get the Lifecycle Playbook

One framework per week. No fluff. Unsubscribe anytime.