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.

Request a sampleAll datasets

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.
ColumnTypeWhat it holds
hour_starttimestampStart of the UTC hour. A play counts in the hour its kept report completed.
screen_idstringTrillboards screen id (24-character hex); joins dim_screen.screen_id.
completed_playsintegerCompleted plays as our billing policy identifies them: the play key on one screen, each play once, on its first day. Unit: plays.
distinct_creativesintegerDistinct creative ids among the plays (the IMA house creative placeholder is not a creative). Unit: creatives.
distinct_adsintegerDistinct ad ids among the plays (the pod placeholder is not an ad). Unit: ads.
played_secondsdoubleSum 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_playsintegerPlays that carried a positive duration: the denominator of a mean play length (played_seconds / played_duration_plays). Unit: plays.
givt_passed_playsintegerPlays that passed general invalid-traffic checks. Unit: plays.
avg_cpmdoubleMean CPM of the plays, USD. Unit: usd_per_1000_plays. Null: No play of the hour carried a price.
gross_revenuedoubleSum of the plays' gross revenue, USD. Unit: usd. Null: No play of the hour carried a price.
modal_source_providerstringMost 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 sample

All datasets · Next: Screen master