Supply path optimization: how buyers read who sells each impression

The short answer
Supply path optimization (SPO) is how a buyer chooses which routes to buy the same publisher's inventory through. It starts with public files: ads.txt and app-ads.txt list who may sell a site or app, sellers.json names each seller account, and the SupplyChain object in each bid request shows every party that handled it.
Key takeaways
- The same impression can reach a buyer through several exchanges and resellers, and SPO decides which of those paths to keep.
- ads.txt and app-ads.txt are the publisher's side of the record; sellers.json is the exchange's side; a path is confirmed when both agree.
- The SupplyChain object travels in the bid request and shows every node on that specific impression, which static files cannot.
- RESELLER means the publisher authorized someone else to control the account. It is not, on its own, a reason to drop a site.
- Static files show what is authorized; only log-level data shows which path actually won and what each party kept.
What is supply path optimization, and why do buyers do it?
Definition
- Supply path optimization (SPO)
- The practice of mapping the routes through which a publisher's ad space reaches a buyer, then concentrating spend on the routes that are authorized, transparent and efficient.
A single page view can be offered to a buyer several times: once by the publisher's own exchange account, again by a reseller that holds rights to the same inventory, and again through a header bidding wrapper that calls several exchanges at once. Each route can carry different fees, different data and a different level of transparency. Without SPO a buyer can end up bidding against itself on the same impression and paying the highest intermediary cost on the list.
The ANA's 2024 Programmatic Benchmark (opens in a new tab), the latest public release to give an SSP count, found participating marketers still used slightly more than 19 supply-side platforms on average, the 2023 level, and said there was significant room for further optimization. The same release reported the number of domains and apps reached had fallen from 44,000 to 22,634. Fewer sites with fewer, cleaner paths is the direction SPO pushes.
What does an ads.txt file declare?
ads.txt is a plain text file a publisher posts at the root of its domain, for example example.com/ads.txt, listing every advertising system authorized to sell its inventory. The IAB Tech Lab ads.txt page (opens in a new tab) lists version 1.1, released in August 2022, as current. Each line is one authorization with up to four fields, defined in the ads.txt 1.1 specification (opens in a new tab).
| Field | What it holds | What a buyer checks |
|---|---|---|
| 1. Advertising system domain | The canonical domain of the exchange, SSP or header wrapper that bidders connect to | That it is a real system the buyer's platform connects to |
| 2. Publisher account ID | The seller or reseller account within that system | That the same ID appears in the system's sellers.json |
| 3. Account type | DIRECT or RESELLER | That the type agrees with the seller_type in sellers.json |
| 4. Certification authority ID | Optional ID for the system within a certification authority | Present or absent; it does not change the authorization |
Version 1.1 added two variables that help buyers identify the business behind a site. OWNERDOMAIN names the business domain of the entity that owns the site. MANAGERDOMAIN names a primary or exclusive monetization partner. The specification also says that, without cache directives, systems reading the file should treat it as current for seven days, so a change a publisher makes today may take days to reach every buyer.
How does app-ads.txt work for mobile and CTV apps?
Apps have no domain of their own, so the app-ads.txt specification (opens in a new tab) extends ads.txt through the app store. The developer posts app-ads.txt on the website listed as the developer URL in the app's store listing. A verifier starts from the store URL in the bid request, reads the developer URL from the listing page, and fetches the file from that domain.
The file uses the same record format as ads.txt but a different name, so a company can manage web and app authorizations separately. The specification covers apps from mobile stores and connected TV stores. For buyers this means a CTV or in-app path can be checked the same way as a website, as long as the store listing points to the right developer site. A missing or mismatched developer URL leaves the app's authorizations unreadable, so check the listing before blaming the file.
What does sellers.json tell a buyer about a seller?
sellers.json is the exchange's half of the record. Each advertising system posts the file on its own domain, listing every seller account it pays. The sellers.json specification (opens in a new tab) says the seller_id is the same ID that appears in a publisher's ads.txt and in the SupplyChain object, which is what lets a buyer join the three records.
| Field | Meaning in the specification |
|---|---|
| seller_type: PUBLISHER | The inventory sold through the account is on a site, app or other medium owned by the named entity, and the advertising system pays them directly |
| seller_type: INTERMEDIARY | The inventory sold through the account is not owned by the named entity, or the advertising system does not pay them directly |
| seller_type: BOTH | The seller transacts both kinds of inventory through the account |
| is_confidential | 1 means the seller's identity is withheld; name and domain may then be missing |
| is_passthrough | A passthrough seller is a facilitator of inventory from the upstream supplier to the consumer of the inventory; 1 indicates this seller has an account control relationship with the downstream, consuming advertising system |
| name and domain | The legal entity paid for the inventory and its business domain |
What does the SupplyChain object (schain) add to the files?
ads.txt and sellers.json describe who may sell. The SupplyChain object (opens in a new tab), known by its attribute name, schain, describes who did sell one specific bid request. It rides inside the OpenRTB request and lists each node in order, from the original seller to the party sending the request. IAB Tech Lab introduced it alongside sellers.json in 2019, and the specification places it in the BidRequest.Source.schain attribute in OpenRTB 2.6 or later.
Each node carries asi, the domain of the advertising system, and sid, the seller account ID within it, which should match ads.txt and sellers.json. The complete flag is 1 when the chain reaches back to the owner of the inventory and 0 when it does not. A request with complete set to 0, or with a node whose sid does not appear in that system's sellers.json, is a path the buyer cannot fully trace.
What do direct and reseller mean, and is reseller inventory bad?
In ads.txt, DIRECT indicates that the publisher, as content owner, directly controls the account. RESELLER indicates the publisher has authorized another entity to control it. In sellers.json the parallel idea appears as PUBLISHER and INTERMEDIARY. A clean direct path is one where the site's ads.txt says DIRECT and the exchange's sellers.json lists the account as PUBLISHER, with the owner's name.
How do buyers run a supply path optimization review?
An SPO review for one site list
- List every authorized path per site. Read each site's ads.txt, or app-ads.txt for apps, and note every system, account ID and account type.
- Confirm each path from the exchange side. Look up every account ID in that system's sellers.json and check the seller_type and the named entity.
- Mark direct paths on the systems you buy through. A direct path on an exchange your buying platform connects to is a candidate first choice for that site.
- Review reseller and confidential paths. Keep those that are authorized and add something, such as a format the direct path lacks; flag the rest.
- Check the schain in live traffic. Ask the trading desk or platform for bid request samples or log fields showing complete flags and nodes.
- Reconcile with spend. Compare the paths that won with the paths you preferred, and adjust platform settings or deals.
Signs that a path needs attention
- The account ID in ads.txt does not appear in the system's sellers.json.
- ads.txt says DIRECT but sellers.json lists the account as INTERMEDIARY.
- The seller is confidential and no other path to the site is available.
- The schain on live requests is marked incomplete.
- The site has many reseller lines and no direct line on any exchange you use.
How does PlacementGraph show who sells each site?
What can ads.txt and sellers.json not tell a buyer?
Static files describe permission, not performance. They cannot show which of several authorized paths won a given auction, what share of the price each intermediary kept, whether a deal is live on a path, or whether the impression reached a real person. Those answers sit in log-level data from the buying platform and the exchange, and in the bid stream's schain.
That is why the ANA built its benchmark on matched impression log data through TAG TrustNet rather than on file checks. Its Q3 2025 release (opens in a new tab), the latest public one to report it, noted that half of participating marketers had direct supplier contracts, a sign that contract terms and data access matter as much as file hygiene. Treat a clean ads.txt and sellers.json match as the entry ticket for a path, then use logs to decide which paths deserve the budget.
Guides in this hub
Every guide in the Supply path transparency hub, each written to answer one question in full.
- ExplainerWhat is the ad tech tax, and where does the money actually go?The ad tech tax is the share of a programmatic budget kept by intermediaries. See where each fee enters, what studies found, and why seller files can't show it.
- GlossaryWhat is an ad waterfall, and what does it mean for buyers?How the ad waterfall offered each impression to one network at a time, why publishers moved to header bidding, and where buyers still meet it today.
- GlossaryWhat is ads.cert, and what does a signed request prove?What IAB Tech Lab's ads.cert does: Call Signs, signed server requests, what a signature can and cannot prove, adoption status and questions for partners.
- ExplainerWhat do DIRECT and RESELLER mean in ads.txt, and what do they not mean?What DIRECT and RESELLER mean in ads.txt, what they do not mean, how they should agree with sellers.json, and when a reseller is a site's most direct path.
- ChecklistWhich ads.txt errors matter to a buyer, and which should stop a deal?A catalog of ads.txt errors, from bad field counts to redirect chains and stale lines, with what each means for a buyer and which should stop a deal.
- GlossaryWhat do OWNERDOMAIN and MANAGERDOMAIN declare in ads.txt, and how do buyers use them?What the OWNERDOMAIN and MANAGERDOMAIN variables in ads.txt 1.1 declare, how buyers match them to sellers.json, and what to do when the domains do not match.
- ExplainerHow do subdomains and inventory partners change ads.txt?How ads.txt treats subdomains, what the subdomain= line and INVENTORYPARTNERDOMAIN do on websites, how buyers check them, and the setup errors that break both.
- ExplainerWhere do advertising carbon emissions come from in a programmatic buy?How programmatic ads produce carbon emissions, how Ad Net Zero's framework estimates them, why supply path length matters and what buyers can ask partners.
- ExplainerWhat is app-ads.txt, and how do buyers verify app sellers?How app-ads.txt works for mobile and CTV apps: where the file lives, how buyers trace it from the store listing, inventory partners, and what it cannot verify.
- ExplainerWhat do auction transparency standards require, and what can buyers ask?The MRC's January 2026 auction transparency standards set disclosure and reporting rules for ad auctions. See what they cover and what buyers can ask partners.
- ExplainerWhat is bid duplication, and how do buyers handle it?Bid duplication sends one ad opportunity to a buyer through several paths. Learn why it happens, how it affects bids and prices, and how buyers deduplicate.
- GlossaryWhat is a bid request, and which fields should a buyer check?A bid request describes one ad opportunity to bidders. Read a sample OpenRTB request object by object and learn which site, seller and deal fields to check.
- GlossaryWhat is bid shading, and what should buyers ask about it?Bid shading lowers a bid toward the predicted price needed to win a first price auction. Learn how it estimates that price and what buyers should ask about it.
- GlossaryWhat is buyers.json, and what does the DemandChain object add?What buyers.json and the DemandChain object declare about who pays for an ad, who should publish them, how they mirror sellers.json, and adoption so far.
- GlossaryWhat is cookie syncing, and why does it matter to a media buyer?Cookie syncing lets an exchange and a DSP learn each other's user ID for one browser. See how the redirect works, what it costs a page, and what fades.
- GlossaryWhat is domain spoofing, and how do buyers catch it?What domain spoofing is, how ads.txt, sellers.json, schain and ads.cert each counter it, and the log checks that expose a seller who does not match the request.
- GlossaryWhat is a first price auction, and how does it change bidding?In a first price auction the winner pays its own bid. Learn how second price worked, why exchanges switched in 2019, and how floors and bids change for buyers.
- GlossaryWhat is the Global Placement ID, and how do buyers report on it?What the Global Placement ID (imp.ext.gpid) is, who assigns it, how it differs from tagid and the transaction ID, and how buyers use it in slot reporting.
- GlossaryWhat is header bidding, and what does it change for buyers?How header bidding lets many SSPs bid before the ad server decides, what a wrapper does, why it multiplies bid requests, and what that means for buyers.
- How-toHow to check a site's ads.txt and confirm each seller by handA manual walkthrough: open a site's ads.txt, look up each seller ID in the exchange's sellers.json, read mismatches, check freshness and log the result.
- GlossaryWhat is log level data, and how do buyers get and use it?Log level data records each bid, win and impression. Learn what it contains, which fields join buyer and seller logs, how to request it and its privacy limits.
- ExplainerWhat does a missing ads.txt file tell a buyer, and how should a plan handle it?A site with no ads.txt file is not proven bad. Learn what absence means, how buying platforms treat it, how to record it in a plan and how publishers fix it.
- ExplainerWhat changed in OpenRTB 2.6, and which release does a partner run?What OpenRTB 2.6 and its dated releases added, from plcmt and ad pods to schain and deal floors, and how buyers confirm which release a partner supports.
- GlossaryWhat does the OpenRTB site object tell a buyer about where an ad runs?The OpenRTB site and publisher objects field by field: domain, page, publisher id and cat, how they map to ads.txt and sellers.json, and what buyers should log.
- GlossaryWhat is the OpenRTB transaction ID, and how do buyers use it?What the OpenRTB transaction ID in source.tid is, who sets it, how buyers group bid requests by it to find several paths to one impression, and what changed.
- ExplainerThe programmatic supply chain: who sits between the advertiser and the publisher?A map of the programmatic supply chain: agency, DSP, curator, SSP, wrapper and ad server, what each adds, where fees enter and which parties schain shows.
- GlossaryWhat is a seller ID in programmatic advertising, and how do buyers trace it?What a seller ID is in programmatic advertising, where it appears, how to trace one ID through ads.txt, sellers.json and schain, and what a missing ID means.
- GlossaryWhat does is_passthrough mean in a sellers.json entry?What is_passthrough means in sellers.json, in the spec's words, how a passthrough seller changes the supply path, and the questions buyers should ask about it.
- GlossaryWhat is server side header bidding, and what should buyers ask?How server side header bidding moves the auction off the page, what it changes for speed, user IDs and the supply chain object, and what buyers should ask.
- GuideWhat is SSP consolidation, and how do buyers do it safely?SSP consolidation means buying through fewer supply partners. See what the ANA found, how to pick paths to keep, and how to protect independent publishers.
- ExplainerWhat does the supply chain object (schain) show about each bid?The supply chain object (schain) lists every paid party on one bid request. Learn its fields, how chains are built, the complete flag and how to read a path.
- GlossaryWhat is the TAG ID at the end of an ads.txt line?What the fourth field of an ads.txt line holds, why the TAG ID is optional, what a missing one means, and where buyers look it up and check it in sellers.json.
- GlossaryWhat is a trading desk, and what does it check during a campaign?A trading desk is the team that runs programmatic buying for an agency or brand. Learn its daily checks, how it reviews supply paths and the evidence to keep.
- ExplainerWhat is ads.txt, and how does a buyer read one line?ads.txt is the public file where a website lists who may sell its ad space. Learn how buyers read one line, what server responses mean, and what to flag first.
- GlossaryWhat is an ad exchange, and why do the terms blur?What an ad exchange is, how it differs from an SSP and a DSP today, how exchanges run auctions, and why buyers see exchange domains in ads.txt and sellers.json.
- GlossaryWhat is an ad network, and how does it show up in seller files?An ad network packages ad space from many publishers and resells it. Learn how networks differ from exchanges and SSPs and how they show up in seller files.
- GlossaryWhat is an SSP, and what does a buyer see of it?What a supply side platform does for a publisher, how it picks a winning bid, and where a buyer sees it in ads.txt, sellers.json and the bid request itself.
- GlossaryWhat is malvertising, and how is it stopped?Malvertising uses ads to spread malware and scams. Learn how malicious ads enter the supply chain, the harm to readers, and what to do if your ads are hijacked.
- GlossaryWhat is OpenRTB, and which parts should buyers know?What IAB Tech Lab's OpenRTB protocol is, its main bid request objects, what changed from 2.5 to 2.6, which fields buyers read, and where the spec lives.
- ExplainerWhat is sellers.json, and what does it tell a buyer?sellers.json is the exchange's public list of the seller accounts it pays. Learn each field in the IAB Tech Lab spec and how to cross check it against ads.txt.
- GlossaryWhat is working media, and how should a ratio be reported?Working media is the part of a budget that buys real, qualified ad exposure. Learn the competing definitions, which costs are non working and how to report it.
Frequently asked questions
Is ads.txt required by law?
ads.txt is a voluntary industry standard published by IAB Tech Lab, not a rule issued by a regulator. The specification asks advertising systems to retrieve these declarations before buying or selling, so publishers that want programmatic demand have a reason to publish one. A missing file means the authorization cannot be read, not that the site is fraudulent.
How often should a buyer recheck ads.txt and sellers.json?
Weekly is a sensible default for active lists. The ads.txt specification says consuming systems should default to an expiry of 7 days when no cache-control directives are present, so a partner a publisher adds or removes today can take up to a week to reach every buyer. Exchanges also update their sellers.json directories on their own schedules.
What is an owner domain in ads.txt 1.1?
OWNERDOMAIN is a variable in the ads.txt file that names the business domain of the company that owns the site. It helps a buyer match the site to the PUBLISHER entry in sellers.json, especially when one company owns many sites under different names.
Does a confidential seller in sellers.json mean something is wrong?
Not necessarily. The sellers.json specification lets an exchange mark a seller confidential and leave out its name. The account can still be authorized in ads.txt. The cost is transparency: the buyer cannot confirm who is paid, so a confidential path deserves review when a named path to the same site exists.
Does supply path optimization apply to private marketplace deals?
Yes. A private marketplace or curated deal is still delivered through a specific exchange and seller account, so the same checks apply. Confirm the deal runs on a path that is authorized in the site's ads.txt and listed in that exchange's sellers.json before activation.
Sources
- ads.txt (Authorized Digital Sellers) (opens in a new tab)IAB Tech Lab
- ads.txt Specification Version 1.1 (opens in a new tab)IAB Tech Lab, Supply Chain Validation repository
- app-ads.txt specification (opens in a new tab)IAB Tech Lab, Supply Chain Validation repository
- sellers.json specification (opens in a new tab)IAB Tech Lab, Supply Chain Validation repository
- OpenRTB SupplyChain object (opens in a new tab)IAB Tech Lab, OpenRTB repository
- ANA Releases 2024 Programmatic Benchmark Study (opens in a new tab)ANA, December 12, 2024
- The ANA Q3 2025 Programmatic Transparency Benchmark (opens in a new tab)ANA, November 5, 2025
Researched and written by PlacementGraph Research. Read how we research, source and update these pages. Corrections: diana@placementgraph.com.