
CTV monetization is how a streaming app or channel on a smart TV, streaming stick or games console turns viewing time into revenue. Most publishers earn from video ads in breaks (AVOD and FAST), from subscriptions (SVOD), or from a mix of both. Ad revenue depends on the content, the audience, a clean technical setup and access to enough demand.
Here's the catch. Buyers only pay well for CTV inventory they can verify. If app-ads.txt is missing, requests lack device details or breaks throw errors, demand partners bid less or skip you, however good the content is. So fix the trust signals first, then go after demand. Our CTV monetization service page covers how we help streaming publishers with both.
What CTV monetization means for a streaming publisher
CTV monetization means earning money from people who watch your content on a TV screen through an app. Connected TV covers smart TVs, Roku players, Amazon Fire TV, Apple TV, Android TV and Google TV devices, and games consoles.
OTT ("over the top") is the wider term. It means any video delivered over the internet instead of cable or satellite, so OTT monetization also covers phones, tablets and the web.
A common wrong idea is that a CTV app is a website on a bigger screen. It isn't. Ads play full screen, nobody clicks, there are no browser cookies, and most ad decisions happen on servers. Buyers lean on the app ID, the device details in each request and your seller files to judge whether an impression is real.
OTT and CTV monetization models compared
There are four common models, AVOD, FAST, SVOD and TVOD, and many publishers run two at once. A mix of them is called hybrid video on demand (HVOD). The right mix depends on your library size, audience loyalty and whether people would pay.
| Model | How it earns | Best fit | Main trade-off |
|---|---|---|---|
| AVOD (advertising video on demand) | Free on-demand videos with ad breaks | Large libraries, broad audiences | Needs steady viewing time and demand to fill breaks |
| FAST (free ad-supported streaming TV) | Free linear channels with scheduled ad breaks | Publishers with enough content to programme a 24/7 channel | Needs scheduling, a playout setup and distribution deals |
| SVOD (subscription video on demand) | Monthly or yearly subscriptions, usually ad-free | Niche or premium content people will pay for | Hard to grow; churn needs constant work |
| TVOD (transactional video on demand) | Pay per rental or purchase | Films, events, courses | Revenue is spiky and tied to releases |
| HVOD (hybrid video on demand) | A paid tier plus a cheaper or free tier with ads | Publishers with paying fans and a wider casual audience | Two products to run, and entitlement logic in every app |
Say you have a few hundred cooking episodes and a loyal web following. We'd launch an AVOD app first and skip FAST for now. A 24/7 channel built on a small library loops the same shows within hours, and viewers notice.
How much CTV monetization can earn per viewing hour
CTV ad revenue is best measured per viewing hour, because that's what you actually have to sell. In July 2026, Omdia put the monetization benchmark for ad-supported CTV at $0.21 per hour of viewing, if every available ad slot were sold.
Read that number carefully. It's a ceiling, not a typical result. Omdia based it on 2025 ad loads across eight markets (Australia, Brazil, Canada, France, Germany, Mexico, the UK and the US), said the industry ran at 65% of its commercial capacity, and found US placements earned a premium of about 30% over comparable markets.
Here's how we'd use it. Say your app logs 100,000 viewing hours a month. At $0.21 an hour, the ceiling is $21,000 a month with every slot sold. Your real number is that ceiling multiplied by your fill rate and adjusted for your audience's countries, so a new app with half its breaks unfilled earns well under it.
The formula behind it is simple: viewing hours, times ad minutes per hour, times fill rate, times the price buyers pay. Each of those four is a lever. Growing viewing hours and fill rate is usually easier than pushing prices.
CTV ad formats buyers expect
Linear video ads in breaks are the core CTV ad formats, and they carry most of the demand. Treat everything else as an extra until your video breaks run cleanly.
- Pre-roll: plays before the content. Easy to add, but a long one pushes viewers away.
- Mid-roll: plays in breaks during the content. On long shows, mid-rolls carry most of the ad time.
- Post-roll: plays after the content. Plenty of viewers leave first.
- Ad pods: several ads played back to back in one break, like a TV commercial break. A structured pod has fixed slots, a dynamic pod sets a total length and fills it with any mix of ad durations, and a hybrid pod combines the two.
- Pause and overlay ads: shown on pause or over the video. Support varies by platform and buyer.
Video ads are delivered in VAST, the IAB Tech Lab's XML standard that tells a video player which ad to play and how to report it. The IAB Tech Lab VAST page lists VAST 4.3 as the newest numbered version, with a separate CTV Addendum from 2024. Ask partners for plain video files (MP4 or HLS) inside VAST. Most TV players and server-side setups can't run VPAID, the old interactive format, and a VPAID ad in a break means dead air.
Server-side ad insertion and how ads reach the screen
Most CTV publishers use server-side ad insertion (SSAI), where a server stitches the ads into the video stream before it reaches the TV. The viewer sees one smooth stream, and the player doesn't have to load each ad on its own.
Client-side vs server-side
With client-side insertion, the app's player requests the ad and switches to the ad file, which on TV devices can mean buffering or a black screen. For live streams and FAST channels, we'd go server-side without much debate. For a small on-demand app on one or two platforms, client-side is simpler to build and fine as long as playback stays smooth.
What SSAI changes for buyers
The server makes the ad request, so it must pass the viewer's device type, app ID, IP address, user agent and, where allowed, advertising ID. Here's the classic mistake. If the server sends its own IP and user agent, every impression looks like it comes from one data centre, and buyers treat that as invalid traffic. Google calls its version Dynamic Ad Insertion (DAI) and lists HTML5, Android, iOS, tvOS, Chromecast and Roku among its supported platforms. For apps that request programmatic ads without the full IMA SDK, Google also offers the Programmatic Access Libraries (PAL).
How to monetize a CTV app: setup in the right order
To monetize a CTV app, fix the trust signals first and add demand second. Most people get this backwards: they sign demand partners, then find the store listing points to a social page with no app-ads.txt. Here's our order.
- Publish the app on each store with a developer website you control. Buyers look for app-ads.txt on that URL.
- Set up app-ads.txt at the root of that website (see below).
- Choose an ad server and insertion method. Pick client-side or server-side for each platform, and confirm device signals pass through.
- Design your ad breaks. Set break positions, length, ads per pod and a frequency cap. Put mid-rolls at natural scene or chapter changes, not mid-sentence, and keep a competitive separation rule so two ads from the same category don't play in one pod.
- Connect demand. Add programmatic demand through exchanges or a monetization partner.
- Test on real devices. Play every break on every platform. Check that ads start, finish and report.
- Measure and adjust. Watch fill rate, completion rate and VAST errors by platform, then tune. Two VAST error codes are worth knowing by heart: 403 means the player couldn't find a media file it supports (often a VPAID-only or wrong-format ad), and 402 means the media file timed out.
Tip: keep a sheet listing each platform, its store listing URL, app ID and app-ads.txt URL. Many CTV setup problems are a mismatch between these four.
app-ads.txt for CTV apps
app-ads.txt is required in practice for programmatic CTV demand, because many buyers skip app inventory they can't verify. The IAB Tech Lab describes app-ads.txt as an extension of ads.txt for apps distributed through mobile app stores, connected television app stores and other channels, and the line format is the same. Our ads.txt guide for publishers walks through that format.
The big difference from a website is where the file lives. Buyers take the developer website from your store listing and look for the file at that domain's root. If the listing points to a social page or a domain you don't control, you can't publish it.
Check each store on its own. Roku, Fire TV, Google TV and smart TV stores each keep their own listing. Say your Fire TV listing links to yourshow.tv but your Roku listing still links to an old domain. Buyers on your Roku inventory will look for the file on the old domain, find nothing, and pass.
| Setup piece | Where it lives | What it proves |
|---|---|---|
| Store listing | Each CTV app store | The app is real and owned by a named developer |
| app-ads.txt | Root of the developer website | Which sellers are allowed to sell the app's inventory |
| sellers.json | Each ad platform's domain | Who the seller is and whether it is the publisher or an intermediary |
| Device signals in the ad request | Your SSAI or player setup | That a real device, app and viewer are behind the impression |
| VAST tracking | Ad server and player | That the ad played and how much of it was watched |
How SSPs, ad servers and DSPs fit together in CTV
A CTV ad setup has three layers: your ad server decides which ad plays, a supply-side platform (SSP) sells your inventory to buyers, and buyers bid through demand-side platforms (DSPs). Knowing which layer does what makes it much easier to pick partners.
| Layer | Who runs it | What it does for a streaming app |
|---|---|---|
| Ad server | The publisher | Holds your ad rules, break settings, frequency caps, direct campaigns and reporting, then returns VAST to the player or SSAI server |
| SSP | An ad tech company or monetization partner | Packages your breaks into bid requests, runs the auction, applies floors and quality checks, and pays you |
| DSP | Advertisers and agencies | Decides which impressions to bid on, at what price, using the device, app and content signals you send |
SSPs matter more on CTV than on the web because the market is split across many devices, app stores and players. One SSP connection can bring demand from many DSPs to every platform you're on, instead of you signing each buyer separately.
How to choose an SSP or CTV demand partner
Pick a partner on the quality of demand it reaches and how well it fits your setup, not on a promised CPM. These are the questions we'd ask first:
- Does it support your insertion method? Confirm it works with your SSAI vendor or player, and passes device signals correctly.
- Can it bid on ad pods? The IAB Tech Lab's OpenRTB 2.6 added features for CTV buying and selling, including new attributes for ad pods. A partner on older versions sells your break one slot at a time.
- How does it handle fraud and bid quality? Ask how it checks app-ads.txt, sellers.json and device data, and how it blocks spoofed CTV traffic.
- What controls do you get? Price floors, advertiser and category blocklists, and competitive separation should all be yours to set.
- What reporting and payment terms apply? Look for reports by app, platform and country, and clear payment dates.
Programmatic and direct demand for connected TV
Start with programmatic demand, then add direct deals once you can show buyers steady viewing hours and an audience breakdown by country. Connected TV monetization through programmatic channels reaches many buyers without a sales team.
- Open programmatic: buyers bid in real time through exchanges. Good for fill; prices move with the market.
- Private marketplaces (PMPs): invite-only auctions for selected buyers, often with a floor price.
- Curated deals: a partner packages your inventory with others by content type or audience and sells it as one deal.
- Programmatic guaranteed and direct: fixed volumes and prices, mostly for larger publishers.
Once you run more than one demand source, let them compete in one unified auction instead of a waterfall that asks each partner in turn. A waterfall can hand a break to a lower bidder because it asked first, and it adds delay before the break starts.
Prices vary by country, season, content, device and the data you pass. Be wary of anyone quoting a fixed CPM before seeing your inventory. Google Ad Manager supports CTV features such as ad rules, frequency caps and server-side unwrapping for VAST tags, which cuts the delay from ad redirects.
CTV monetization metrics to track
Track a small set of numbers by platform and country, because a problem on one device type hides inside a healthy total. These are the ones we'd put on a weekly report.
| Metric | What it tells you |
|---|---|
| Viewing hours | How much supply you have to sell |
| Ad load (ad minutes per hour) | How much of that time is ad time, and whether viewers will tolerate it |
| Fill rate | The share of ad slots that got a paid ad; low fill points to demand or setup gaps |
| Completion rate | The share of ads played to the end; buyers pay more for high completion |
| eCPM | What you earn per 1,000 ad impressions across all demand |
| Revenue per viewing hour | The single number that compares platforms, months and partners fairly |
| VAST error rate | How often an ad fails to play, by error code |
Revenue per viewing hour is the one to compare against the Omdia ceiling above. If yours sits far below it, check fill rate and VAST errors before you add a new partner.
Common mistakes that hold CTV revenue back
Most revenue problems on new CTV apps are setup gaps, not a lack of buyers. Check these first when fill or completion looks low.
- A missing or wrong app-ads.txt, or a store listing that points to the wrong domain.
- Server-side requests that send the server's IP and user agent, or no device type and app ID.
- Breaks that are too long or too frequent, so viewers leave.
- No frequency cap, so viewers see the same ad many times in one session.
- VPAID or other ad files the player can't play, which leave blank time in breaks.
Frequently asked questions
What is the difference between CTV and OTT?
CTV is the device: a TV that streams through an app. OTT is the delivery method: video over the internet instead of cable or satellite, on any screen. All CTV viewing is OTT, but OTT also covers phones, tablets and computers.
Do I need app-ads.txt for a Roku or Fire TV channel?
If you sell ads programmatically, yes in practice. Buyers check the developer website from each store listing and won't bid on inventory they can't verify. For Roku's own ad rules, see our guide on how to monetize Roku channel content with ads.
Is server-side ad insertion required?
No, but it's the norm for FAST channels and live streams. Client-side insertion works for simpler on-demand apps if playback stays reliable on every device.
How much can a CTV app earn from ads?
There's no reliable single figure for your app. Omdia's 2026 benchmark of $0.21 per viewing hour is a ceiling that assumes every ad slot is sold. Your result depends on viewing hours, audience location, content, fill rate and the demand you can reach, so a partner should look at your inventory before giving any estimate.
What is a FAST channel?
A FAST channel is a free, ad-supported streaming TV channel that plays a linear schedule, like broadcast TV, inside a streaming app or platform. Viewers can't pick what plays next, and revenue comes from the ad breaks. Running one needs a playout setup and enough content to fill a 24/7 schedule.
What does an SSP do in CTV advertising?
An SSP sells your CTV ad breaks to buyers. It turns each break into a bid request, runs the auction across the DSPs it connects to, applies your floors and blocklists, and pays you for the impressions sold.
Next step: get your CTV app ready for demand
CTV revenue follows trust: a clean store listing, a correct app-ads.txt and ad requests that carry real device details come before any new demand partner. Our app monetization service covers mobile apps too. If you also publish on the web, the guide on how to get Google AdX access explains how partner-based access to Google demand works. When you're ready, contact MH AdX and we'll review your channels, app-ads.txt and ad setup with you.


