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.

Request a sampleAll datasets

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.
ColumnTypeWhat it holds
hour_starttimestampStart of the UTC hour. A camera window counts in the hour it closed.
screen_idstringTrillboards screen id (24-character hex); joins dim_screen.screen_id. Only ids of that shape ship.
evidence_gradestringface_backed or person_backed: the grade of the camera windows the row counts.
observation_windowsintegerCamera windows (about 10 s each) of the row's grade that closed in the hour. Unit: windows.
avg_face_countdoubleMean 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_countdoubleExact 95th percentile of that per-window face reading over the hour. Unit: faces_per_window.
avg_dwell_msdoubleMean 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_windowsintegerThe windows avg_dwell_ms averages: camera windows that carry a start time. Unit: windows.
dwell_over_window_windowsintegerCamera windows whose reported dwell exceeded their own length, and were capped at it in avg_dwell_ms. Unit: windows.
avg_attentiondoubleHead-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_windowsintegerCamera 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_screendoubleMean 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_windowsintegerThe windows avg_gaze_pct_on_screen averages: camera windows that carry a gaze reading. Unit: windows.
avg_pedestrian_countdoubleMean 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_countdoubleMean 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_scoredoubleMean 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_engagementdoubleMean 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_engagementdoubleMean body-engagement score 0-1 over every camera window of the row (a window without the score counts 0). Unit: index.
modal_crowd_densitystringMost 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_levelstringMost 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_localstringDaypart label in the screen's local time. Null: The device kept no daypart label for the hour.
is_weekendbooleanTrue when the hour fell on a weekend day in the screen's local time (the device's label).
emotional_engagement_windowsintegerThe windows avg_emotional_engagement averages: camera windows carrying an emotional engagement score. Unit: windows.
avg_receptivitydoubleMean 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_windowsintegerThe windows avg_receptivity averages. Unit: windows.
avg_passerby_ratiodoubleMean 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_windowsintegerThe windows avg_passerby_ratio averages. Unit: windows.
avg_crowded_sharedoubleMean 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_pacestringMost 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_engagementstringMost frequent screen-engagement reading (engaged, glancing, ignoring) by exact count, ties to the alphabetically first. Null: The hour carried no real engagement reading.
modal_moodstringMost 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_bucketsintegerThe 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_bucketsintegerThe 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.
ColumnTypeWhat it holds
screen_idstringTrillboards screen identifier.
hour_startstringStart of the UTC hour, ISO-8601 (2026-09-22T14:00:00.000Z). A window counts in the hour it closed.
evidence_gradestringface_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_typestringThe screen's registered venue type.
latitudedoubleLatitude 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.
longitudedoubleLongitude of the same fix as latitude, 5 dp.
gps_fix_age_secondsintegerSeconds from that fix to the hour midpoint. NULL with latitude.
observationsintegerCamera windows (about 10 s each) of the row's grade that closed in the hour.
avg_face_countdoubleMean faces per window: the device's face_count where it wrote one, else the window's mean face count.
p95_face_countdoubleExact 95th percentile of that per-window face reading over the hour. Replaces max_face_count.
avg_attentiondoubleHead-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_msdoubleMean 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_windowsintegerThe windows avg_dwell_ms averages: camera windows that carry a start time.
daypartstringDaypart 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

All datasets · Next: Audience composition, weekly