Skip to main content
Skip to navigation

Ad Monetization Metrics feed

Columns and delivery behavior for the Ad Monetization Metrics Scheduled Data Export feed

Ask RicoChatGPTClaude

This page lists the columns of the Ad Monetization Metrics feed and explains how to apply its deliveries. For setup, delivery frequency, and file formats, see Scheduled Data Exports.

⚠️Beta feature

This feature is currently in beta.

The Ad Monetization Metrics feed exports daily ad metrics per app and Customer from Ad Monetization. RevenueCat delivers it to <base>/ad_monetization_metrics/<date>/ad_monetization_metrics_<timestamp>.<ext>. It's an incremental feed: with Receive new and updated ad monetization metrics only enabled, each delivery includes the days that ended since the previous delivery, plus rows that changed for recent earlier days. With it disabled, each delivery re-exports every past day. See Applying incremental deliveries before loading the data into your own tables.

Each row covers one UTC day, one app, and one App User ID, and exists only if that combination has at least one non-zero metric that day. Only production traffic is included: sandbox and debug ad events are excluded. A day is exported after it ends at midnight UTC, so no delivery contains the current day.

Columns​

New integrations start with every column selected; you can remove columns from the column catalog in the dashboard. For step-by-step instructions, see Selecting columns for an export.

Three columns are mandatory: event_date, rc_app_id, and app_user_id. Together they're the key you use to apply deliveries, so they're in every file regardless of your selection. The table marks them Mandatory. Columns appear in the file in the order listed below.

All dates and times are in UTC.

HeaderDescriptionTypeExample valueCan be null
event_dateMandatory. The UTC day the ad events occurred.date2026-10-21No
rc_app_idMandatory. The RevenueCat app ID.stringapp1a2b3c4d5eNo
app_user_idMandatory. The latest App User ID sent with the Customer's ad events that day. See How the App User ID is determined.string$RCAnonymousID:87c6049c58069238dce29853916d624cNo
requestedAd requests: ads that loaded plus ads that failed to load.integer16No
loadedAds that loaded.integer14No
failed_to_loadAds that failed to load.integer2No
impressionsAd impressions.integer14No
clicksAd clicks.integer1No
ad_revenue_in_usdAd revenue in USD, as reported by your mediation SDK.float0.0421No
impressions_by_formatImpressions per ad format, for formats with at least one impression.string JSON{"banner":12,"interstitial":2}No
ad_revenue_in_usd_by_formatAd revenue in USD per ad format, for formats with non-zero revenue.string JSON{"banner":0.0121,"interstitial":0.03}No
rewarded_ad_prompts_shownTimes your UI offered the Customer a rewarded ad. Counts rewarded and rewarded_interstitial formats only.integer3No
rewarded_ad_prompts_acceptedTimes the Customer accepted a rewarded ad offer. Counts rewarded and rewarded_interstitial formats only.integer2No
rewarded_ad_completionsCompleted rewarded ads that RevenueCat verified. Counts one per rewarded ad view that granted at least one reward, however many reward items (in-app currency or entitlements) it granted. See Granting Ad Rewards.integer2No
updated_atWhen the row last changed in RevenueCat.datetime2026-10-22 00:03:41No

How the App User ID is determined​

app_user_id is the latest App User ID that your app sent with the Customer's ad events for that day and app. In most cases, it matches the App User IDs in your other feeds. It can differ for Customers with more than one alias. To join ad data to the Transactions or In-App Currency feeds, match app_user_id against either rc_last_seen_app_user_id_alias or rc_original_app_user_id.

A late ad event can change the latest App User ID for a day that was already exported. RevenueCat then re-sends that day under the new ID, and the row for the old ID stays in your table.

Applying incremental deliveries​

Treat event_date + rc_app_id + app_user_id as the key. Overwrite existing rows that have the same key instead of appending.

Each incremental delivery contains:

  • Every day that ended since the previous delivery, in full.
  • The rows for the 7 days before that, but only those that changed since the previous delivery, for example because of late-arriving events.

Keep these behaviors in mind:

  • Catch-up. If the feed runs less often than daily, fails, or is paused, its next delivery catches up on every day it missed.
  • Empty deliveries. If no new day ended with ad activity and nothing changed, a CSV delivery contains only the header row, and a Parquet delivery contains no file.
  • Multiple runs per day. A feed that runs more than once a day re-sends the changed rows for that day on every run. Overwriting by key absorbs them.

Computing derived metrics​

The feed exports counts and sums, not ratios. Compute ratios from totals over the period you're analyzing, and sum the counts before you divide. Don't average per-row ratios.

MetricFormula
eCPMSUM(ad_revenue_in_usd) / SUM(impressions) * 1000
Fill rate (%)SUM(loaded) / SUM(requested) * 100
CTR (%)SUM(clicks) / SUM(impressions) * 100
ARPDAU (ad users)SUM(ad_revenue_in_usd) / COUNT(*), counting only rows where impressions > 0

These match the formulas in the Ad eCPM, Ad Fill Rate, Ad CTR, and Ad ARPDAU charts. Totals can still differ slightly from Charts: Charts report your display currency instead of USD, and include ad events that RevenueCat can't attribute to a customer or that arrive more than 7 days late.

Was this page helpful?