Trillboards
Menu
What ran
Ad delivery, hourly
Completed plays per screen per hour, counted the way billing counts them, with distinct creatives and ads, seconds played, plays that passed invalid-traffic filtering, average CPM, gross revenue and the demand source that filled the most plays.
The question it answers
Which ads ran on which screens, when, and what did they earn?
532,646
plays
4,610
screens
97,234
screen-hours with plays
Measured over the 28 days to October 11, 2026.
The dataset
- Grain
- Hourly.
- Cadence
- Hourly rows, one file per day.
- History
- From April 2, 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.
- On the network
- Demand ecosystem.
What buyers do with it
- Fill, CPM and revenue benchmarks for screen media by market and hour.
- The audience of every hour that ran ads: join place activity on screen and hour.
- Supply-side research on programmatic out-of-home demand.
The table
Read from the export registry each time this site is built.
ad_delivery_hourly
Hourly, from April 2, 2026- Grain
- One row per hour_start and screen_id.
- Delivery
- One file per day, as Parquet or JSONL.
- Basis
- Measured.
- Definition
- Version 3.
| Column | Type | What it holds |
|---|---|---|
hour_start | timestamp | Start of the UTC hour. A play counts in the hour its kept report completed. |
screen_id | string | Trillboards screen id (24-character hex); joins dim_screen.screen_id. |
completed_plays | integer | Completed plays as our billing policy identifies them: the play key on one screen, each play once, on its first day. Unit: plays. |
distinct_creatives | integer | Distinct creative ids among the plays (the IMA house creative placeholder is not a creative). Unit: creatives. |
distinct_ads | integer | Distinct ad ids among the plays (the pod placeholder is not an ad). Unit: ads. |
played_seconds | double | Sum over the plays of each play's longest positive duration over every report of the play that day. Unit: seconds. Null: No play of the hour carried a positive duration on any of its reports. |
played_duration_plays | integer | Plays that carried a positive duration: the denominator of a mean play length (played_seconds / played_duration_plays). Unit: plays. |
givt_passed_plays | integer | Plays that passed general invalid-traffic checks. Unit: plays. |
avg_cpm | double | Mean CPM of the plays, USD. Unit: usd_per_1000_plays. Null: No play of the hour carried a price. |
gross_revenue | double | Sum of the plays' gross revenue, USD. Unit: usd. Null: No play of the hour carried a price. |
modal_source_provider | string | Most frequent demand source of the plays by exact count, ties to the alphabetically first. Null: No play carried a real provider. |
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 sampleAll datasets · Next: Screen master