Skip to content
PlacementGraph™
Supply path

Supply path optimization: how buyers read who sells each impression

A reader browsing on a laptop with a coffee.
Photo: Vlada Karpovich, Pexels

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).

The four fields of one ads.txt record, per the IAB Tech Lab ads.txt 1.1 specification
FieldWhat it holdsWhat a buyer checks
1. Advertising system domainThe canonical domain of the exchange, SSP or header wrapper that bidders connect toThat it is a real system the buyer's platform connects to
2. Publisher account IDThe seller or reseller account within that systemThat the same ID appears in the system's sellers.json
3. Account typeDIRECT or RESELLERThat the type agrees with the seller_type in sellers.json
4. Certification authority IDOptional ID for the system within a certification authorityPresent 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.

The sellers.json fields a buyer checks
FieldMeaning in the specification
seller_type: PUBLISHERThe 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: INTERMEDIARYThe inventory sold through the account is not owned by the named entity, or the advertising system does not pay them directly
seller_type: BOTHThe seller transacts both kinds of inventory through the account
is_confidential1 means the seller's identity is withheld; name and domain may then be missing
is_passthroughA 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 domainThe 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.

One impression, checked three ways
One impression, checked three waysThe publisher's file, the exchange's file and the bid request's schain should name the same seller account. 1. ads.txt, Publisher: Lists authorized systems and account IDs. 2. sellers.json, Exchange: Names the entity behind each seller_id. 3. schain, Bid request: Lists every node that handled this request. 4. Logs, Buyer: Shows which path won and what it cost01ads.txtPublisherLists authorizedsystems and account IDs02sellers.jsonExchangeNames the entity behindeach seller_id03schainBid requestLists every node thathandled this request04LogsBuyerShows which path wonand what it costChecked both ways
One impression, checked three waysThe publisher's file, the exchange's file and the bid request's schain should name the same seller account. 1. ads.txt, Publisher: Lists authorized systems and account IDs. 2. sellers.json, Exchange: Names the entity behind each seller_id. 3. schain, Bid request: Lists every node that handled this request. 4. Logs, Buyer: Shows which path won and what it cost01ads.txtPublisherLists authorized systems andaccount IDsChecked both ways02sellers.jsonExchangeNames the entity behind eachseller_id03schainBid requestLists every node that handledthis request04LogsBuyerShows which path won and what itcost
The publisher's file, the exchange's file and the bid request's schain should name the same seller account.

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

  1. 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.
  2. 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.
  3. 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.
  4. Review reseller and confidential paths. Keep those that are authorized and add something, such as a format the direct path lacks; flag the rest.
  5. Check the schain in live traffic. Ask the trading desk or platform for bid request samples or log fields showing complete flags and nodes.
  6. 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.

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

  1. ads.txt (Authorized Digital Sellers) (opens in a new tab)IAB Tech Lab
  2. ads.txt Specification Version 1.1 (opens in a new tab)IAB Tech Lab, Supply Chain Validation repository
  3. app-ads.txt specification (opens in a new tab)IAB Tech Lab, Supply Chain Validation repository
  4. sellers.json specification (opens in a new tab)IAB Tech Lab, Supply Chain Validation repository
  5. OpenRTB SupplyChain object (opens in a new tab)IAB Tech Lab, OpenRTB repository
  6. ANA Releases 2024 Programmatic Benchmark Study (opens in a new tab)ANA, December 12, 2024
  7. 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.

HOW AGENCIES WORK WITH US

From your first brief.
To your next campaign.

Share a brief in plain language. Get contextual websites and YouTube channels that fit it, with the evidence behind every pick and a deal ready for your usual buying platform.

  1. 01

    Share your brief

    The campaign in plain language.

  2. 02

    Get your shortlist

    The strongest contextual sites and channels, with the evidence behind each.

  3. 03

    We build the deal

    Your shortlist becomes a curated deal through our exchange partners.

  4. 04

    Activate and grow

    Buy in your usual platform. Agencies earn benefits as their investment grows.

LET’S WORK TOGETHER

Your next campaign starts here.

Your details will only be used to respond to your enquiry.

Prefer email? diana@placementgraph.com

YOUR PRIVACY

You choose whether to allow optional analytics. You can use the whole website either way.

Change or withdraw consent at any time using “Cookie preferences” in the footer. Turning analytics off stops future collection and removes this site’s analytics cookies; it does not erase information already sent. The page may refresh to apply withdrawal.