MONETIZATION

ads.txt and app-ads.txt Explained: What They Are, Why They Exist, and How to Set Them Up

June 14, 2026 8 min read OTT Engine Team

If you run ads on a website or a streaming app and you are not earning what you expect, an ads.txt or app-ads.txt file is one of the first things a buyer checks. These two plain-text files tell the programmatic market exactly who is allowed to sell your ad inventory. Get them wrong and premium demand quietly skips you; get them right and you close the door on a whole category of ad fraud. Here is what each file is, why the IAB created them, where to host them, and sample files you can copy.

What ads.txt and app-ads.txt actually are

Both are simple, public text files that list your authorized digital sellers - the ad exchanges, SSPs, and resellers you have approved to sell your inventory, along with your account ID at each one. ads.txt (Authorized Digital Sellers) covers websites. app-ads.txt covers apps: mobile, OTT, and connected-TV.

A buyer's system downloads the file and only bids on your inventory when the seller offering it appears in your list. If a selling path is not declared in your file, the bid is treated as unauthorized and dropped. That single rule is what makes the files so powerful.

Why these files came into existence

Before ads.txt, programmatic buying had a spoofing problem. A fraudster could run a low-value site, label its inventory as a premium publisher in the bid request, and resell it through an exchange. Buyers thought they were paying for premium reach; the money went to the spoofer instead of the real publisher.

The IAB Tech Lab released ads.txt in 2017 to close that hole. By letting a publisher publicly declare its authorized sellers, buyers could verify that whoever was offering 'premium-site.com' inventory was actually allowed to sell it. app-ads.txt followed in 2019 to extend the same protection to mobile and CTV apps, which had no web domain of their own to anchor the declaration.

The result: domain and app spoofing became far harder, unauthorized reselling was exposed, and ad dollars that were leaking to fraud started flowing back to legitimate publishers.

ads.txt vs app-ads.txt: the difference is where they live

The file format is identical. What differs is how a buyer's crawler finds the file:

  • ads.txt is hosted at the root of your website domain: https://yourdomain.com/ads.txt. Crawlers look there automatically because they already know the site's domain.
  • app-ads.txt is hosted on the developer website you declare in each app store listing. A crawler reads your app's store page (Roku, Apple App Store, Google Play, Amazon, Samsung, LG), finds the developer website URL, then fetches https://that-domain.com/app-ads.txt.

This is the step most CTV publishers miss: if your Roku or Fire TV listing has no developer website, or points to a domain with no app-ads.txt, buyers cannot verify your app and demand quietly drops.

Where to host them, exactly

  • Web: https://yourdomain.com/ads.txt - the root of the domain, not a subfolder, served as text/plain over HTTPS.
  • Apps: https://developer-domain.com/app-ads.txt - where 'developer-domain.com' is the website listed in your app's store listing. Use one domain across all your apps and list every store's seller relationships in that one file.

Both files must return HTTP 200 and be publicly readable: no login, no redirect chains, no robots.txt block. If a crawler cannot fetch a clean 200, it behaves as if the file does not exist.

The file format (and a sample you can copy)

Each non-comment line declares one authorized seller with four comma-separated fields:

  1. Domain of the advertising system (the SSP or exchange), for example google.com.
  2. Your publisher account ID with that system - the seller account the inventory is sold under.
  3. Relationship: DIRECT if you contract with that system directly, or RESELLER if an authorized partner sells on your behalf.
  4. Certification Authority ID (optional but recommended) - the system's TAG ID, used to confirm the entry.

A minimal ads.txt for a website:

# ads.txt - hosted at https://example.com/ads.txt
# Fields: ad-system domain, publisher account ID, DIRECT|RESELLER, certification authority ID
google.com, pub-0000000000000000, DIRECT, f08c47fec0942fa0
rubiconproject.com, 16414, DIRECT, 0bfd66d529a55807
pubmatic.com, 158096, DIRECT, 5d62403b186f2ace
appnexus.com, 3656, RESELLER, f5ab79cb980f11d1

contact=adops@example.com
subdomain=video.example.com

The app-ads.txt for a CTV or mobile publisher uses the same syntax, hosted on the developer domain from your store listings:

# app-ads.txt - hosted at https://example.com/app-ads.txt
# example.com is the developer URL declared in your Roku / Fire TV / Apple TV listings
google.com, pub-0000000000000000, DIRECT, f08c47fec0942fa0
magnite.com, 1234, DIRECT, 1a4e959a1b50034a
freewheel.tv, 56789, DIRECT, 0c8f5958fb6c7d2b
pubmatic.com, 158096, RESELLER, 5d62403b186f2ace

Lines starting with # are comments. contact= and subdomain= are optional variables; every other line is a seller record.

Build or check your file in seconds with our free ads.txt & app-ads.txt validator and generator - it flags field-count, DIRECT/RESELLER, and app-ads.txt placement problems before buyers do.

How buyers and crawlers use the files

DSPs, verification vendors, and the SSPs themselves crawl ads.txt and app-ads.txt on a regular cadence - typically daily to weekly. They cache your authorized list and, at auction time, check whether the seller in the bid request is on it. Unauthorized sellers are filtered out before a bid is ever placed.

The practical consequence: a new SSP you onboard will not generate revenue until its line appears in your file and the crawlers re-read it. Always add the seller record before you expect spend to start.

Common mistakes that quietly cost you money

  • No app-ads.txt for CTV. Web teams remember ads.txt but forget the app version, so buyers cannot verify their streaming apps.
  • No developer URL in the store listing. Without it, the crawler has no domain from which to fetch app-ads.txt.
  • Wrong account IDs or DIRECT/RESELLER mislabeling. If a line does not match the SSP's own records, that entry is ignored.
  • File not at the root, or behind a redirect or login. It must be a direct, public 200 at /ads.txt or /app-ads.txt.
  • Letting it go stale. Old lines for dropped SSPs and missing lines for new partners both leak yield. Review the file whenever your demand stack changes.

The bottom line

ads.txt and app-ads.txt are five minutes of setup that protect every dollar of programmatic revenue you earn. Build them from your real seller relationships, host them at the root of the correct domain, and keep them current as partners change. OTT Engine wires up app-ads.txt and your SSP relationships as part of every monetized channel we ship. Book a demo to get your inventory verified and earning.

Frequently Asked Questions

What is an ads.txt file?

A public text file at the root of your website (https://yourdomain.com/ads.txt) that lists the ad exchanges and resellers authorized to sell your inventory, with your account ID at each. Buyers use it to reject spoofed or unauthorized sellers.

What is app-ads.txt and how is it different?

app-ads.txt is the app version of ads.txt, for mobile and CTV/OTT apps. The format is identical, but it is hosted on the developer website declared in your app store listing rather than on the app itself.

Where do I host app-ads.txt for a Roku or Fire TV app?

On the developer website URL you set in the app's store listing. The crawler reads that URL from your Roku or Fire TV listing, then fetches https://that-domain.com/app-ads.txt. Make sure the listing has a developer website and that the file returns a public HTTP 200.

Is ads.txt required?

It is not legally mandatory, but it is effectively required to monetize. Most DSPs and SSPs will not buy unauthorized inventory, so without it you lose access to premium programmatic demand.

What is the difference between DIRECT and RESELLER?

DIRECT means you have a direct contract with that ad system. RESELLER means an authorized partner sells your inventory through that system on your behalf. Label each line correctly or the record is treated as invalid.

How often are ads.txt and app-ads.txt crawled?

Buyers and verification vendors typically re-crawl daily to weekly. A newly added seller will not earn until the file updates and the crawlers re-read it, so add the line before you expect spend.

✍️
OTT Engine Team
Streaming technology experts helping publishers launch on Roku, Fire TV, and Apple TV.

Ready to launch your streaming channel?

Book a 30-minute demo with our team - we will get your build started the same day.

Book a Demo

Related articles