Who was there

Play-level audience

One row per ad play, with the audience the camera read while it ran: faces, head pose, gaze, facing angle, dwell, emotion, ambient sound and light, each with the number of camera readings behind it. Every logged play ships, so the file is also a complete play log.

Request a sampleAll datasets

The question it answers

Who was in front of the screen while my ad was playing?

182,303

plays with a camera reading

165,787

plays with a face on camera

4,610

screens

Measured over the 28 days to October 11, 2026.


The dataset

Grain
One row per ad play.
Cadence
One row per play, one file per day.
History
From June 24, 2026.
Format
Parquet or JSONL.
Delivered to
Your S3 bucket, your GCS bucket, or a time-limited download link, with a manifest and a schema.
Method
How each measure is produced and how to add rows up: the measurement methodology.

What buyers do with it

  • Attention and audience per creative, flight, screen and hour.
  • Send your own play logs (screen, start, end) and get the audience of each play back as a file.
  • Ground truth for attention and outcome models.

The table

Read from the export registry each time this site is built.

play_audience

Daily, from June 24, 2026
Grain
One row per play_date, screen_id, play_source and play_key.
Delivery
One file per day, as Parquet or JSONL.
Basis
Measured.
Definition
Version 1.
ColumnTypeWhat it holds
play_datedateUTC day of the play (of its kept report's completion).
screen_idstringTrillboards screen id (24-character hex); joins dim_screen.screen_id.
play_sourcestringWhere the play is logged: completed_impressions, or partner_measurement_plays for a play a partner served.
play_keystringWith play_date, screen_id and play_source it is the play: billing's partner-aware key (completed_impressions.play_key) per UTC day, or partner_id:play_id for a partner play.
ad_idstringAd id of the kept report. Null: No ad id, or the pod placeholder.
creative_idstringCreative id of the kept report. Null: No creative id, or the IMA house/fallback creative.
impression_idstringImpression id of the kept report. Null: The report carried none.
request_idstringOur ad request id (joins vast_requests). Null: The report carried none.
content_sha256stringSHA-256 of the media file's bytes that played. Null: The report carried none.
ingestion_pathstringThe kept report's path (vast_event, proof_of_play, partner_sdk, owned_direct; partner_measurement for a partner play).
source_providerstringDemand source of the play.
play_started_attimestampplay_completed_at minus the play's length (its longest positive reported duration, else 30 s), UTC.
play_completed_attimestampWhen the kept report says the play completed, UTC.
duration_imputedinteger1 when no report carried a positive duration, so the play's interval is the 30 s default.
windows_nintegerAudience windows attributed to the play: every window overlapping it widened by 5 s each side, any sensing mode and grade. Unit: windows.
overlap_windows_nintegerOf those, the windows inside the logged play itself. Unit: windows.
overlap_ms_sumintegerMilliseconds of window inside the logged play, summed. Unit: ms.
camera_windows_nintegerOverlapping windows that are camera-graded: the base of every camera measure. Unit: windows.
camera_overlap_msintegerOverlap of those windows: the weight of face_count_mean and head_pose_index_mean. Unit: ms.
face_windows_nintegerCamera windows whose face reading is above 0. Unit: windows.
scene_frames_nintegerAttributed windows carrying a vision-model scene description. Unit: windows.
evidence_grade_windowsmapAttributed windows by evidence grade ('' = none recorded); sums to windows_n. Unit: windows.
face_count_maxdoubleLargest per-window face reading over the camera windows. Unit: faces. Null: No camera window.
face_count_meandoubleOverlap-weighted mean face reading over the camera windows. Unit: faces_per_window. Null: No camera window.
head_pose_index_meandoubleOverlap-weighted mean head-pose index (0.4 yaw + 0.3 pitch + 0.3 eye-open) over every camera window; gaze is gaze_pct_on_screen. Unit: index. Null: No camera window.
head_pose_windows_nintegerCamera windows whose head-pose index is above 0 (its coverage, not its denominator). Unit: windows.
gaze_windows_nintegerCamera windows carrying a gaze reading. Unit: windows.
gaze_overlap_msintegerOverlap of those windows: gaze_pct_on_screen's weight. Unit: ms.
gaze_pct_on_screendoubleOverlap-weighted mean on-screen gaze share 0-1. Unit: share. Null: No gaze window.
head_yaw_windows_nintegerCamera windows whose facing angle came from the head-yaw instrument and is above 0. Unit: windows.
head_yaw_overlap_msintegerOverlap of those windows. Unit: ms.
head_yaw_heads_up_sharedoubleOverlap-weighted share of those windows facing the screen within 30 degrees. Never pooled with the shoulder instrument. Unit: share. Null: No such window.
shoulder_windows_nintegerCamera windows whose facing angle came from the shoulder (MoveNet) instrument and is above 0. Unit: windows.
shoulder_overlap_msintegerOverlap of those windows. Unit: ms.
shoulder_heads_up_sharedoubleOverlap-weighted share of those windows within 30 degrees. Unit: share. Null: No such window.
dwell_windows_nintegerCamera windows with a capped dwell (a start time to cap at). Unit: windows.
dwell_overlap_msintegerOverlap of those windows. Unit: ms.
dwell_capped_ms_meandoubleOverlap-weighted mean dwell, each window capped at its own length. Unit: ms. Null: No such window.
receptivity_windows_nintegerCamera windows carrying an ad-receptivity score. Unit: windows.
receptivity_overlap_msintegerOverlap of those windows. Unit: ms.
receptivity_meandoubleOverlap-weighted mean ad-receptivity score 0-1. Unit: index. Null: None carried one.
emotional_engagement_windows_nintegerCamera windows carrying an emotional engagement score. Unit: windows.
emotional_engagement_overlap_msintegerOverlap of those windows. Unit: ms.
emotional_engagement_meandoubleOverlap-weighted mean emotional engagement score 0-1. Unit: index. Null: None carried one.
emotion_windows_nintegerCamera windows with a real dominant-emotion reading. Unit: windows.
dominant_emotion_overlap_msmapOverlap milliseconds per dominant-emotion value: the play's emotion distribution. Unit: ms.
dominant_emotionstringThe emotion with the most overlap, ties to the alphabetically first. Null: No emotion reading.
audio_windows_nintegerOverlapping windows carrying an audio level. Unit: windows.
audio_db_maxdoubleLoudest audio level over those windows. Unit: dB. Null: No audio reading.
lux_windows_nintegerOverlapping windows with an ambient light reading. Unit: windows.
lux_overlap_msintegerOverlap of those windows. Unit: ms.
ambient_lux_meandoubleOverlap-weighted mean ambient light. Unit: lux. Null: No light reading.
face_rows_nintegerPer-face observation rows whose span overlaps the logged play. Unit: face_rows.
face_tracks_nintegerDistinct face tracks over those rows (the edge's pre-merge track id where it sent one); distinct counts do not add across plays. Unit: face_tracks. Null: No face row.
gaze_face_rows_nintegerFace rows carrying gaze seconds. Unit: face_rows.
gaze_secondsdoubleGaze seconds of those rows inside the logged play. Unit: seconds. Null: No such row.
builder_versionstringDigest of the builder SQL that built the row (pa-<12 hex>).

Request a sample

Tell us the markets and the weeks you want. The sample is cut from production by the same export that makes the full delivery.

Request a sample

All datasets · Next: Mobility flows, daily