Push Metrics: What Counts and How to Read
How Push Notifications Work in Adset.Pro
Push notifications are a free retargeting tool for your subscriber base.
Mechanics:
The user installed the PWA and allowed push notifications → they are in the subscriber base (FCM token + click_id + country + behavior flags)
You create a push notification with a title, text, image, and link
Adset.Pro sends it via Firebase Cloud Messaging (FCM) — individually to the FCM token
The user sees the notification on their phone screen → clicks → lands on the landing page/offer
The Service Worker on the client records the display (
VIEW) and click (CLICK)
Business Value: This is a free channel for re-engagement. Once you have collected a subscriber base — you can send push notifications on a schedule or based on triggers (registration, deposit).
Types of Push Events
Each interaction with the push is recorded as a separate event in the events_push table:
Server Events (recorded by the tracker immediately)
Event | What it means |
|---|---|
| Push successfully sent via FCM (server received confirmation from Firebase) |
| Sending error: token expired, subscription invalid, FCM returned an error |
| Push not sent — subscriber did not pass targeting (behavioral filters: registered/deposited/redeposited) |
Client Events (recorded by the Service Worker on the device)
Event | What it means |
|---|---|
| Push displayed on the user's screen (event |
| The user clicked on the notification (event |
Key Difference:
SEND≠VIEW. A push can be sent (SEND) but not displayed: the user is in Do Not Disturb mode, the device is off, the browser is closed, or notifications are blocked at the OS level.
Subscription Events (in the main events table)
Event | What it means |
|---|---|
| Displayed request for push notifications |
| The user agreed to receive pushes |
| The user declined |
| The user unsubscribed later |
| Click on the push notification (duplicates PUSH_CLICK in the main statistics) |
Key Metrics of Push Campaigns
All metrics are available in the statistics (table events_push):
Metric | Formula | What it shows |
|---|---|---|
|
| Number of successfully sent pushes |
|
| Number of sending errors |
|
| Skipped (targeting did not match) |
|
| Pushes displayed on the screen |
|
| Clicks on notifications |
|
| Click-through rate — how many % of those who saw clicked |
|
| % successful deliveries from attempts |
|
| % errors during sending |
|
| % of delivered pushes that actually displayed |
Post-Click Attribution (table events_push_attributed)
Metric | Formula | What it shows |
|---|---|---|
|
| Registrations after clicking on the push |
|
| FTD (deposits) after clicking on the push |
|
| Redeposits after clicking on the push |
Interpreting Metrics
push_ctr: 2-5% — typical for gambling/betting. Above 5% — excellent creative. Below 1% — check the title, image, relevance
push_delivery_rate: 60-80% — normal for a fresh base. Below 50% — the base has "aged", many dead tokens
push_fail_rate: The flip side of delivery_rate. If > 40% — it's time to "clean" the base or update subscribers
push_view_rate: Usually 50-70% of SEND. The rest are Do Not Disturb, turned off devices
Push Statistics in the Interface
Main Analytics (Statistics Section)
In the statistics, you can group data by pushes:
Group Key | Description |
|---|---|
| Breakdown by specific push |
| Breakdown by time slot (for regular scheduled pushes) |
How to Select Push Data:
Use metrics from the Push group:
push_sends,push_views,push_clicks,push_ctr, etc.Add group by
event_push_idto see which push performed betterPush metrics work with the
events_pushtable — it connects automatically when querying push metrics
Post-Click Attribution (Push Analytics Section)
Post-Click Attribution tracks conversions that occurred after clicking on the push, within a specified attribution window.
Parameter | Value |
|---|---|
Attribution Window | Maximum time between clicking on the push and conversion |
By default | 72 hours |
How it Works:
The user clicks on the push →
event_click_idof the push click is recordedWithin N hours, the user registers or makes a deposit
The conversion is attributed to this push click via JOIN
events_push_attributed
Important Nuances:
Attribution to the push does not replace attribution to the ad click — one deposit can be attributed to both (the ad click in the main statistics + the push in Post-Click Attribution)
Recommended attribution window for gambling: 48-72 hours. Shorter — you lose delayed conversions. Longer — too much "noise"
Post-Click Attribution shows the contribution of pushes to the overall conversion picture, rather than replacing the main statistics
Types of Push Notifications
Regular Pushes (REGULAR / ONE_TIME)
Sent on a schedule via PushPlannerService:
The push calendar (PushGroup) determines the days and times of sending
Hourly scheduling is supported according to the user's timezone (
tz_GMTp3, etc.)FCM condition:
'team_X' in topics AND 'country_UA' in topics [AND 'tz_GMTp3' in topics]
Application: Promotions, bonuses, content, regular reminders.
Event Pushes (EVENT)
Sent when an event occurs via PushEventScheduler:
Triggers:
REGISTRATION,DEPOSIT, and othersDelayed sending with customizable delay is supported (via
eventSchedule)Waiting for subscription: if there is no subscription yet, the scheduler waits up to 2 hours with backoff (5s → 15s → 1m → 5m → 10m)
Application:
Welcome push after registration (after N minutes/hours)
Push reminder in case of no deposit
Re-engagement upon redeposit
Targeting Subscribers
Before sending, targeting is set based on behavioral flags and subscription parameters:
Behavioral Filters (push.targets)
Parameter | Values | Description |
|---|---|---|
|
| Filter by registration status |
|
| Filter by first deposit status |
|
| Filter by redeposit status |
Default Behavior: For most presets
redeposit=not_redeposited(do not send pushes to those who have already redeposited). The preset "Reg+ Dep+ Redep+" is the only one whereredeposit = redeposited.
Subscription Filters
Parameter | Description |
|---|---|
Country ( | Send only to users from specific GEOs |
Timezone ( | Send at the user's local time |
Campaign ( | Subscribers of specific campaigns (via PushGroup) |
Subscription Status | Only |
Practical Cases
Case 1: "Bonus for Registered but Not Deposited Users from UA"
targets:
registrations: registered
deposit: not_deposited
redeposit: all
Filter: campaign ∈ [UA-campaigns]
Case 2: "Trigger Push After Registration (after 1 hour)"
Type: EVENT
Trigger: REGISTRATION
Delay: 1 hour
Content: "Your bonus is waiting! Claim it right now"
Case 3: "Reactivation — Not Deposited in 3 Days"
Type: EVENT
Trigger: REGISTRATION
Delay: 72 hours
targets:
deposit: not_deposited
Content: "Don't miss your bonus — it expires in 24 hours!"
Macros in Push Text
In the title and body of the notification, you can use macros for personalization:
Macro | What it substitutes |
|---|---|
| Value of the offer from PWA settings (e.g., bonus size) |
| Random selection from a list of options |
Examples:
Title:
Bonus {offer.value} only today!
Body:
{random: Hurry to claim your bonus!, Your bonus is waiting!, Special offer for you!}
Tip: Randomization through
{random}reduces "banner blindness" — when a user sees the same text every day and stops clicking. Change the text each time to maintain CTR.
Reasons for Low Delivery
Low Delivery Rate (< 60%)
Reason | What to do |
|---|---|
Outdated FCM tokens | The base "ages" over time — this is normal. FCM automatically returns FAIL for invalid tokens |
User deleted PWA | The subscription becomes invalid. Solution: regularly attract new subscribers |
User blocked notifications | The token is removed from the base upon |
FCM unavailable (rare) | Resending is not provided. Usually recovers itself |
FAIL vs SKIP — What’s the Difference
Event | Reason | What it means |
|---|---|---|
| FCM error | Token invalid, subscription expired. Technical issue |
| Targeting did not match | Subscriber does not meet the conditions (already deposited, not registered, etc.). Logical solution |
If push_fail_rate > 40% — the base is significantly outdated. Solution:
Launch new campaigns to gather fresh subscribers
Focus on push metrics of fresh cohorts (last 30 days)
Push Groups and Campaigns
Campaigns are tied to Push Groups (PushGroup). This determines:
Which subscribers receive pushes from this group of campaigns
The calendar for sending regular pushes
General settings for all pushes in the group
FCM Topics: Subscribers are automatically subscribed to FCM topics:
team_{teamId}— for filtering by teamcountry_{ISO2}— for filtering by country (UA, KZ, UZ, etc.)tz_GMTp{N}— for filtering by timezone
Frequently Asked Questions
Q: I sent 10,000 pushes, but only 3,000 VIEW — where did the rest go?
Total: SEND + FAIL + SKIP = total number of processed subscribers.
FAIL— outdated tokens, FCM errors (usually 10-30% for a base older than a month)SKIP— targeting did not match (user already deposited, etc.)Of the remaining SEND: not all became VIEW — Do Not Disturb, turned off devices, blocked notifications
Q: push_ctr is low (< 2%) — what to do?
A/B test titles — create two pushes with different text, compare CTR
Check sending time — push at 3 AM in the user's timezone = low CTR
Personalize using macros —
{offer.value}and{random}increase relevanceAdd/change image — pushes with images usually have higher CTR
Check segmentation — a push "for everyone" is always less relevant than targeted
Q: How to track which specific push led to a deposit?
Open Push Analytics → Post-Click Attribution
Select metrics:
push_postclick_accepts,push_postclick_redepsGroup by:
event_push_id(orevent_push_id_name)You will see how many FTDs and redeposits are attributed to each push
In the main statistics: add metrics push_clicks and group by event_push_id — you will see how many clicks each push received. The ratio of clicks to conversions = effectiveness.
Q: Can I send pushes to users who installed the PWA but did not subscribe to notifications?
No. Pushes are sent only to subscribers (FCM token in the base). Installing the PWA ≠ subscribing to pushes:
PWA_INSTALL— PWA installedNOTIFICATION_SUBSCRIBE— user agreed to receive pushes (this is a separate event)NOTIFICATION_DECLINE— user declined
Usually, 40-70% of those who installed the PWA subscribe to pushes. To increase subscriptions: optimize the design of the request, show it at the right moment (not immediately upon opening).
Q: How does sending pushes via FCM condition vs tokens work?
Adset.Pro supports two modes:
Condition (bulk): FCM condition of the form
'team_X' in topics AND 'country_UA' in topics— sent in one request to all suitable devices. Fast, scalableToken (individual): Sending to a specific FCM token — used for event pushes (EVENT) where personalization is needed
