Data Availability
This page lists every feed, the API behind it, what granularity that API actually returns, how fresh it is, and where it goes blind. Read it before you trust any other page.
Nobody gets to 100% of impressions at user level. Anyone claiming otherwise is either counting differently or guessing. Coverage today is 83.5%, and it is derived from the table below: the 86.3% of impressions on per-impression feeds, less the 9.1% of AdMob volume served through Partner Bidding, which returns no impression-level revenue. Add up the column and you get the headline.
71% of active users are on an app version carrying the SDK. Adoption ramps as users update their app, not on the release date, so per-user figures cover this share of users and no more. Everything above it is measured on that share, then extended.
Share of impressions where we receive a revenue value tied to your user id. Realistic ceiling is 85%.
30 days. Usable for scoring, tiers and routing.
30 days. Counted in totals, modelled at cohort level, excluded from scores.
Two feeds are next-day. They are labelled next-day everywhere, never real-time.
Revenue sources
One row per feed. Granularity is what the API returns, not what we would like it to return.
| Source | API | Granularity | Freshness | Share of impressions | Revenue 30 d | Gap |
|---|---|---|---|---|---|---|
Google AdMob | AdMob SDK paid-event callback + AdMob Reporting API | per impression Revenue per impression, keyed to your user id. | real-time | 31.2% | $412,880 | Partner Bidding impressions return no impression-level revenue. 9.1% of AdMob volume. |
Google Ad Manager | GMA SDK paid-event callback + Ad Manager API | per impression Revenue per impression once the publisher enables the callback. | real-time | 14.6% | $193,240 | AdX web demand reports in aggregate only. |
AppLovin MAX | MAX SDK revenue callback + User-Level Ad Revenue API | per impression Real-time per impression via SDK. API file is user-level. | 8h after UTC day end | 22.8% | $301,760 | API file arrives 8 hours after UTC day end. SDK stream is the real-time path. |
ironSource / Unity LevelPlay retention 14 days | LevelPlay SDK impression callback + User Ad Revenue API | per impression Per-impression via SDK. Server API is next-day. | next-day | 9.4% | $124,400 | Server-side API is next-day only and retains 14 days. Older gaps cannot be backfilled. |
Prebid.js (web) | Prebid.js auction event listeners | per impression Full bid landscape: bidder, price, no-bid, timeout, win. | real-time | 8.3% | $109,860 | Bidder identity only. The bid response never names the buyer. |
Meta Audience Network | Meta Audience Network Reporting API | aggregate only Placement x country x day. No user or impression rows exist. | next-day | 9.8% | $129,720 | Modelled at cohort level. Excluded from all user scoring. |
Google AdSense / AdX (web) | AdSense Management API | aggregate only Site x ad unit x day. | next-day | 3.9% | $51,600 | No user-level revenue is available for this demand. |
86.3% of impressions come from feeds that report per impression. Real delivery is slightly lower than that headline because Partner Bidding volume inside AdMob returns no impression value.
Install attribution
Without a mobile measurement partner. Deterministic where the platform allows it, cohort where it does not.
The referrer string is passed to Publifter with your own user id. No MMP needed.
Attribution token is exchanged for campaign, ad group and keyword.
Conversion values arrive in windows, with crowd-anonymity thresholds. Revenue per user for these installs is modelled from the cohort.
Same limitation. Labelled cohort-level everywhere it appears.
Same limitation.
An upgrade, never a requirement. Publifter works without one.
No deterministic per-user join across the ad click and the session.
Acquisition cost
Your own credentials, read-only, no cost. CSV covers channels with no API.
| API | Scope | Granularity | Freshness |
|---|---|---|---|
| Meta Marketing API | ads_read | Campaign x day x platform | Hourly |
| Google Ads API | adwords read-only | Campaign x day | Hourly |
| TikTok Business API | Ad Account: read | Campaign x day | Daily |
| Apple Ads API | Campaign read | Campaign x keyword x day | Daily |
| CSV upload | Manual | Whatever you upload | On upload |
Revenue precision
Ad networks label each impression's revenue. We pass the label through.
Network reports the exact revenue for the impression.
Network reports a modelled value for the impression.
Value derives from your own floor or manual eCPM.
Aggregate-only demand. Never enters a user score.
What we cannot see
Stated plainly so you can plan around it.
- Who bought your inventory
A bid response does not name the buyer. In the open bidstream you see the bidder and the price, never the DSP or advertiser behind it. Only a curation deal or a direct data deal reveals that.
- Per-user revenue from Meta Audience Network
The Reporting API returns placement x country x day. There is no user or impression row to request. We model it at cohort level and exclude it from scoring.
- Per-impression revenue from AdMob Partner Bidding
Google stopped returning impression-level revenue for these impressions. They stay in revenue totals and drop out of user scores.
- LevelPlay history older than 14 days
The server-side user API is next-day and retains 14 days. A gap that is not collected inside that window is gone for good.
- Anything about your users personally
No names, emails, phone numbers or advertising identifiers. Scoring runs on your own opaque user id.
Cold start
What populates when. No empty screens, but no invented history either.
Within 48 hours
Within 48 hours
First file check, then every 15 minutes
Needs 30 days of user-level data
Needs 30 days
Needs 14 days per active rule
While a surface is still collecting, it keeps its aggregate revenue views and sits out of scoring. We do not backfill a score from a shorter window and call it 30 days.