Contents

Data dictionary

One row is one continuous appearance of an ad on screen; if it leaves the viewport and returns, that is a new row. Mobile rows and desktop rows are two tables with their own columns: pick the platform below, and the list shows every column of that platform's rows, grouped by what it tells you. See a whole row →

A null column is left out of the line: treat a missing key as null. The one exception is other_brands, which is [] when there are none.

impression_id identifies one impression. The change feed sends an impression again whenever it changes, and sends {"impression_id", "date", "removed": true} when it is gone, so upsert on the id: The change feed →. In a day export, a rebuilt day can give its rows new ids: replace whole days, not ids. Day export →

New columns are added as we measure more. Read the files by name with schema union and a new column is a new key on the rows that have it.

27 columns on every mobile row; a null column is left out of the line

Identity

Keys for joining and counting. panelist_id and session_id are stable across exports; a rebuilt day can give its rows new impression_id values.

Unique identifier of the impression, unique within an export. A rebuilt day can give its rows new ids: merge by day, not by id.

9f1c2b3a…4b5c6d7e

Pseudonymous identifier of the panelist who saw the ad. The same across every export and both platforms, so it counts reach and frequency.

p_0001a2b3
session_id
integer on mobile, string on desktop

The sitting the impression happened in: a period of phone use, or a browsing session.

174823910

Where the ad was seen

hostname
string

The website the ad was seen on.

Null on mobile when the ad was seen inside an app rather than in a browser.

aftonbladet.se

The Android app that was on screen, by its package id.

com.instagram.android
app_name
string

The app, by the name it shows on the phone; package_name is the same app by its id.

Null when the phone reported no name for the package.

Instagram
ad_format
string

Where in the app the ad ran. Facebook: feed, reel, story, marketplace, watch, browser. Instagram: feed, reel, story, explore. YouTube: in_stream, shorts, feed. TikTok: feed. A web page in a browser: browser. Any other placement: other.

Null when the format could not be read with confidence, about one row in ten.

feed
media
string

What kind of creative it was: video or display. On desktop, video is also told apart as in-stream (inside a video player) or out-stream (in the page).

Null on mobile outside Facebook, Instagram, YouTube, TikTok and Chrome, and when it could not be read with confidence.

display

When and for how long

All times are UTC. Rows carry no date column: the download holds a day=DD folder per day inside each month's archive, the UTC date the ad first appeared.

first_seen
timestamp

When the ad first appeared.

2026-10-03T09:42:11.412Z
last_seen
timestamp

When the ad left the screen. On mobile, the device's next screen change after the ad was last captured, in the same app or another, at most 60 seconds later and 10 minutes after first_seen, and earlier when the camera stopped. On desktop, when the ad was last seen.

2026-10-03T09:42:14.778Z
duration_s
double, seconds

How long the ad was on screen: first_seen to last_seen on mobile.

Mind the units: seconds on mobile, milliseconds on desktop.

3.366

Ad size

width_dp
integer, dp

Width of the ad. Mobile uses density-independent pixels, so sizes compare across screens.

360
height_dp
integer, dp

Height of the ad.

450
ad_area_pct
double, percent

Share of the screen the ad covered. 48.6 means 48.6%.

48.6

Shape of the ad by height ÷ width: banner (under 0.22), strip (to 0.40), wide (to 0.70), mpu (to 0.92), square (to 1.15), tall (to 1.40), full (1.40 and above).

tall

The standard display size an ad in a mobile browser matches, within 10 dp on each side.

Null for in-app ads and sizes that match no standard.

300x250

Attention

Gaze measured while the ad was on screen, first_seen to last_seen on mobile, with the same definitions on both platforms. How we measure →

true when gaze was measured while the ad was on screen. Filter on it before computing attention rates.

When false, the attention columns are zero or null. That means "not measured", not "not looked at".

true

Total time the gaze rested on the ad while it was on screen, in milliseconds. Fixation time is measured from the first to the last gaze sample on the ad, so a single fixation reads slightly shorter than the time the eye rested there.

412
is_fixated
boolean

Whether the ad was looked at. The same definition on mobile and desktop, so the two compare directly.

true

Audience

The panelist's profile on the day of the impression: age, gender, area, country_code, and nothing else. Each can be null when the panelist has not given it.

{ "age": 34, … }

The ad

Who advertised and what the ad said. Read from the text and links captured with each ad. A day's brand reading finishes about two days after the day; until then these columns can be missing, and the day's rebuild brings them.

brand
string

The advertiser, by its public name.

Null when the ad shows no readable advertiser, for example an image ad with no text. The row stays in the export.

Oddset

The exact text the brand was read from, keyed by where it was found: account_name, ad_copy, landing_domain, file_name, view_id.

Null when brand is null.

{"account_name": ["oddset"]}
other_brands
array of object

Other brands named in the ad, such as the phone in an operator's ad. Each has a name and its relation to the ad: product, retailer_listing, co_marketing, comparison, sponsorship or unknown.

Empty list [] when there are none, also on a row with no brand. The one column that is never left out for being empty.

[{"name": "iPhone 17", "relation": "product"}]

The advertiser's industry on the IAB Ad Product Taxonomy 2.0: the top level, and the full path down to the most specific level that fits.

Null when there is no brand, or the advertiser could not be placed with confidence.

industryGambling
industry_pathGambling > Sports Betting
ad_text
string

The advertiser's own words in the ad, copied exactly, one piece of text per line.

Null when there is no brand.

Allsvenskan avgörs nu Spela på Oddset
creative_url
string, URL

Address of the ad's image or video file, when the app exposes one.

https://scontent…/oddset_v41.jpg