Menu
Who was there
Place activity, hourly
One row per screen, hour and evidence grade (readings backed by a face, or by a person in view without one): how many faces the camera read, the busiest moment of the hour, how long people stayed, where their heads and eyes pointed, how crowded it was and the daypart in local time. Every average ships with the count of camera readings behind it.
The question it answers
How many people were in front of this screen this hour, how long did they stay, and did they look at it?
4,534
camera screens, 28 days
1.2 million
screen-hours
105.3 million
10-second camera readings
Measured over the 28 days to October 11, 2026.
The dataset
- Grain
- Hourly.
- Cadence
- Hourly rows, one file per day. The same measures also stream as an hourly feed with each screen's GPS position.
- History
- From June 1, 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
- Footfall, dwell and attention by screen, hour and daypart, for planning and pricing screen media.
- Occupancy and group size in taxi and rideshare cabins by hour, for travel and leisure research.
- Attention per screen-hour, to price inventory on the people who looked.
The tables
Read from the export registry each time this site is built.
place_activity_hourly
Hourly, from June 1, 2026- Grain
- One row per hour_start, screen_id and evidence_grade.
- Delivery
- One file per day, as Parquet or JSONL.
- Basis
- Measured.
- Definition
- Version 3, measurement method camera_screen_hour, version 3.
| Column | Type | What it holds |
|---|---|---|
hour_start | timestamp | Start of the UTC hour. A camera window counts in the hour it closed. |
screen_id | string | Trillboards screen id (24-character hex); joins dim_screen.screen_id. Only ids of that shape ship. |
evidence_grade | string | face_backed or person_backed: the grade of the camera windows the row counts. |
observation_windows | integer | Camera windows (about 10 s each) of the row's grade that closed in the hour. Unit: windows. |
avg_face_count | double | Mean faces per window: the device's face_count where it wrote one, else the window's mean face count. Unit: faces_per_window. |
p95_face_count | double | Exact 95th percentile of that per-window face reading over the hour. Unit: faces_per_window. |
avg_dwell_ms | double | Mean dwell per window in milliseconds, each window's dwell capped at its own length, over the windows that carry a start time (dwell_capped_windows). Unit: ms. Null: No window of the row carries a start time (dwell_capped_windows = 0). |
dwell_capped_windows | integer | The windows avg_dwell_ms averages: camera windows that carry a start time. Unit: windows. |
dwell_over_window_windows | integer | Camera windows whose reported dwell exceeded their own length, and were capped at it in avg_dwell_ms. Unit: windows. |
avg_attention | double | Head-pose index, 0-1: the mean over every window of the device's composite 0.4 x yaw + 0.3 x pitch + 0.3 x eye-open (eye term 0.5 when unclassified); a window without a face reads 0. Unit: index. |
head_pose_index_windows | integer | Camera windows whose head-pose index is above 0 (a pose was read); avg_attention averages over every camera window (observation_windows). Unit: windows. |
avg_gaze_pct_on_screen | double | Mean on-screen gaze share 0-1 of the gaze instrument (FaceLandmarker) over the windows it read. Unit: share. Null: No window of the row carries a gaze reading (gaze_pct_windows = 0). |
gaze_pct_windows | integer | The windows avg_gaze_pct_on_screen averages: camera windows that carry a gaze reading. Unit: windows. |
avg_pedestrian_count | double | Mean of the device's queue estimate per window (people waiting near the screen, from the trend of its face counts and dwell), over the windows that carry one. Unit: people_per_window. Null: No camera window of the row carried the reading. |
avg_vehicle_count | double | Mean vehicles in view per window (the device's vehicle detector), over the windows that carry a count. Unit: vehicles_per_window. Null: No camera window of the row carried the reading. |
avg_viewability_score | double | Mean of the device's viewability score 0-1 (dwell, full at 1 s, times attention times the ambient-light factor, on a window with a face) over the windows that carry one. Unit: index. Null: No window of the row saw a face (the device writes no score without one). |
avg_emotional_engagement | double | Mean emotional engagement score 0-1 over the windows that carry one (emotional_engagement_windows). Unit: index. Null: No window carries an emotional engagement score (emotional_engagement_windows = 0). |
avg_body_engagement | double | Mean body-engagement score 0-1 over every camera window of the row (a window without the score counts 0). Unit: index. |
modal_crowd_density | string | Most frequent crowd-density reading of the hour by exact count, ties to the alphabetically first. Null: The hour carried no real crowd reading (only 'unknown' or none). |
modal_attention_level | string | Most frequent attention-level reading (high, medium, low) of the hour by exact count, ties to the alphabetically first. Null: The hour carried no real attention-level reading. |
daypart_local | string | Daypart label in the screen's local time. Null: The device kept no daypart label for the hour. |
is_weekend | boolean | True when the hour fell on a weekend day in the screen's local time (the device's label). |
emotional_engagement_windows | integer | The windows avg_emotional_engagement averages: camera windows carrying an emotional engagement score. Unit: windows. |
avg_receptivity | double | Mean ad-receptivity score 0-1 (the window's reading of how receptive the audience in view is to an ad), over the windows that carry one. Unit: index. Null: No window carries a receptivity score (receptivity_windows = 0). |
receptivity_windows | integer | The windows avg_receptivity averages. Unit: windows. |
avg_passerby_ratio | double | Mean of the device's passer-by ratio (its estimated foot traffic over the peak face count of the window; above 1 when people pass without facing the screen) over the windows that carry one. Unit: ratio. Null: No window carries a passer-by ratio (passerby_ratio_windows = 0). |
passerby_ratio_windows | integer | The windows avg_passerby_ratio averages. Unit: windows. |
avg_crowded_share | double | Mean over every camera window of the window's crowded share 0-1: the share of its audio snapshots the device's microphone classified as crowded (a window without audio counts 0). Unit: share. |
modal_pace | string | Most frequent movement-pace reading of the people in view (e.g. idle, standing, slow, strolling, moderate, hurrying) by exact count, ties to the alphabetically first. Null: The hour carried no real pace reading. |
modal_engagement | string | Most frequent screen-engagement reading (engaged, glancing, ignoring) by exact count, ties to the alphabetically first. Null: The hour carried no real engagement reading. |
modal_mood | string | Most frequent mood reading of the people in view (e.g. happy, neutral, focused, bored) by exact count, ties to the alphabetically first. Null: The hour carried no real mood reading. |
look_buckets | integer | The 10-minute buckets of the hour (0-6) in which a camera window of the row's grade closed: how much of the hour the camera covered. Unit: 10_minute_buckets. |
present_buckets | integer | The 10-minute buckets of the hour (0-6) in which such a window saw at least one face (its peak face count above 0). Unit: 10_minute_buckets. |
Also answered live by the measurement API: Camera people per screen-hour, Capped dwell per camera window, Head-pose index per camera window, Gaze on screen per camera window.
audience-hourly
Hourly, from June 1, 2026- Grain
- One row per screen_id, hour_start and evidence_grade.
- Delivery
- Pushed every hour, as Parquet.
- Basis
- Measured.
- Definition
- Version 2.0, measurement method camera_screen_hour, version 1.
| Column | Type | What it holds |
|---|---|---|
screen_id | string | Trillboards screen identifier. |
hour_start | string | Start of the UTC hour, ISO-8601 (2026-09-22T14:00:00.000Z). A window counts in the hour it closed. |
evidence_grade | string | face_backed or person_backed: the grade of the camera windows the row counts. Part of the key: a screen-hour with both grades has two rows. |
venue_type | string | The screen's registered venue type. |
latitude | double | Latitude of the screen's last GPS trail fix at or before the hour midpoint, looking back to UTC midnight 7 days before that day, 5 dp. NULL when the screen reported no fix in that span. |
longitude | double | Longitude of the same fix as latitude, 5 dp. |
gps_fix_age_seconds | integer | Seconds from that fix to the hour midpoint. NULL with latitude. |
observations | integer | Camera windows (about 10 s each) of the row's grade that closed in the hour. |
avg_face_count | double | Mean faces per window: the device's face_count where it wrote one, else the window's mean face count. |
p95_face_count | double | Exact 95th percentile of that per-window face reading over the hour. Replaces max_face_count. |
avg_attention | double | Head-pose index, 0-1: the mean over every window of the device's composite 0.4 x yaw + 0.3 x pitch + 0.3 x eye-open (eye term 0.5 when unclassified); a window without a face reads 0. |
avg_dwell_ms | double | Mean dwell per window in milliseconds, each window's dwell capped at its own length, over the windows that carry a start time (dwell_capped_windows). NULL when no window carries one. |
dwell_capped_windows | integer | The windows avg_dwell_ms averages: camera windows that carry a start time. |
daypart | string | Daypart label in the screen's local time. |
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