Reporting
Track how your placements perform — in the dashboard, or programmatically through the API.
Koah records every ad query your app makes and rolls the results up into daily metrics. You can read them in the publisher dashboard or pull them into your own tooling with the Reporting API.
Metrics
Every report row covers one day and carries the same set of metrics:
| Metric | Definition |
|---|---|
queries | Ad requests your app made |
queries_with_ad | Requests that returned at least one ad |
fill_rate | Share of requests that returned an ad — queries_with_ad / queries × 100 |
impressions | Ads actually rendered on screen |
clicks | Clicks on rendered ads |
ctr | Click-through rate — clicks / impressions × 100 |
ecpc | Effective cost per click, in USD |
ecpm | Effective revenue per 1,000 impressions, in USD |
revenue | Total revenue for the day, in USD |
Breaking down by placement
Tag each ad request with a slot and every metric is attributed to that placement. Both the dashboard and the API can then filter to one or more slots, so you can compare an in-chat card against a sidebar unit and invest in what earns the most. To compare A/B variants of the same placement, use experiments instead.
Filtering by environment
Use inventory_types to filter metrics by environment, matching the dashboard's Environment filter:
| Value | Traffic included |
|---|---|
web | Web |
app | iOS, Android, React Native, and Flutter |
Select both with inventory_types=web,app. Omit the filter to include all traffic, including other or unknown platforms, so unfiltered totals can be higher than web,app totals.
Reports remain daily totals. To compare environments, request a report for each one separately.
Pulling reports programmatically
The Reporting API returns the metrics above as JSON for any range of up to 90 days, at the team level or for a single publisher:
- Get team report —
GET /api/publishers/report, every publisher in your team - Get publisher report —
GET /api/publishers/:id/report, one publisher
Both take starts_at, ends_at and optional slots and inventory_types filters, and are authenticated with a publisher API token from Settings › API Tokens in the dashboard. Publisher IDs come from the Publishers endpoints. See the API Reference for authentication, rate limits and full request and response details.