Buyers

How to read a supply path

By Stoqlab team · Updated · 6 min read

A supply path is the chain of companies between an app and the buyer of one of its impressions. The declared path is every route the public files allow: the app's app-ads.txt gives the first hop, and each network's sellers.json gives the next. The bid request then reports the route one impression actually took, in the schain. This guide reads a declared path hop by hop.

Hop 1: the app-ads.txt line

Take an app whose developer publishes this file (reserved example domains):

OWNERDOMAIN=examplegames.example
ssp.example, 4821, DIRECT
mediation.example, 300, DIRECT
exchange.example, 7730, RESELLER

Each line is a first hop. Look each account up in its network's sellers.json:

Linesellers.json saysReading
ssp.example, 4821, DIRECTPUBLISHER, domain examplegames.exampleThe owner's own account, confirmed both ways (the domain matches OWNERDOMAIN). Shortest possible path.
mediation.example, 300, DIRECTPUBLISHER, domain examplegames.exampleAlso the owner's account, on the mediation company's own network.
exchange.example, 7730, RESELLERINTERMEDIARY, domain mediation.exampleA reseller account. Its domain is itself a network, so the path continues.

Hop 2 and beyond

An INTERMEDIARY's domain often belongs to another ad system with its own sellers.json (the specification asks for the seller's business domain, not the network's). In the example, exchange.example pays mediation.example under seller 7730, and mediation.example's own sellers.json shows how it sources the app's inventory. Each step is one more company taking a share and one more place where a stale or mislabelled entry breaks the chain.

Stoqlab follows these links up to four hops and never visits the same network twice on one branch, which cuts loops. The result is one tree per app-ads.txt file, shared by every app that uses the file.

What to look at

SignalWhy it matters
DIRECT shareHow much of the file the owner sells itself.
Confirmed both waysDIRECT lines whose sellers.json domain is the owner's domain: the strongest signal the files can give.
DepthHops a line reaches before the path ends. One is ideal; four means three intermediaries.
BreaksAccounts missing from sellers.json, relationship mismatches, networks without a sellers.json. Everything after a break is unverifiable.
Hidden sellersConfidential entries along the way.
Reseller spreadHow many different networks resell the inventory.

Stoqlab sums these up in a 0 to 100 supply path score per app; the formula is public on the methodology page. It summarises declarations and does not rate inventory quality: a long reseller list can be perfectly legitimate.

Declared path and actual path

A bid request takes one branch of the declared tree, and its schain should match it: first node the app's DIRECT account, later nodes authorised as RESELLER lines in the app's file. A schain that matches no branch is a red flag. A branch that never shows up in your bid stream is a candidate for cleaning up. The schain validator does that comparison for a pasted schain.