Traqio.

Integrations

AdMob ad revenue

Measure ROAS for ad-funded apps: forward AdMob's impression-level revenue to Traqio from the paid-event callback, and it joins the install that saw the ad.

For an ad-funded app, ad revenue is the revenue. AdMob reports the value of every impression to the app through its paid-event callback; forwarding it to Traqio joins that revenue to the install that saw the ad — and from there to the campaign that drove it — so a game or a utility gets a real ROAS per campaign, not just an app-wide total.

Which SDKs

trackAdRevenue is available in the React Native, Expo and Capacitor SDKs (the JavaScript engine). The native, Flutter, KMP, MAUI and Unity SDKs do not report ad revenue yet.

Set up#

  1. Turn on impression-level ad revenue#

    In AdMob: Settings → Account → Reporting → impression-level ad revenue.

  2. Forward each paid event to the SDK#

    // In AdMob's paid-event callback, once per impression:
    Traqio.trackAdRevenue({
      valueMicros: 21500,         // the AdValue in micros — 0.0215 of the currency; never pre-round it
      currency: "USD",            // ISO 4217, as AdMob reports it
      precision: "estimated",     // AdMob's precisionType
      adUnitId: "ca-app-pub-0000000000000000/0000000000",
      adFormat: "rewarded",
      adSourceName: "AdMob Network", // the mediation source that filled it, when known
    });

    Pass the value in micros as AdMob gives it — never pre-rounded: a single banner impression is worth a fraction of a cent. Add the format and the mediation source when you have them; they are kept with each impression.

  3. Test with test ad units#

    Traqio.init({ /* … */ testAds: true }); // while on AdMob's test ad unit ids

    Test impressions appear in the console as TEST — the pipe is proven — and are never counted as revenue.

  4. Go live#

    Switch to real ad unit ids and remove testAds. The AdMob card turns to Receiving impressions and the revenue reaches the revenue, ROAS and cohort reports.

How Traqio handles it#

AspectBehaviour
Batchingimpressions are queued on the device and sent in batches of up to 100
Double countingeach batch has an id persisted with the queue — a retry after a crash is recognised, never counted twice
Attributionmatched to the install by the SDK's device id, else by your user id; unmatched revenue is still recorded, as unmatched
Storagesummed per currency and per UTC day of the impressions, so cent fractions are not rounded away
Ad networksnever forwarded to Meta or TikTok: thousands of tiny values would distort the purchase signal their bidding uses
iOSad revenue also moves the SKAdNetwork conversion value, like a purchase

Frequently asked questions#

Why doesn't Traqio use the AdMob Reporting API?
Because it cannot be attributed. The Reporting API gives daily totals by app, country, ad unit and source, with nothing that identifies an install, so it could only produce an app-wide total — never revenue per campaign. The paid-event callback fires on the device, per impression, where the install is known.
Will Traqio's ad revenue match the AdMob dashboard?
Closely, not exactly. Most mediation sources report an estimated value per impression (precision: estimated), so totals drift a few percent from the final AdMob payout, in both directions.

Last updated October 14, 2026