Skip to main content
This guide covers how AdCP represents broadcast television (linear TV) advertising — traditional over-the-air, cable, and satellite television spots. Broadcast TV differs from CTV in fundamental ways: there is no ad server, no VAST tags, no impression pixels, and no clickthrough URLs. A broadcast spot is a video file delivered to a station and played during a scheduled avail. Measurement comes from panel data and set-top box telemetry, not from pixel fires. The protocol-level operations (list_creative_formats, build_creative, sync_creatives) work identically for broadcast as for any other format. The broadcast-specific details are in format definitions, asset requirements, and measurement models covered below.

How broadcast differs from CTV

BroadcastCTV
DeliverySpot file to stationVAST tag or SSAI muxed file
TrackingNo impression pixelsPixel fires, VAST tracking events
ClickthroughNone (no interaction)Clickthrough URL, QR codes
MeasurementPanel/STB data, arrives days laterServer logs, real-time or near-real-time
Creative IDIndustry identifier (usually Ad-ID, with market-specific alternatives)Protocol creative_id
Financial refAgency Estimate NumberPO number

Format characteristics

Broadcast spots are:
  • Video files only — H.264 or MPEG-4 HD, delivered as MP4 or MOV
  • Fixed durations — :15, :30, and :60 are standard
  • No tracker assets — No impression pixels, no VAST, no JavaScript
  • No interactive elements — No clickthrough, no companion, no overlay
  • Identified by traffic/clearance ID — Ad-ID, ISCI, Clearcast clock number, IDcrea, or another market-specific creative identifier that ties the spot to rotation instructions

Standard broadcast formats

:30 spot (standard)

{
  "$schema": "/schemas/core/format.json",
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org/",
    "id": "broadcast_spot_30s"
  },
  "name": "Broadcast TV Spot - 30 seconds",
  "description": "30-second broadcast television spot. H.264 HD video file delivered directly to station.",
  "type": "video",
  "assets": [
    {
      "item_type": "individual",
      "asset_id": "video_file",
      "asset_type": "video",
      "required": true,
      "requirements": {
        "min_duration_ms": 30000,
        "max_duration_ms": 30000,
        "containers": ["mp4", "mov"],
        "codecs": ["h264"],
        "min_width": 1920,
        "max_width": 1920,
        "min_height": 1080,
        "max_height": 1080,
        "min_bitrate_kbps": 15000,
        "frame_rates": [29.97, 30],
        "frame_rate_type": "constant",
        "scan_type": "progressive",
        "gop_type": "closed",
        "min_gop_interval_seconds": 1,
        "max_gop_interval_seconds": 2,
        "audio_required": true,
        "audio_codecs": ["aac", "pcm"],
        "audio_sample_rates": [48000],
        "audio_channels": ["stereo"],
        "loudness_lufs": -24,
        "loudness_tolerance_db": 2,
        "true_peak_dbfs": -2
      }
    },
    {
      "item_type": "individual",
      "asset_id": "captions_file",
      "asset_type": "url",
      "required": false,
      "requirements": {
        "description": "Closed captions file (SRT or WebVTT)"
      }
    }
  ]
}
The :15 and :60 formats are identical except for min_duration_ms and max_duration_ms. All three are available in the reference agent as broadcast_spot_15s, broadcast_spot_30s, and broadcast_spot_60s.

What is absent

Broadcast formats deliberately exclude assets that exist in CTV and digital video formats:
  • No impression_tracker — there is no pixel to fire on a television
  • No vast_tag — stations play files, not VAST XML
  • No click_url — there is no clickthrough on a TV screen
  • No overlay_html — no interactive overlay capability
  • No companion_image — no companion banner slot

Third-party tracker support

Whether a creative format supports third-party tracking is determined by whether the format defines a tracker asset slot. Broadcast formats have no impression_tracker or tracker_pixel asset — a buyer agent inspecting the format’s assets array can confirm this. Digital and CTV formats include optional tracker slots; broadcast formats do not. A buyer agent that requires third-party measurement (DoubleVerify viewability, IAS brand safety) should check the format’s assets before assigning creatives. If no tracker slot exists, those measurement vendors cannot instrument the creative. Measurement for broadcast comes from panel and set-top box data through the measurement vendor declared in billing_measurement, not from creative-level pixels.

Creative identifier integration

AdCP separates its protocol creative_id from the creative identifier used by traffic, clearance, and broadcast operations. Put Ad-ID, ISCI, Clearcast clock number, IDcrea, or another market-specific code in industry_identifiers. Ad-ID is common for US television workflows and is often represented as a 12-character alphanumeric code (4-character company prefix + 8-character unique identifier). Other markets and legacy traffic systems use different identifiers. The protocol should preserve the identifier the workflow already uses rather than forcing every broadcaster or agency into Ad-ID. Industry identifiers serve two purposes in broadcast:
  1. Asset identification — uniquely identifies the spot across all systems
  2. Rotation instructions — when a buy has multiple creatives, the identifier tells the station which spot to run in which window

Creative with industry identifier

{
  "creative_id": "nova_spring_broadcast_30s",
  "name": "Nova Spring Campaign :30",
  "industry_identifiers": [
    { "type": "ad_id", "value": "NOVA1234000H" }
  ],
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org/",
    "id": "broadcast_spot_30s"
  },
  "assets": {
    "video_file": {
      "url": "https://cdn.nova-brands.example/broadcast/spring_30s_1080p.mp4",
      "width": 1920,
      "height": 1080,
      "duration_ms": 30000,
      "container_format": "mp4",
      "video_codec": "h264",
      "video_bitrate_kbps": 15000,
      "frame_rate": "29.97",
      "frame_rate_type": "constant",
      "gop_type": "closed",
      "gop_interval_seconds": 2,
      "has_audio": true,
      "audio_codec": "aac",
      "audio_sampling_rate_hz": 48000,
      "audio_channels": "stereo",
      "audio_loudness_lufs": -24,
      "audio_true_peak_dbfs": -2
    }
  }
}
When the same source creative has different cuts (:15 and :30), each cut gets its own traffic identifier. Use industry_identifiers on the manifest level to assign distinct Ad-IDs, ISCI codes, clock numbers, or IDcrea values per format version.

Supported identifier types

TypeDescription
ad_idAd-ID registry code, common in US television and accepted by some audio workflows
isciIndustry Standard Coding Identification, still used in legacy traffic systems and broadcast radio workflows
clearcast_clockUK Clearcast clock number
idcreaFrance ARPP.PUB IDcrea identifier for post-transition creative IDs
If a broadcast workflow depends on another shared identifier scheme, add it to creative-identifier-type by PR with evidence that the scheme is used across multiple participants. Do not use industry_identifiers for seller-local traffic codes.

Agency Estimate Number

The Agency Estimate Number is the financial reference that ties a broadcast order to the agency’s media plan. It originates from the agency’s billing system and must travel with the order through the transaction lifecycle. In AdCP, the estimate number appears on the media buy and optionally on individual packages:
{
  "account": { "brand": { "domain": "nova-brands.example" } },
  "brand": { "domain": "nova-brands.example" },
  "po_number": "PO-2026-1847",
  "agency_estimate_number": "EST-2026-04821",
  "start_time": "2026-04-01T00:00:00Z",
  "end_time": "2026-06-30T23:59:59Z",
  "packages": [
    {
      "product_id": "onx-prime-30s",
      "budget": 50000,
      "pricing_option_id": "cpm_guaranteed"
    }
  ]
}
When different packages within a buy correspond to different agency estimates (different flights or stations), the package-level agency_estimate_number overrides the buy-level value.

Measurement windows

Broadcast measurement matures over time as time-shifted (DVR) viewing accumulates. This is fundamentally different from digital measurement, where data is available in real-time or near-real-time.

Standard windows

WindowDurationDescription
live0 daysReal-time viewers only
c33 daysLive + 3 days of time-shifted viewing
c77 daysLive + 7 days of time-shifted viewing

How it works

  1. A spot airs on March 1
  2. The measurement vendor (VideoAmp, Nielsen, Comscore) collects data from set-top boxes, smart TV ACR, and panels
  3. Data is deduplicated across sources and delivered ~15 days after broadcast
  4. The C7 window (live + 7 days DVR) is typically the guarantee basis for reconciliation
Sellers declare available measurement windows on their products:
{
  "reporting_capabilities": {
    "available_reporting_frequencies": ["daily"],
    "expected_delay_minutes": 1440,
    "timezone": "America/New_York",
    "supports_webhooks": true,
    "available_metrics": ["impressions", "spend"],
    "date_range_support": "date_range",
    "measurement_windows": [
      {
        "window_id": "live",
        "description": "Live broadcast impressions only",
        "duration_days": 0,
        "expected_availability_days": 15,
        "is_guarantee_basis": false
      },
      {
        "window_id": "c3",
        "description": "Live plus 3 days of time-shifted viewing",
        "duration_days": 3,
        "expected_availability_days": 18,
        "is_guarantee_basis": false
      },
      {
        "window_id": "c7",
        "description": "Live plus 7 days of time-shifted viewing",
        "duration_days": 7,
        "expected_availability_days": 22,
        "is_guarantee_basis": true
      }
    ]
  }
}
Buyers reference the guarantee basis window in measurement terms:
{
  "measurement_terms": {
    "billing_measurement": {
      "vendor": { "domain": "videoamp.com" },
      "measurement_window": "c7",
      "max_variance_percent": 10
    }
  }
}