What is app-ads.txt, and how do buyers verify app sellers?
Part of Supply path transparency

The short answer
app-ads.txt is the IAB Tech Lab standard that lets an app developer list the companies authorized to sell ad space in its mobile or connected TV apps. The file sits on the developer website named in the app's store listing. Buyers follow the bid request's store URL to that listing, then to the file, and match the seller.
Key takeaways
- An app has no domain of its own, so app-ads.txt borrows one: the developer website that the app store listing declares.
- Verification runs in a chain: store URL in the bid request, developer URL on the store page, app-ads.txt on that domain, then the seller account.
- Connected TV adds inventory sharing, which the inventorypartnerdomain directive handles by pointing to a content owner's ads.txt.
- A clean match proves authorization only; it does not prove the traffic is valid or that a specific show was licensed.
What is app-ads.txt?
Definition
- app-ads.txt (Authorized Sellers for Apps)
- A plain text file, in the ads.txt record format, that an app developer posts on its developer website to list the advertising systems and account IDs authorized to sell ad space in its apps.
The app-ads.txt specification (opens in a new tab) describes itself as an extension of ads.txt, which was developed in the spring of 2017 for desktop and mobile web, to software distributed through mobile app stores, connected television app stores and similar channels. It was developed with the support of the OpenRTB working group. Its core idea is a link: the store listing points to a developer website, and the developer controls what that website says.
The records are the same as in ads.txt: system domain, account ID, DIRECT or RESELLER, and an optional certification ID. Two differences matter. The file is named app-ads.txt so that app and web authorizations can be managed separately without conflict. And the SUBDOMAIN directive is unused in app-ads.txt and should be ignored if found. Outside the app to developer link, the specification says enforcement should be treated as nearly identical to ads.txt for the web.
Where is an app's app-ads.txt file published?
On the developer website listed in every app store that distributes the app. The specification says publishing a website and providing its URL is required for an app's inventory to take part in the authorized seller scheme at all. Google's AdMob help on app-ads.txt (opens in a new tab) puts it from the publisher's side: the developer website must be linked in the store listings, and the file goes in its root directory.
How a verifier turns a developer URL into a file address
- Take the host name. From the developer URL in the store listing, keep only the host, for example sub.example.com from https://sub.example.com/about.
- Keep at most one subdomain. Drop every name before the first subdomain that precedes the public suffix, so another.sub.example.com becomes sub.example.com.
- Remove www. or m. Those prefixes are stripped, so www.example.com becomes example.com.
- Append /app-ads.txt. Fetch the HTTPS version first, falling back to HTTP only when SSL is unavailable.
- Fall back to the parent once. If no file is found on the subdomain, the verifier uses the file on the subdomain's parent domain.
| Developer URL in the store listing | Where a verifier looks |
|---|---|
| https://example.com/test | https://example.com/app-ads.txt |
| https://www.example.com/test | https://example.com/app-ads.txt, not the www. address |
| https://subdomain.example.com/test | subdomain.example.com/app-ads.txt first, then example.com/app-ads.txt |
| https://another.subdomain.example.co.uk/test | subdomain.example.co.uk/app-ads.txt first, then example.co.uk/app-ads.txt |
How do buyers verify an app's sellers?
The chain starts in the bid request. The specification requires ad networks and SSPs that issue requests to include the store URL of the app's listing, and the OpenRTB 2.6 App object (opens in a new tab) carries it as storeurl, next to bundle, the app's store ID. App stores are asked to publish three meta tags on each listing page: the developer website, the bundle ID and the store ID. The verifier checks that the IDs on the page match the request, then crawls the file.
The specification also sets the pace and the index. Verifiers should crawl a store URL no more than weekly, only for apps they actually receive impressions from, and should index apps by store domain plus bundle or store ID rather than by full store URL, since one app can have many URL variants for countries and languages. For transparency, verifiers should report which domain they used to find the file and which store domain led to it. Once the file is found, the seller match and the sellers.json lookup work exactly as on the web, described step by step in the manual ads.txt check.
How does app-ads.txt apply to CTV apps?
Connected TV uses the same file, with two extra requirements. First, the app must be identifiable. IAB Tech Lab's OTT/CTV Store Assigned App Identification Guidelines (opens in a new tab), updated in October 2020, ask platforms to use the ID the TV app store assigns, and say a qualifying store exposes a consistent, unique store ID and a crawlable web listing for each app. Second, CTV inventory can be shared: a distributor app may carry a programmer's channel, and both may have the right to sell some of its ads.
Tech Lab's March 2021 guidance for inventory sharing (opens in a new tab) handles the second case with the INVENTORYPARTNERDOMAIN directive. The app owner lists the partner's domain in its app-ads.txt, the SSP passes the same domain in the request's app.inventorypartnerdomain field, and the verifier reads the partner's ads.txt. The ads.txt 1.1 specification (opens in a new tab) says only one hop is followed. The guidance also says an app owner whose CTV app has different authorized seller IDs from its mobile app should publish a CTV specific file at a new domain.
| What the verifier finds | Outcome |
|---|---|
| No usable app-ads.txt from the store listing's developer domain | Inconclusive: authorization cannot be determined |
| The seller is listed in the app's own app-ads.txt | Authorized |
| The app's file has no matching INVENTORYPARTNERDOMAIN line | Unauthorized |
| The partner line matches, but the partner domain has no usable ads.txt | Inconclusive: authorization cannot be determined |
| The partner line matches and the seller is in the partner's ads.txt | Authorized |
Platform enforcement on TV can be looser than on mobile. Google's Display & Video 360 help (opens in a new tab), checked in October 2026, says CTV devices that don't support app-ads.txt are treated as non participating, and that its enforcement does not currently impact TV apps without an app-ads.txt file; it stops buying only TV app inventory whose file exists but does not declare the seller. A CTV plan therefore needs its own check rather than relying on the platform default.
What can app-ads.txt not tell a buyer?
The specification is candid about its limits, and each one points to a separate check a buyer still has to make.
Questions that remain after a clean app-ads.txt match
- Whether a dishonest platform swapped an unauthorized publisher ID for an authorized one before offering the impression, which the specification says the standard cannot stop.
- Whether the traffic is valid: the specification says authorized inventory must still be screened and monitored for invalid traffic.
- Whether a seller is authorized for only some of a developer's apps, since one file covers every app that lists the domain and the standard has no per app scope.
- Whether the seller has rights to a specific show or channel inside a CTV app, which Tech Lab's 2021 guidance lists as out of scope.
- Who earns what under a revenue sharing arrangement, which the same guidance also leaves out of scope.
- Whether the content around the ad suits the brand, which no seller file describes.
What does an app-ads.txt check look like on a real plan?
Fictional example
An intercity coach line in Quebec
A fictional coach company running routes between Montreal, Quebec City and Sherbrooke wants video ads in French and English inside travel, weather and news apps on phones, and inside streaming apps on connected TVs. The trading desk shortlists eight mobile apps and four CTV apps, and the planner checks each before the deal request.
Six mobile apps resolve cleanly: the store listing names a developer site, its app-ads.txt lists the desk's exchange as DIRECT, and the exchange's sellers.json names the developer. One weather app's listing points to a www. address with no file at the root, so the app is non participating; the planner asks the developer to fix the location. One news app's file lists only a reseller, which the planner logs as an authorized resold path.
Among the CTV apps, a distributor app's file declares a programmer's domain with INVENTORYPARTNERDOMAIN, and the seller in the desk's sample request appears in that programmer's ads.txt, so the path is authorized. Another TV app has no file at all. Because the platform does not currently block TV apps without a file, the planner removes that app from the deal by hand rather than leaving it to the default.
Where does PlacementGraph fit when a plan includes apps?
Frequently asked questions
Is app-ads.txt required to run ads in an app?
It is a voluntary IAB Tech Lab standard, and Google's Display & Video 360 help says an ads.txt or app-ads.txt file isn't mandatory but is highly recommended. In practice, platforms that enforce authorized sellers treat an app without a file as non participating and leave it out unless the buyer opts in.
How long does a new app-ads.txt file take to be recognized?
It depends on the verifier. Google's AdMob help says its crawler can take up to 24 hours to crawl and verify the file. The specification asks verifiers to crawl store listings no more than weekly, so a change to the developer website can take longer to reach every platform.
Can one app-ads.txt file cover several apps?
Yes. Every app whose store listing names the same developer domain shares that domain's file. The specification says a developer that wants different sellers for different apps must use separate developer domains or subdomains, and it advises against trying to exert fine grained control through the file.
Does a CTV app use ads.txt or app-ads.txt?
Its own authorizations go in app-ads.txt on the developer website named in the TV app store. When it shares inventory with a content owner, its file can point to that partner with INVENTORYPARTNERDOMAIN, and the ads.txt 1.1 specification says the reference is followed to the partner's ads.txt file only.
Sources
- Authorized Sellers for Apps (app-ads.txt) (opens in a new tab)IAB Tech Lab
- ads.txt Specification Version 1.1 (opens in a new tab)IAB Tech Lab
- ads.txt and app-ads.txt: Guidance for Inventory Sharing (in CTV/OTT and beyond), March 2021 (opens in a new tab)IAB Tech Lab
- OTT/CTV Store Assigned App Identification Guidelines (updated October 2020) (opens in a new tab)IAB Tech Lab
- OpenRTB 2.6 specification (opens in a new tab)IAB Tech Lab
- Set up an app-ads.txt file for your app (opens in a new tab)Google AdMob Help
- Authorized Digital Sellers (opens in a new tab)Google Display & Video 360 Help
Researched and written by PlacementGraph Research. Read how we research, source and update these pages. Corrections: diana@placementgraph.com.