Integration
Snippets to send Publifter revenue at the moment it happens: your own user id, the revenue value, currency and a precision label. Copy, paste, adjust the placement name.
Every snippet sends your own user id, never an advertising id. Publifter never asks for payment details or write access to your ad stack — the only write permission in the product is ads.txt / app-ads.txt hosting.
Callback snippets
Pick the SDK you use. Every snippet reports the same four fields.
func adDidRecordImpression(_ ad: GADFullScreenPresentingAd) {
guard let value = ad.responseInfo?.adValue else { return }
Analytics.report(
userId: currentUser.publisherUserId, // your own id, not an ad id
revenue: value.value.doubleValue,
currency: value.currencyCode, // e.g. "USD"
precision: value.precision == .precise ? "precise" : "estimated",
source: "admob",
placement: "rewarded_level_complete"
)
}Tags and pixels
Web and video inventory, no app release needed. Three tags, all pasted into your own ad server.
Third-party impression tracker on your Ad Manager creative
<!-- Paste as a third-party impression tracker on the GAM creative -->
<img
src="https://px.publifter.io/i?
pid=PUB-4821
&placement=%%PATTERN:placement%%
&cpm=%%CPM_MACRO%%
&uid=%%PATTERN:publisher_user_id%%
&cb=%%CACHEBUSTER%%"
width="1" height="1" style="display:none" alt="" />Counts the impression and, where your page sets a first-party user id, ties it to that user. It cannot carry a price for AdX or AdSense demand — those stay aggregate.
| Tag | Works with | Reports price per impression | Ties to your user id |
|---|---|---|---|
| Impression pixel | Ad Manager creatives, direct deals | only if the CPM macro is filled | when the page sets one |
| JS tag | Prebid.js, GPT display slots | yes, clearing price | yes |
| VAST wrapper | Video and CTV players, GAM video line items | yes, via AUCTION_PRICE | if the player passes an id |
None of these change your Ad Manager setup. They sit on a creative or in your own wrapper and you can remove them yourself at any time. AdX and AdSense demand stays aggregate whichever tag you use, so those impressions are counted but never scored per user.
Live event stream
Impression-level revenue callbacks as they arrive, most recent first. Seeded demo data, not your live traffic.
| Time | Source | Placement | User id hash | Revenue | Precision |
|---|---|---|---|---|---|
| 1m ago | Ad Manager | Native — feed slot 3 | u_cb1c1650 | $0.0440 | precise |
| 1m ago | AppLovin MAX | Rewarded — level complete | u_07c7c51e | $0.0269 | estimated |
| 1m ago | AdMob | Rewarded — level complete | u_fbd9b3a7 | $0.0317 | precise |
| 1m ago | Ad Manager | Native — feed slot 3 | u_25ada490 | $0.0247 | precise |
| 59s ago | Ad Manager | Native — feed slot 3 | u_8eab5359 | $0.0162 | precise |
| 55s ago | AdMob | Banner — home | u_9a166a5b | $0.0365 | precise |
| 50s ago | AppLovin MAX | Rewarded — level complete | u_734a8bf2 | $0.0206 | estimated |
| 46s ago | Ad Manager | App open | u_b65e2218 | $0.0217 | precise |
| 42s ago | Ad Manager | App open | u_f0023b66 | $0.0402 | precise |
| 38s ago | Ad Manager | App open | u_6c1493bb | $0.0141 | precise |
| 34s ago | Ad Manager | App open | u_385e98c5 | $0.0333 | precise |
| 29s ago | Ad Manager | App open | u_5b023456 | $0.0150 | precise |
| 25s ago | AdMob | Rewarded — level complete | u_661ab511 | $0.0023 | precise |
| 21s ago | Prebid.js | Web — in-article | u_b1a184bf | $0.0317 | precise |
| 17s ago | Ad Manager | App open | u_f3a9154d | $0.0127 | precise |
| 13s ago | AppLovin MAX | Interstitial — session end | u_c7028d64 | $0.0399 | estimated |
| 8s ago | LevelPlay | Rewarded — level complete | u_a3c615d3 | $0.0106 | estimated |
| 4s ago | AdMob | Banner — home | u_22d89be4 | $0.0324 | precise |
Revenue precision breakdown
Share of impressions per source labelled precise, estimated or publisher-provided.
| Source | Precise | Estimated | Publisher-provided | Why |
|---|---|---|---|---|
| AdMob | 90.9% | — | 9.1% | Partner Bidding volume (9.1%) has no per-impression price; it is spread using the aggregate report. |
| Ad Manager | 96.4% | — | 3.6% | AdX web demand served through GAM cannot report per-impression; modelled from placement-day aggregates. |
| AppLovin MAX | — | 100.0% | — | SDK reports a network-level estimate at callback time, reconciled next-day by the API. Never exact at the moment of callback. |
| LevelPlay | — | 100.0% | — | Same pattern as MAX: SDK estimate now, network reconciliation next-day. |
| Prebid.js | 100.0% | — | — | Auction clearing price is known exactly at bid time. |
| Meta Audience Network | — | — | — | No impression-level revenue exists to label. Aggregate report only — excluded from this breakdown. |
Precise means the price is known at the moment of the callback — an auction clearing price or a paid-event value from a network that reports exactly. Estimated means the SDK gives a network-side estimate that a next-day API reconciles later, which is how AppLovin MAX and LevelPlay work today. Publisher-provided means Publifter had no exact or estimated per-impression figure and spread an aggregate report across impressions instead. Meta Audience Network has no impression-level row at all, so it carries no precision label and is excluded from this chart — it only ever appears as an aggregate line in revenue totals.