How do subdomains and inventory partners change ads.txt?
Part of Supply path transparency

The short answer
A subdomain is covered by its root domain's ads.txt unless the root file declares it with a subdomain= line and the subdomain hosts its own file; then only the subdomain's list counts there. INVENTORYPARTNERDOMAIN is different: it points to a content partner's own ads.txt, one hop only, and applies when the bid request carries the partner's domain.
Key takeaways
- The ads.txt 1.1 specification tells crawlers to strip subdomains and read the root file, derived with the Public Suffix List.
- A subdomain file counts only when the root file names it with subdomain=, and then it replaces the root list on that subdomain.
- INVENTORYPARTNERDOMAIN adds a partner's sellers to a site's list rather than replacing it, and crawlers follow it one hop only.
- The partner directive applies only if the bid request passes site.inventorypartnerdomain, so buyers check both the file and the request.
Do subdomains need their own ads.txt file?
No, only when their sellers differ. The ads.txt 1.1 specification (opens in a new tab) says publishers should always post the file on their root domain, and that crawlers should strip subdomains when building their list of URLs. Google's AdSense ads.txt FAQs (opens in a new tab) put it the same way: a subdomain reference is needed only if the authorized seller or publisher ID differs from the root domain.
Definition
- Root domain (for ads.txt)
- The public suffix plus one string in the name, which the specification tells crawlers to derive with the Public Suffix List. It is the default home of the ads.txt file for the hosts beneath it.
The Public Suffix List (opens in a new tab) decides where the root sits, and it matters in Canada. The list includes provincial suffixes such as qc.ca, on.ca and bc.ca, so for a host like news.example.qc.ca the root domain is example.qc.ca, not qc.ca. A buyer who strips one label too many will look for a file that should not exist.
| Root file declares the subdomain? | Subdomain has its own ads.txt? | Which list authorizes sellers on the subdomain |
|---|---|---|
| Yes | Yes | Only the subdomain's file |
| Yes | No | Only the root domain's file |
| No | Yes | Only the root domain's file; crawlers should not fetch the subdomain file |
| No | No | Only the root domain's file |
What does the subdomain directive do?
The directive is a variable line, subdomain= followed by a host, placed in the root file. The specification's variable table calls it a machine readable pointer to a subdomain on which an ads.txt can be found, and says the crawler should fetch it and associate the data with the subdomain, not the current domain. The referral is exempt from the public suffix truncation that crawlers apply everywhere else.
Section 4.5 shows it working. The root file for example.com lists two exchanges and the line subdomain=divisionone.example.com. The file on divisionone.example.com lists a different pair of systems. On that subdomain only the second pair may sell; on the rest of example.com only the first. Two limits follow from the variable table: only root domains should refer crawlers to subdomains, and subdomains should not refer to other subdomains.
What is INVENTORYPARTNERDOMAIN, and how does it differ from a subdomain?
INVENTORYPARTNERDOMAIN solves a different problem: ads inside one owner's site or app that another company has the right to sell. The specification describes it as a pointer to the domain of an entity explicitly authorized to monetize ads within the content, whose ads.txt is hosted at that domain. Section 5.7 notes it is used especially in mobile and CTV streaming apps, but the OpenRTB 2.6 specification (opens in a new tab) defines it on the Site object too.
OpenRTB 2.6 describes site.inventorypartnerdomain as a domain used for inventory authorization in inventory sharing arrangements between a site owner and content owner. The content owner's domain should be listed in the site owner's ads.txt, and authorization for that supply is published in the ads.txt on the root of the partner's domain. The 2.6 change log says the field was added to Site and App, having previously lived in ext.
| Question | subdomain= | INVENTORYPARTNERDOMAIN |
|---|---|---|
| What it points to | A host inside the same root domain | Another company's domain |
| Effect on the site's list | Replaces the root list on that subdomain | Adds the partner's sellers to the site's list |
| Which file is read | The subdomain's ads.txt | The partner's ads.txt, not app-ads.txt |
| How far crawlers follow | Root to subdomain only | One hop; the partner's own partner lines are not processed |
| Needs a bid request field | No | Yes: site.inventorypartnerdomain or app.inventorypartnerdomain |
Section 4.6 shows the gain. Before the directive, the spec says, a distributor had to copy every seller account from the content owner's file into its own. After it, in the spec's example, one INVENTORYPARTNERDOMAIN line authorizes every seller account in the partner's ads.txt. The app-ads.txt guide covers the same mechanism for apps and CTV, and the OWNERDOMAIN guide covers the other 1.1 variables.
How do buyers check subdomain and partner sellers?
IAB Tech Lab's guidance for inventory sharing (opens in a new tab) gives the decision logic for apps and adds a note for the web: if the bid request is a site instead of an app, the same logic applies, using site.inventorypartnerdomain. The steps below combine that logic with the subdomain rule.
Check one website impression's seller
- Take the host from the bid request. Use site.domain or the page URL, and note site.inventorypartnerdomain if present.
- Find the root domain. Strip subdomains with the Public Suffix List, then open the root ads.txt.
- Look for a subdomain= line naming the host. If one exists and the subdomain serves a file, read that file instead of the root list.
- Look for the seller. If the exchange domain and account ID appear with DIRECT or RESELLER, the seller is authorized.
- If not, check the partner path. When the request names a partner domain and the site's file has a matching INVENTORYPARTNERDOMAIN line, open the partner's root ads.txt and look for the seller there.
- Record the outcome. Authorized, unauthorized, or inconclusive, the guidance's term when a partner's file cannot be read.
Google's Display & Video 360 help on authorized sellers (opens in a new tab) documents its own version for CTV: the partner domain must be declared by the inventory publisher and also passed by the SSP in bid requests, and only when both requirements are met does the platform read the partner's file. That example is scoped to CTV; the IAB guidance is the reference for websites.
What errors break subdomain and partner setups?
Subdomain and partner setups fail in ways the ads.txt specification and Google's help pages describe. The checklist turns those rules into conditions a buyer or publisher can test on a live site before money moves.
Subdomain and partner checks before a deal
- Each subdomain with its own ads.txt is named by a subdomain= line in the root file; otherwise crawlers ignore the subdomain file.
- Each subdomain file repeats the sellers the subdomain still uses, since a declared subdomain does not inherit the root list.
- No subdomain file contains its own subdomain= line, since subdomains should not refer to other subdomains.
- The root domain was derived with the Public Suffix List, including provincial suffixes such as qc.ca.
- Each INVENTORYPARTNERDOMAIN line points to a domain that serves an ads.txt file at its root, not only an app-ads.txt.
- The partner's sellers appear in the partner's own file, since partner lines in that file are not followed a second hop.
- Bid requests for the shared inventory carry site.inventorypartnerdomain with the same domain the file declares.
Two Google notes help when diagnosing. Its Ad Manager ads.txt FAQs (opens in a new tab) say redirects are supported as long as each stays within the original root domain, for example example.com/ads.txt redirecting to subdomain.example.com/ads.txt, and that the Ad Manager management tool does not yet show a list of crawled subdomains. Google's AdSense crawl troubleshooting (opens in a new tab) asks for a file reachable from the root domain, not blocked by robots.txt, returning HTTP 200 OK.
What does a subdomain review look like on a real plan?
Fictional example
A comic book shop checks a city magazine's subdomains in New Mexico
An unnamed comic book and collectibles shop with stores in Albuquerque and Santa Fe promotes a fan convention weekend on arts, pop culture and local news sites in English and Spanish. One planned site is a city magazine, citymag.example, with an events calendar at events.citymag.example and a film section supplied by a content partner.
The root ads.txt declares subdomain=events.citymag.example, and that subdomain's file lists only one exchange. Bids for the events host from a second exchange in the root file are therefore unauthorized there, and the planner asks the magazine whether that was intended.
The film section's requests carry site.inventorypartnerdomain naming the partner, and the magazine's root file has a matching INVENTORYPARTNERDOMAIN line. The partner's ads.txt lists the reseller account seen in the requests, so that path is authorized and stays on the plan.
How does PlacementGraph show who sells a site on the plan?
Frequently asked questions
Is www a subdomain for ads.txt purposes?
Yes. Under the specification, crawlers strip subdomains, so www.example.com is checked against the file on example.com. Google's Ad Manager FAQs give example.com/ads.txt redirecting to www.example.com/ads.txt as a supported redirect, because it stays within the original root domain. A separate www file is read only if the root declares it.
Does the subdomain directive work in app-ads.txt?
No. The app-ads.txt specification says to use the same guidelines as ads.txt, except that the subdomain directive is unused in app-ads.txt files and should be ignored if encountered. Apps are located through the developer URL in the app store listing, so there is no subdomain tree to resolve.
How long does a new subdomain file take to count?
It depends on the platform reading it. Google's Ad Manager FAQs say new and updated files are detected automatically but changes may take up to 48 hours. Its AdSense crawl page says changes may take a few days, and up to a month for a site with few ad requests. The specification's default cache expiry, without cache directives, is 7 days.
Can a content partner's ads.txt use INVENTORYPARTNERDOMAIN too?
It can contain the line, but crawlers checking the original site will not follow it. The specification says any inventorypartnerdomain entries in the second ads.txt file should not be processed, and that crawlers follow only one hop from the originating file. A partner that resells through another partner must list those sellers directly.
Sources
- ads.txt 1.1 specification, sections 3.1, 3.5, 4.5, 4.6, 5.5 and 5.7 (opens in a new tab)IAB Tech Lab
- ads.txt and app-ads.txt: Guidance for Inventory Sharing (opens in a new tab)IAB Tech Lab
- OpenRTB 2.6 specification, Site object (opens in a new tab)IAB Tech Lab
- app-ads.txt specification (opens in a new tab)IAB Tech Lab
- Public Suffix List (opens in a new tab)Mozilla Foundation
- Ads.txt FAQs: subdomains (opens in a new tab)Google AdSense Help
- Ensure your ads.txt files can be crawled (opens in a new tab)Google AdSense Help
- ads.txt/app-ads.txt FAQs (opens in a new tab)Google Ad Manager 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.