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. Columns are grouped by what they tell you. Where mobile and desktop name the same thing differently, both names sit in one row. See a whole row →

A column with no tag is on every row. Mobile or Desktop marks a column that only one platform's rows carry. 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 is unique within an export. A rebuilt day can give its rows new ids, so merge by day, not by id: A daily loader →

22 columns on mobile rows, 23 on desktop rows

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
package_nameMobile
string

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

com.instagram.android
ad_technical_formatDesktop
string

What kind of ad it was: display, in-stream (video inside a video player) or out-stream (video in the page).

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_seenMobile
timestamp
first_event_atDesktop
timestamp

When the ad first appeared.

first_seen2026-10-03T09:42:11.412Z
first_event_at2026-10-03T18:05:12.031Z
last_seenMobile
timestamp
last_event_atDesktop
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.

last_seen2026-10-03T09:42:14.778Z
last_event_at2026-10-03T18:05:19.874Z
duration_sMobile
double, seconds
time_in_screenDesktop
integer, milliseconds

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

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

duration_s3.366
time_in_screen6120
first_pixel_inview_atDesktop
timestamp
last_pixel_inview_atDesktop
timestamp

When any part of the ad first and last became visible.

first_pixel_inview_at2026-10-03T18:05:12.540Z
last_pixel_inview_at2026-10-03T18:05:18.660Z

Ad size

width_dpMobile
integer, dp
widthDesktop
integer, CSS px

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

width_dp360
width300
height_dpMobile
integer, dp
heightDesktop
integer, CSS px

Height of the ad.

height_dp450
height250
ad_area_pctMobile
double, percent

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

48.6

Viewability

The IAB in-view standard, measured in the panelist's browser.

At least half the ad was visible for at least one continuous second.

true

At least half the ad was visible for at least two continuous seconds.

true
is_iab_inviewDesktop
boolean

Whether the ad meets the IAB standard for its format: one second for display, two for video.

true

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
fixation_duration_msMobile
integer, ms
total_fixation_duration_msDesktop
integer, ms

Total time the gaze rested on the ad while it was on screen, in milliseconds.

fixation_duration_ms412
total_fixation_duration_ms690
is_fixated
boolean

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

true
fixation_countDesktop
integer

How many separate times the gaze landed on the ad.

3
first_fixation_atDesktop
timestamp
last_fixation_atDesktop
timestamp

When the gaze first landed on the ad, and when it last left.

Null when the ad was not looked at.

first_fixation_at2026-10-03T18:05:13.102Z
last_fixation_at2026-10-03T18:05:16.410Z

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.

brandMobile
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
brand_evidenceMobile
object

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_brandsMobile
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"}]
industryMobile
string
industry_pathMobile
string

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_textMobile
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_urlMobile
string, URL

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

https://scontent…/oddset_v41.jpg
html_metadataDesktop
object

Content of the ad's HTML: visible text, headings, links, image, video and script addresses. Only included when the export is started with include_html_metadata and your agreement covers it.

{ "headings": […], … }