On May 16, 2017, the IAB Tech Lab announced ads.txt, a plain text file that a website puts at the root of its domain to name every ad company allowed to sell its ad space (IAB Tech Lab, May 2017).
Short answer
ads.txt is the publisher's list of authorized sellers: one line per ad system, with the publisher's account ID there and the word DIRECT or RESELLER. sellers.json is the ad system's side: it says which company is behind each of those account IDs. The SupplyChain object (schain) travels inside each bid request and lists the companies in its payment path; when it is marked complete, all of them back to the site owner. A buyer who checks all three can tell whether the seller is one the site authorized, and who sits in between. None of them proves a human saw the ad.
What is ads.txt, and what problem does it solve?
ads.txt ("Authorized Digital Sellers") is a public file at /ads.txt on a website's root domain, in which the site owner lists the ad systems and account IDs that may sell its inventory. The specification describes the fraud it targets: ad space "offered to buyers with a misrepresented label", where "the domain of the webpage, or the ID of the mobile app has been falsified" (ads.txt 1.1, section 2). The IAB Tech Lab calls this counterfeit inventory.
Before ads.txt, a buyer had only the seller's word that an impression came from a well-known news site. Now the buyer can fetch the site's own file and see whether the account selling the impression is on it. The publisher writes the list; anyone can read it.
exchange.example, 4471, DIRECT, a1b2c3
- Ad system domain (required). The "canonical domain name of the SSP, Exchange, Header Wrapper, etc system that bidders connect to".
- Your account ID (required). It "must contain the same value used in transactions", usually
publisher.idin an OpenRTB bid request. Copy it exactly from your partner. - Relationship (required). DIRECT or RESELLER, read case-insensitive.
- Certification authority ID (optional). The TAG ID of the ad system; the spec says this field "may be deprecated in a future version".
What do DIRECT, RESELLER and the other terms mean?
- DIRECT
- The publisher "directly controls the account" on that ad system, which "tends to mean a direct business contract" with it (ads.txt 1.1).
- RESELLER
- The publisher "has authorized another entity to control the account" and resell the ad space through that ad system (ads.txt 1.1).
- OWNERDOMAIN
- Added in version 1.1: the business domain of the company that owns the site. It should equal the
domainin that publisher's sellers.json entries (section 3.5.1). Without it, buyers assume the owner domain is the site's own domain (ads.txt 1.1, section 4.7). - MANAGERDOMAIN
- Also from 1.1, optional: the domain of a primary or exclusive monetization partner, at most one per country (ads.txt 1.1).
- seller_id
- The account ID in a sellers.json file: "the same ID that appears in an ads.txt file" and in the schain
sid(sellers.json 1.0). - seller_type
- PUBLISHER when the named company owns the inventory and the ad system pays it directly; INTERMEDIARY when it does not own it or is not paid directly; BOTH when the account sells both kinds (sellers.json 1.0).
- schain complete
- Set to 1 when the chain "contains all nodes involved in the transaction leading back to the owner" of the site or app, 0 when it does not (SupplyChain object).
How does a buyer check one ad slot against the three files?
Follow one made-up bid request for an ad on news.example. The three files below are what the buyer's system reads; each check marks the lines it relies on with its number and color.
Bid request excerpt
"site": { "domain": "news.example","publisher": { "id": "4471" } },"source": { "schain": {"ver": "1.0", "complete": 1,"nodes": [{ "asi": "exchange.example","sid": "4471", "hp": 1 }] } }
news.example/ads.txt text/plain
# ads.txt for news.example[email protected]OWNERDOMAIN=news-group.exampleexchange.example, 4471, DIRECTresell.example, 88, RESELLER
exchange.example/sellers.json excerpt
{ "version": "1.0", "sellers": [{ "seller_id": "4471","seller_type": "PUBLISHER","name": "Example News Ltd","domain": "news-group.example" }] }
-
Read who is selling
The request says the ad is on
news.example. Its schain has one node: account4471onexchange.example, withcompleteset to 1. In a complete chain the first node is the owner's own account and the last is the company sending the request; here they are the same, so no reseller sits in between. -
Find the line in ads.txt
The buyer fetches
news.example/ads.txtand looks for the pairexchange.example, 4471. It is there, marked DIRECT. A request selling news.example through an account the file does not list comes from an unauthorized seller, and Display & Video 360 excludes unauthorized sellers (Display & Video 360 help). -
Look the account up in sellers.json
The ad system named in the line publishes
/sellers.jsonon its own root domain. Seller4471is a PUBLISHER: the named company owns the inventory and is paid directly. Neither spec formally pairs these words with DIRECT and RESELLER, but the definitions line up: DIRECT means the publisher controls the account itself. A DIRECT line that leads to an INTERMEDIARY account is a mismatch worth asking about (an account marked BOTH can carry either kind). -
Match the owner
The ads.txt file declares
OWNERDOMAIN=news-group.example, and the sellers.json entry has the samedomain. The spec asks for exactly this: in a complete chain, the first node's seller domain should match the OWNERDOMAIN (ads.txt 1.1, section 3.5.1). All four checks pass.
Which file answers which question?
The IAB Tech Lab sums up the three standards in one line each: ads.txt, "Who's allowed to sell my inventory?"; sellers.json, "Who actually is the seller?"; the SupplyChain object, "How is the bid request generated and handled?" (Digital Supply Chain info sheet, October 2026).
| File | Who publishes it | Where it lives | Final version |
|---|---|---|---|
| ads.txt | The website owner | /ads.txt on the root domain, served as text/plain | 1.0 in June 2017; 1.1, with OWNERDOMAIN and MANAGERDOMAIN, in 2022 |
| app-ads.txt | The app developer | /app-ads.txt on the developer website listed in the app store | March 2019 |
| sellers.json | The ad system (SSP, exchange) | /sellers.json on the ad system's root domain, as application/json | July 2019 |
| SupplyChain object | Every seller that handles the request, each adding its own node | Inside the bid request: source.schain in OpenRTB 2.6, source.ext.schain in 2.5 | July 2019 |
Dates: ads.txt change log, IAB Tech Lab on app-ads.txt, IAB Tech Lab on sellers.json and SupplyChain. For apps, publishing a website and listing its URL in the store "is required for the app's ad inventory to participate" in the scheme; the app-ads.txt file goes on that website (app-ads.txt spec).
Why do buyers care which companies sit between them and the publisher?
of advertiser spend could not be traced to any company in the ISBA and PwC study of the UK programmatic supply chain. Publishers received about half.
- 51% reached publishers
- 34% went to supply chain costs that could be traced (100% minus the other two)
- 15% "unknown delta": spend no one could attribute, about a third of all supply chain costs
The study is small and dated, but it shows the problem these files help with: money leaves the advertiser, passes through several companies, and part of it cannot be followed. ads.txt, sellers.json and schain do not show fees. They show who is in the path, so a buyer can choose shorter, known paths. The money question has not gone away: in its December 2023 study of 21 advertisers' log-level data, the ANA found that "only 36 cents of every dollar that enters a demand-side platform (DSP) effectively reaches the consumer" (ANA).
What should a publisher check before publishing ads.txt?
- One line for every account each ad partner sells through, with the account ID exactly as the partner uses it in bid requests.
- DIRECT only for accounts you control yourself; RESELLER for accounts a partner controls on your behalf.
- The file at
/ads.txton the root domain, sent asContent-Type: text/plain. The spec says any other content type is an error and the content is ignored (ads.txt 1.1, section 3.2). - HTTP requests for the file redirected to HTTPS, which the spec recommends when spoofing of the file is a concern. Redirects may hop around inside your root domain; only one redirect to another domain is allowed (ads.txt 1.1, sections 3.1 and 5.4).
- If the file lives on
www, the bare domain redirecting to it: Google crawlswww.domain.com/ads.txtonly ifdomain.com/ads.txtredirects there, and a robots.txt rule that blocks the file can make Google ignore it (AdSense help). OWNERDOMAIN=set to the domain your ad partners show for you in their sellers.json files.- Subdomains with their own file listed with
subdomain=in the root file; crawlers look only at subdomains listed there (ads.txt 1.1, section 5.5). - No ad partners at all? Publish the placeholder line
placeholder.example.com, placeholder, DIRECT, placeholder; the old empty-file method is deprecated (ads.txt 1.1, section 3.2.1). - Lines removed for partners you have stopped working with, so the list stays a true picture of who may sell.
Questions buyers and publishers ask about ads.txt
Is ads.txt required?
No law requires it; Google's AdSense help says its use "is not mandatory, but it's highly recommended" (AdSense help). Under the spec, a site that returns 404 for /ads.txt is read as having no declarations, so no seller counts as unauthorized. Buyers can be stricter: Display & Video 360 buys from authorized sellers only by default, and inventory from publishers without a file only if the buyer opts in, "at your own risk" (Display & Video 360 help). And if a site's file exists but leaves out its Google publisher ID, Ad Manager stops monetizing the site and Google stops buying there (Google Ad Manager help).
How long until a change counts?
Crawlers cache the file: with no cache headers, the spec's default is 7 days (ads.txt 1.1, section 3.6). Google says AdSense can take a few days, and up to a month for a site with few ad requests (AdSense ads.txt guide).
What happens if my server errors on the file?
The spec reads a 404 as "no declarations" and, for other errors, tells crawlers to keep using the last file they fetched. Google purges earlier entries on a 404 too. After a soft 404 or a 500 error it keeps them only for up to 5 days, where the spec sets no limit (AdSense help).
Does ads.txt stop ad fraud?
Only one kind: inventory sold under a false site or app label. The app-ads.txt spec warns that a dishonest ad platform can still swap in an authorized publisher ID, and that "authorized inventory must still be screened and monitored for invalid traffic" (app-ads.txt spec). A bot visiting a real, correctly listed site would pass every check above.
What is a confidential seller in sellers.json?
An entry with is_confidential set to 1. It must still be listed, but its name and domain may be left out (sellers.json 1.0). The spec does not say how buyers should treat such entries.
What is the difference between ads.txt and app-ads.txt?
Same record format, different home. A website hosts /ads.txt itself; an app's file sits on the developer website named in the app store listing, with any www. or m. prefix removed from the domain, and the subdomain= variable is not used (app-ads.txt spec).
Sources
- IAB Tech Lab: Helping the industry prevent the sale of counterfeit inventory with ads.txt (May 16, 2017)
- IAB Tech Lab: ads.txt specification version 1.1, with change log
- IAB Tech Lab: app-ads.txt specification
- IAB Tech Lab: Demystifying app-ads.txt (2019)
- IAB Tech Lab: sellers.json specification 1.0 (July 2019)
- IAB Tech Lab: OpenRTB SupplyChain object
- IAB Tech Lab: sellers.json and SupplyChain object overview
- IAB Tech Lab: Digital Supply Chain info sheet (October 2026)
- Google AdSense Help: Ads.txt guide
- Google AdSense Help: how ads.txt files are crawled
- Google Ad Manager Help: ads.txt and app-ads.txt FAQs
- Google Display & Video 360 Help: authorized sellers
- ISBA and PwC: Programmatic Supply Chain Transparency Study, executive summary (May 2020)
- ANA: Programmatic Media Supply Chain Transparency Study (December 2023)



