Skip to main content

Documentation Index

Fetch the complete documentation index at: https://documentation.onesignal.com/llms.txt

Use this file to discover all available pages before exploring further.

A news and media messaging strategy targets sites and apps where success depends on session frequency, category-specific opt-in, paywall conversion, and subscriber retention. If you publish content across multiple verticals and your growth depends on bringing readers back daily, this guide is for you. This page is the implementation hub: which user identifier to set, what reading and category data to capture, which segments to build, and which Journeys drive opt-in, paywall conversion, and re-engagement. Each section links to the canonical docs for deeper detail.

Acquire

Convert anonymous traffic into opted-in readers with the Category Prompt and a category-aware Welcome Journey.

Convert

Turn repeat paywall hitters into subscribers with a graduated cadence of value reminders and offers.

Retain

Bring back inactive readers on a 7 / 14 / 30 day cadence and re-engage lapsed subscribers separately.

Implementation roadmap

Work through these steps in order. Each one links to its section below.
1

Assign External IDs

Set a stable, app-side identifier on every authenticated reader so push, email, and SMS tie to one profile across reinstalls and devices. Jump to section.
2

Add reader properties as Tags

Start with account_type, category-interest Tags (cat_breaking_news, cat_sports, etc.), and last_visit_date. These power your category routing and re-engagement segments. Jump to section.
3

Send reader actions as Custom Events

Fire article_read, paywall_hit, newsletter_subscribed, and subscription_started from your site or app. Jump to section.
4

Build lifecycle Segments

Audience groups such as Active readers, Paywall hitters, Subscribers, and Inactive readers (7 / 14 / 30 days). Jump to section.
5

Create lifecycle Journeys

Category opt-in, paywall conversion, breaking news alerts, and re-engagement. Jump to section.

Identify your readers with External IDs

External IDs preserve identity across installs and tie push, email, and SMS to one reader profile. Use the unique identifier from your CMS, account, or auth platform — for example, your site’s user_id, an Auth0 uid, or your subscription-platform customer_id. Set the External ID at signup, on every login, and on session resume. The OneSignal SDK does not assign it for you, and assigning it late or sporadically breaks attribution between category opt-in, paywall hits, and downstream subscription conversion. For anonymous readers (the majority of news traffic), the OneSignal-assigned anonymous user ID still ties Tags and behavior to a Subscription. Promote anonymous profiles to authenticated profiles by setting the External ID the moment a reader logs in or subscribes — that single call merges the anonymous activity with the new identity.

External ID setup

Assign a unique reader identifier so category preferences, reading history, and notifications follow the reader across devices.
Tags persist on the reader profile (current state); Custom Events record discrete moments (what just happened). Use both — Tags drive category routing and segmentation, Custom Events trigger Journey entry and Wait Until conditions. News and media leans heavily on Tags for category opt-in (one Tag per topic) so you can target exactly the readers who care about a given story, and on Custom Events for reading behavior (article_read, paywall_hit) so retention and conversion Journeys react to what readers actually do.

Tags

Tags persist on the reader profile and are used for segmentation and personalization. Two conventions apply depending on the Tag’s role:
  • Toggle Tags (single binary signal — newsletters, subscription_auto_renew): set the Tag to 1 when true and remove it when false. Segment with “tag exists” rather than storing 0/false.
  • Checklist Tags (state of every option matters — categories): set Tags only when the reader actively engages with category preferences — for example, when the Category Prompt is dismissed or when the reader visits your preference center page. Don’t set them up front for every reader. Choose the default value to match the model you want: 0 for explicit opt-in (reader ticks to receive each category) or 1 for opt-out (categories are enabled by default; reader unticks to remove). Use tag exists to find readers who have engaged with preferences at all, and tag = 1 to target the opted-in followers of a specific category.
If you only set up four kinds of Tags, start with account_type, your category-interest Tags, last_visit_date, and first_name. They power most starter Journeys.

Subscription and lifecycle state

TagValuesUse
account_typefree / metered / paid / lapsedPaywall and lifecycle state — drives Journey entry, exit, and audience filters. Set only on identified users (External ID + completed profile); leave unset for anonymous visitors.
subscription_tierdigital / print_plus_digital / premium (your tiers)Tailor offers and disclosures by subscription tier.
subscription_start_dateUnix timestamp (seconds)Drive anniversary and tenure-based messaging. Use OneSignal time operators to compare against the current time.
subscription_renewal_dateUnix timestamp (seconds)Drive renewal-window messaging (e.g., “renews in 7 days”) and post-expiration win-back. Pair with time operators.
subscription_auto_renew1 (set when auto-renew is on)Suppress renewal-prompt messaging for subscribers who will auto-renew. Remove the Tag when the reader turns auto-renew off — that is your highest-priority retention moment.

Category interests

One Tag per category lets you target precisely the readers who opted in to a topic. Set each cat_* Tag the moment the reader engages with category preferences — when the Category Prompt is dismissed, or when they first visit your preference center page. Pick the default value to match your model: 0 for explicit opt-in (reader must tick to receive) or 1 for opt-out (all enabled by default, reader unticks to remove). Update the Tag whenever the reader changes their choice. Segment with tag exists to find readers who have made a choice at all, or with tag = 1 to target the opted-in followers of a category. See Auto-segment users by page visit for adding category Tags automatically based on which sections a reader browses.
TagValuesUse
cat_breaking_news0 / 1Target breaking news alerts.
cat_world / cat_local / cat_politics0 / 1Per-vertical opt-in segments.
cat_business / cat_technology / cat_sports0 / 1Per-vertical opt-in segments.
cat_culture / cat_lifestyle / cat_opinion0 / 1Per-vertical opt-in segments.

Newsletter subscriptions

One Tag per newsletter, separate from on-site category Tags. A reader can opt in to the Morning Briefing newsletter without opting in to the broader cat_breaking_news push category — keep the two namespaces distinct so Journeys target the right channel and product. Set the Tag from your newsletter_subscribed event handler and remove it on newsletter_unsubscribed.
TagValuesUse
nl_morning_briefing1 (set when subscribed)Target morning newsletter subscribers; gate exit from the newsletter-onboarding Journey.
nl_breaking_daily / nl_evening_recap1 (set when subscribed)Per-newsletter opt-in segments for cross-promotion and re-engagement.
nl_weekly_<vertical>1 (set when subscribed)Vertical-specific weekly newsletters (e.g., nl_weekly_politics, nl_weekly_business).

Engagement and behavior

TagValuesUse
last_visit_dateUnix timestamp (seconds)Drive recency-based re-engagement at 7 / 14 / 30 days.
total_articles_readinteger (as string)Power active-reader segments and habit-strength signals.
favorite_sectionstring (e.g., politics, sports)Personalize subject lines and push copy with the reader’s most-read section.
metered_articles_remaininginteger (as string)Articles left in the reader’s metered allowance this period. Drives proactive paywall-approach messaging (e.g., “1 free article left this month”) — a higher-converting moment than after the wall.
paywall_hits_30dinteger (as string)Identify readers who repeatedly hit the paywall — high-intent conversion targets.

Personalization

TagValuesUse
first_namestringPersonalize message content (e.g., Hi {{ first_name }}).
subscription_pagestringTag the page the reader subscribed from — see Tag with subscription page. Useful for routing source-specific welcome messaging.

Add user data tags

Add key-value pairs to reader profiles for category routing, segmentation, and personalization.

Custom Events

Send a Custom Event for each reader action you want to react to. Events are stored shorter-term than Tags but can carry properties (article ID, category, author, paywall threshold), making them ideal for Journey entry triggers and Liquid personalization. Use lowercase snake_case for event names and keep them consistent across your site and apps.
EventUse case
signup_completedWelcome Journey entry.
article_readEngagement signal. Carries article_id, category, and author as properties for personalization and segmentation.
paywall_hitPaywall conversion Journey entry. Carries the article that triggered the wall as a property.
subscription_startedExit paywall conversion Journey; thank-you and onboarding message.
subscription_cancelledWin-back Journey entry.
newsletter_subscribed / newsletter_unsubscribedManage per-newsletter Tags and exit/reentry of newsletter-specific Journeys.
comment_posted / share_clickedEngagement signals — useful for power-reader and viral-loop Journeys.
breaking_news_publishedBackend-fired event that triggers a category-targeted broadcast Journey.

Custom Events

Capture reader actions and use them to trigger Journeys or Wait Until steps.

Segments

Combine Tags and Custom Events into segments. Start with these eight:
SegmentDefinition
New visitorsFirst Session < 7 days ago. Onboarding and category opt-in target.
Active readersarticle_read in the last 7 days, with N+ events. Daily or near-daily core.
Casual readersLast Session < 14 days ago AND fewer than N article_read events. Habit-formation target.
Paywall hitterspaywall_hit in the last 30 days AND account_type = "free". Highest-intent conversion segment.
Subscribersaccount_type = "paid". Retention and engagement target.
Lapsed subscribersaccount_type = "lapsed". Win-back audience — keep separate from general re-engagement.
Inactive 7 / 14 / 30 daysLast Session > 7 / 14 / 30 days ago. Three re-engagement tiers with progressively stronger asks.
Category followerscat_<category> = "1". One segment per opted-in category for breaking news targeting.
Mature news setups run 30+ segments split by section, geography, subscription tier, device, and source channel. Start with the eight above plus a segment per top-level category, then add depth (paywall threshold, newsletter cohort, time-of-day reader) as your Journeys grow.

Segmentation

Group readers by shared characteristics to target Journeys and category broadcasts.

Journey examples

With Tags, Custom Events, and segments in place, build Journeys against them. News and media Journeys mix channels by intent — push for breaking news and time-sensitive nudges, in-app for category opt-in and paywall messaging, email for newsletters and longer-form re-engagement, and SMS sparingly for critical subscriber communications. The lifecycle has five core flows:

Category opt-in onboarding

Welcome Journey that nudges readers to complete their profile and pick categories using Yes/No branches and Wait Until steps.

Breaking news broadcasts

Backend-fired breaking_news_published events targeted to readers with the matching cat_* Tag.

Paywall conversion

Convert repeat paywall_hit readers with a graduated cadence of value reminders and offers.

Re-engagement (7 / 14 / 30 day)

Bring back inactive readers with category-aware content and offers calibrated to inactivity tier.

Subscriber win-back

Re-engage lapsed readers with renewal offers separate from general re-engagement.

Common news and media patterns

  • Capture category interests at first prompt. Use the Category Prompt to combine push opt-in with category selection in a single moment. Every category presented gets a cat_* Tag at prompt time — 1 for the categories the reader ticks, 0 for the rest — exactly the data you need for targeted broadcasts. Apps that segment broadcasts by interest typically see materially higher click-through rates than apps that send to all opt-ins.
  • Auto-tag readers based on what they read. For web, Tag page visits automatically applies a cat_* Tag the first time (or N-th time) a reader visits a section. This builds an interest profile even for readers who never explicitly opt in, and turns passive browsing into actionable segmentation.
  • Tag with subscription source. Tag with subscription page records where a reader subscribed from. Source-aware welcome messaging materially outperforms generic copy — a reader who opted in from a sports article responds to different copy than one who opted in from politics.
  • Track notification engagement to refine targeting. Tag with notification data records which topics a reader actually clicks. Over time, this builds a behavioral interest profile distinct from declared opt-ins — readers often click broader content than they explicitly asked for.
  • Three-tier re-engagement cadence. Set up three inactivity segments at 7, 14, and 30 days and run a separate Journey for each. The 7-day Journey leads with category-aware content; the 14-day Journey adds a value reminder or paywall promo; the 30-day Journey is the last call before treating the reader as churned. See Retention Journeys for the Journey shape.
  • Use the Custom Link Prompt for less intrusive opt-in. Place a Custom Link Prompt inline with content (e.g., “Get notified when we publish new pieces in this section”) instead of a modal. This converts higher on long-form content where the reader is already invested.
Effective re-engagement copy includes:

Recent breaking news in the reader’s opted-in categories

Top stories from one of their tracked categories of interest

Limited-time offers for paywalled content access

Discounts on paid memberships or annual upgrades
Measure success by category opt-in rate, push CTR by category, paywall-to-subscription conversion rate, and inactive-reader return rate at 7 / 14 / 30 days — not just opens or total volume.

FAQ

How is this different from the Mobile-first strategy?

Mobile-first targets subscription, freemium, and trial-driven apps where success is measured by trial-to-paid conversion. News and media overlaps on the data foundation (External IDs, Tags, Custom Events, segments) but adds category interest as a first-class concept and treats paywall conversion as the primary monetization moment. Most news traffic is also web-first and largely anonymous, which shifts the channel mix toward web push and category-aware broadcasts.

Should I use a Tag or a Custom Event for category interest?

Use a Tag (cat_breaking_news = "1"). Category opt-in is a persistent state — the reader either wants breaking news alerts or doesn’t — and Tags are designed for state-based segmentation. Custom Events represent discrete moments (the act of reading an article in that category, the act of opting in), which you may also want to send for analytics and funnel tracking.

How many categories should I expose at first prompt?

Three to seven top-level categories work best. Fewer than three feels like too narrow a choice; more than seven overwhelms the prompt and depresses opt-in. Use the categories that match your top-level navigation. Sub-categories can be added later via in-app settings or auto-tagged from page visits.

How do I avoid over-messaging readers who opt in to many categories?

Apply a Journey-level frequency cap on broadcast Journeys (e.g., at most one push per reader per 4 hours), and use a Last Push Sent filter to suppress sends to readers who received a recent push in the same or related category. Alternatively, set a daily cap on the segment side. Over-messaging is the fastest way to lose hard-won opt-ins.

Do I need data integrations to use these Journeys?

No. You can build basic re-engagement and category-aware breaking news using the Category Prompt and dashboard-only segments like “First Session” and “Last Session.” Custom Events and the auto-tagging integrations give you precise reading-behavior triggers, but they are not required to ship the first version.

What about apps that mix news with other formats (e.g., video, podcasts)?

The data foundation extends naturally. Add format Tags (format_video = "1", format_podcast = "1") alongside category Tags and use them as filters on top of the base segments. Each format typically gets its own Custom Events (video_played, podcast_episode_completed) that feed into the same lifecycle Journeys with format-specific copy.

Permission requests

Configure the Category Prompt and Custom Link Prompt referenced throughout this guide.

Auto-segment by page visit

Tag readers with cat_* based on the sections they actually browse.

Auto-segment by subscription page

Tag readers with the page they subscribed from for source-aware messaging.

Tag with notification data

Track which topics readers actually click and segment on revealed interest.

Mobile-first lifecycle Journeys

Welcome and retention Journey patterns adaptable to news onboarding and re-engagement.

Event-driven Journeys

Trigger broadcasts from breaking_news_published and other backend-fired events.