Chart · Ads

Ad click-through rate (CTR): how to calculate it for in-app ads

Ad click-through rate is the share of displayed ads that users opened. RevenueDot divides ad opened events by ad displayed events and shows the result as a percentage. The chart also lists clicks and impressions, so you can see whether a change came from more taps or from more ads shown.

Formula

CTR = clicks ÷ impressions × 100

Shape

What happened during each period

API name

ad_ctr

Measures

CTR (Percent)

Filter and segment by

App, Country, Platform, App version

The CTR chart in the RevenueDot dashboard, with demo data, its chart rail, plot and table
Captured from the RevenueDot dashboard with demo data.

Definition

How RevenueDot calculates CTR

RevenueDot divides the count of rc_ads_ad_opened events by the count of rc_ads_ad_displayed events in the period and shows a percent with one decimal. The table also lists Clicks and Impressions, which are not plotted. If a period has no impressions, the rate is blank.

A week or a month is the ratio of that period's totals, not the average of daily rates, so busy days weigh more. Your SDK ad tracking sends both event types to RevenueDot's /v1/events endpoint, from an ad network adapter or by manual capture. Sandbox events are excluded.

Filter or segment by app, country, platform and app version. The default resolution is day, and week, month, quarter and year are available.

Find it in the dashboard under Analytics > Charts, or call GET /v2/projects/{project_id}/charts/ad_ctr. The response has the same shape as RevenueCat's Charts API.

Worked example

CTR, step by step

Illustrative numbers for one week.

ItemValue
Clicks150
Impressions12,500

CTR = 150 ÷ 12,500 × 100 = 1.2%.

Why it matters

What CTR tells you

CTR shows how well your ads and placements hold attention. When a new placement or format lowers CTR, users probably see the ad as noise. When it raises CTR, check that revenue rose too and that the taps are not accidents.

Use it to compare countries, platforms and app versions on equal terms. A change in CTR with steady eCPM tells you about user behavior. A change in eCPM with steady CTR tells you about the price the network pays.

How to read it

  • Look at the clicks and impressions behind the percent. A small number of impressions makes the rate jump.
  • A CTR spike with flat revenue can be accidental taps. Move the ad away from your buttons and see if it drops.
  • Do not compare CTR across ad formats without segmenting. Formats get tapped at different rates.
  • A blank CTR means no impressions in that period.
  • Segment by app version to see the release that changed an ad placement.

API

Get CTR from the Charts API

Same path and response shape as RevenueCat's Charts API, so existing scripts keep working.

Requestshell
curl "https://api.revenuedot.app/v2/projects/$PROJECT_ID/charts/ad_ctr?resolution=day" \
  -H "Authorization: Bearer $SECRET_KEY"   # sk_... with charts_metrics:charts:read

Reference: Charts guide · REST API v2

FAQ

CTR: questions people ask

How do you calculate CTR for in-app ads?

Divide the number of ad clicks by the number of ad impressions and show it as a percent. RevenueDot uses ad opened events as clicks and ad displayed events as impressions.

What is a good CTR for in-app ads?

It depends on the ad format, placement and audience, so RevenueDot does not publish a benchmark. Compare your own CTR over time and by country and app version.

Why is my CTR blank or zero?

A blank CTR means no impressions in the period. A zero CTR means impressions but no opened events, which can mean your adapter does not send them.

Is CTR related to eCPM?

They are separate measures. CTR is about taps. eCPM is revenue per 1,000 impressions, which depends on what the network pays for the impression and the tap.

Can accidental clicks inflate CTR?

Yes. RevenueDot counts every opened event, so accidental taps raise CTR. Check the placement if CTR rises while revenue stays flat.

Get started

See your CTR in minutes.

Connect your app to RevenueDot Cloud, free up to $10,000 a month in tracked revenue, and all 43 charts fill from your store history after import.

Already have an account? Sign in · Prefer your own servers? Self-host free