Impression-Level Report
Returns one row per impression — the finest-grained view of your revenue. Each row includes the CPM, ad unit, format, country, OS, and the primary_user_id you set in the SDK, so you can join revenue directly to your own user data.
Only ads that were actually displayed to the user are included — a serve that never rendered is not an impression and does not appear here.
text
GET /reporting/v1/publisher/impressions
Authorization: Bearer <your-reporting-key>Query Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
publisher_id | string | required | Your publisher ID. |
date_start | string | required | ISO 8601 UTC datetime, e.g. 2026-07-14T00:00:00Z. |
date_end | string | required | ISO 8601 UTC datetime, e.g. 2026-07-15T23:59:59Z. Must be after date_start; max span 31 days. |
ad_unit_id | string[] | — | Filter by ad unit ID. |
ad_unit_name | string[] | — | Filter by ad unit name, as set in the dashboard. Case-insensitive. |
ad_format | string[] | — | rewarded, interstitial, or native. |
country | string[] | — | ISO 3166-1 alpha-2 code, e.g. US. |
os | string[] | — | ios or android. |
status | string[] | — | estimated or final. Omit to include both. |
sort_order | string | asc | asc or desc, by served_at. |
limit | int | 5000 | Page size, max 10000. |
cursor | string | — | Pagination cursor from a prior response. See Pagination. |
ad_unit_id, ad_unit_name, ad_format, country, os, and status accept multiple values — repeat the parameter once per value, e.g. country=US&country=GB. If you pass both ad_unit_id and ad_unit_name, only ad units matching both filters are returned.
Response Fields
Each element of data:
| Field | Type | Description |
|---|---|---|
impression_id | string | Unique ID for the impression. |
ad_unit_id | string | null | Ad unit that served the impression. |
ad_unit_name | string | null | The ad unit's name, as set in the dashboard. |
ad_format | string | rewarded, interstitial, or native. |
country | string | null | ISO 3166-1 alpha-2 country of the session. |
os | string | null | ios or android. |
cpm | number | null | Revenue per 1,000 impressions, in USD. |
currency | string | Always USD. |
served_at | datetime | When the impression was served (UTC). |
publisher_id | string | Your publisher ID. |
primary_user_id | string | null | The user ID your app passed to the SDK. |
status | string | estimated or final. See Estimated vs. final revenue. |
Example
text
GET /reporting/v1/publisher/impressions?publisher_id=pub_0a1b2c3d
&date_start=2026-07-14T00:00:00Z&date_end=2026-07-15T00:00:00Z
&ad_format=rewarded&status=finaljson
{
"data": [
{
"impression_id": "imp_9f2c47d1a8",
"ad_unit_id": "SIM-RWD-A3F9K2BX",
"ad_unit_name": "Daily Reward Video",
"ad_format": "rewarded",
"country": "US",
"os": "ios",
"cpm": 12.5,
"currency": "USD",
"served_at": "2026-07-14T09:21:37Z",
"publisher_id": "pub_0a1b2c3d",
"primary_user_id": "u_98234723",
"status": "final"
}
],
"pagination": { "next_cursor": null, "has_more": false },
"meta": { "row_count": 1 }
}Fetching All Pages
bash
curl -G "$BASE/reporting/v1/publisher/impressions" \
-H "Authorization: Bearer $REPORTING_KEY" \
--data-urlencode "publisher_id=pub_0a1b2c3d" \
--data-urlencode "date_start=2026-07-14T00:00:00Z" \
--data-urlencode "date_end=2026-07-15T00:00:00Z"js
const BASE = 'https://simula-api-701226639755.us-central1.run.app';
async function fetchAllImpressions(params) {
const rows = [];
let cursor = null;
do {
const query = new URLSearchParams({ ...params, ...(cursor && { cursor }) });
const res = await fetch(`${BASE}/reporting/v1/publisher/impressions?${query}`, {
headers: { Authorization: `Bearer ${process.env.REPORTING_KEY}` },
});
if (!res.ok) throw new Error(`Reporting API ${res.status}: ${await res.text()}`);
const page = await res.json();
rows.push(...page.data);
cursor = page.pagination.next_cursor;
} while (cursor);
return rows;
}
const rows = await fetchAllImpressions({
publisher_id: 'pub_0a1b2c3d',
date_start: '2026-07-14T00:00:00Z',
date_end: '2026-07-15T00:00:00Z',
});python
import os
import requests
BASE = "https://simula-api-701226639755.us-central1.run.app"
HEADERS = {"Authorization": f"Bearer {os.environ['REPORTING_KEY']}"}
def fetch_all_impressions(**params):
rows, cursor = [], None
while True:
if cursor:
params["cursor"] = cursor
res = requests.get(
f"{BASE}/reporting/v1/publisher/impressions",
headers=HEADERS, params=params,
)
res.raise_for_status()
page = res.json()
rows.extend(page["data"])
cursor = page["pagination"]["next_cursor"]
if not page["pagination"]["has_more"]:
return rows
rows = fetch_all_impressions(
publisher_id="pub_0a1b2c3d",
date_start="2026-07-14T00:00:00Z",
date_end="2026-07-15T00:00:00Z",
)