The best contextual advertising platform for CTV depends on where you sit in the buy. Anoki ContextIQ and Wurl match ads to the scene playing before the break. Peer39 and Gracenote supply program-level categories (genre, rating, mood, language) that buyers apply pre-bid in their DSP. IRIS.TV, owned by Viant, tags each video with an ID that travels in the bid stream. IAS Total TV reports the show, genre and rating an ad ran against. KERV adds object-level recognition inside the frame. If you are a publisher or CTV platform that wants to label its own video, a developer API such as Mixpeek fits.
Program level or scene level
CTV contextual signals come in two grains.
Program level describes the whole show or episode: genre, rating, network, language, mood. Most streaming publishers already have it, and it is enough for broad suitability and genre buys.
Scene level describes a moment inside the show. A film labeled "drama" can hold a dinner party, a car chase and a funeral, and each suits a different advertiser. Scene signals matter when the ad should match what the viewer has just watched.
Many buyers have neither. Peer39's May 2026 market digest cites its CTV Truths report: 60% of CTV bid requests still lack usable program-level signals. So the first question is often whether any content signal reaches the auction at all.
The shortlist
| Platform | Grain | How it reaches the buy |
|---|---|---|
| Anoki ContextIQ | Scene | Index Exchange Marketplaces, through existing SSP and DSP workflows |
| Wurl | Scene | Content Intelligence Platform, being integrated with Yahoo DSP, StackAdapt and Viant |
| Peer39 | Program | Pre-bid contextual and suitability categories in DSPs |
| Gracenote (Nielsen) | Program | Categories built on Gracenote metadata, offered through Peer39 partner DSPs; Magnite was the first SSP to support them |
| IRIS.TV (Viant) | Video | A content ID passed in the bid stream, with signals such as genre, sentiment and brand safety |
| IAS Total TV | Program | Measurement of show, genre, rating and language on Disney, NBCUniversal, Paramount and Prime Video |
| KERV | Object | Object-level recognition and ad-break targeting, part of Wurl's platform |
| Mixpeek | Scene | API that classifies your own video into IAB Content Taxonomy 3.1 for your stack to send |
A few notes from the vendors' own announcements:
- Index Exchange describes Anoki's data as scene-level understanding of "content tone, sentiment, and subject matter", activated with no added platform fees.
- Wurl launched its Content Intelligence Platform on September 15, 2026, combining its own scene-level targeting with KERV, Peer39 and Viant's IRIS.TV.
- Gracenote's categories cover genres, ratings, content types and advisories, and buyers can target or exclude metadata such as mood, theme, subject and location. Buyers do not get show or episode titles.
- IAS lists pre-bid optimization for CTV as a roadmap item for Total TV.
How to choose
- You buy CTV and want the ad to match the moment: Anoki or Wurl. Ask which SSPs and DSPs you can activate them in today.
- You need genre, rating and suitability controls across many publishers: Peer39, with Gracenote metadata if you want the program descriptors.
- You already buy through Viant: IRIS.TV video-level data is the shortest path.
- You need proof of where the ad ran: IAS Total TV for post-bid reporting.
- You sell the inventory and want to label it yourself: classify your own video and send the categories in the bid request (below).
Before you sign, ask what grain the product returns (program, fixed time window, or scene) and how the signal reaches the auction: a deal ID, a DSP segment, or fields in the bid request.
How do we target CTV contextually without viewer data?
Contextual targeting reads the content and ignores the person watching it. No device IDs, household graphs or cookies are involved. The signal comes from three places.
The bid request itself. OpenRTB 2.6 has a content object under app (and site) with fields built for this: genre, livestream (0 for on-demand, 1 for scheduled linear), network, channel, and cat with cattax. cat holds IAB Tech Lab category IDs, and cattax names the taxonomy they come from. In the AdCOM list of category taxonomies, 9 means Content Taxonomy 3.1. Watch the default: if cattax is missing, the spec says Content Category Taxonomy 1.0 is assumed, so 3.1 IDs sent without it get read against the wrong tree.
Program metadata. Vendors like Gracenote and Peer39 describe the show, and buyers apply those categories in the DSP before bidding.
The video. Scene-level systems classify frames, speech and on-screen text, store the result with timestamps, and look it up at the ad break. Classification happens when the content is ingested, so the auction reads stored IDs and never waits on a model.
A publisher controls this last option itself. The categories describe its own inventory and travel in standard OpenRTB fields.
Classifying your own CTV inventory with Mixpeek
Disclosure: I work on Mixpeek.
Mixpeek labels video the customer already owns. It buys no media and runs no exchange; your SSAI vendor or SSP carries the categories into the auction.
The pipeline has three steps.
1. Cut each episode into scenes. Point Mixpeek at the bucket where the video lives (S3, GCS or another object store). The multimodal extractor splits video with split_method: "scene" and a scene_detection_threshold, and each segment comes back as its own document with start_time, end_time, a transcript, OCR text and a description.
2. Classify each scene against IAB Content Taxonomy 3.1. The taxonomy is generated from IAB Tech Lab's published 3.1 file, and a unit test diffs every ID, name, parent and tier against that file, so a renamed category or moved parent fails the test. Taxonomies can be materialized at ingest, which stores the categories on each scene document. Each scene gets tier 1 to tier 4 category IDs, a confidence score per category, and its timestamps.
3. Send the categories at the break. When a cue marks an ad break, look up the scene that ended at the cue and put its IDs in the content object:
{
"app": {
"content": {
"livestream": 0,
"cattax": 9,
"cat": ["210", "216"]
}
}
}
In the 3.1 file, 210 is Food & Drink and 216 is its child, Cooking. A cookware buyer can now bid on the kitchen scene inside a show whose genre is drama.
Scores move from category to category, so set a cutoff for each one from labeled examples before the IDs go into an auction.
To see what the classifier returns before writing code, paste a transcript or a short scene description into the free IAB contextual classifier. It ranks categories across all four tiers by score. The longer walkthrough is in how scene-level contextual targeting works for CTV, and why CTV bid requests lack content categories covers the supply side.
Sources
- Index Exchange: Anoki launches with Index Marketplaces
- Advanced Television: Wurl launches Content Intelligence Platform
- Nielsen: Gracenote optimizes contextual connected TV ad targeting
- AdExchanger: Viant acquires IRIS.TV
- IAS launches Total TV solutions for connected TV
- Peer39 market signal digest
- OpenRTB 2.6, Object: Content
- AdCOM 1.0, List: Category Taxonomies
- IAB Tech Lab Content Taxonomy and the 3.1 file
Top comments (0)