An open-source supply-path transparency auditor. It checks who actually sold each impression,
against ads.txt, sellers.json, and the OpenRTB SupplyChain Object (schain), and flags
unauthorized sellers, hidden hops, and fee-leaking resold paths.
Supply-path transparency is a 2026 flashpoint: buyers cannot see what curators and exchanges
actually do, or what fees they take. The primitives to check it already exist, ads.txt (who a
publisher authorizes to sell its inventory), sellers.json (who an exchange's seller IDs really
are), and the schain object (the disclosed chain of intermediaries). What is missing is an open
tool that ties them together. This is that tool.
Feed it a bid log (impressions, each carrying a supply chain), the publisher's ads.txt, and the
exchange's sellers.json. For every impression it walks the chain and checks each hop:
- Is the seller authorized in the publisher's
ads.txt? (If not, someone is selling inventory they should not.) - Is the seller ID actually in
sellers.json, and is it disclosed or confidential? - Is the chain complete, or are there hidden hops?
- How many reseller hops sit between the buyer and the publisher (where fees leak)?
Then it scores each path 0..1 and summarizes the findings.
pip install -e .
spo-auditor audit --sampleThe sample set includes a clean direct path, an unauthorized seller, a resold multi-hop path, an
incomplete chain, and a seller missing from sellers.json, so you see every finding type at once.
Audit your own data:
spo-auditor audit bidlog.json --ads-txt publisher_ads.txt --sellers-json exchange_sellers.json| Code | Meaning | Severity |
|---|---|---|
unauthorized_seller |
Seller not declared in the publisher's ads.txt | high |
not_in_sellers_json |
Seller ID absent from the exchange's sellers.json | high |
incomplete_chain |
schain.complete is 0, hops are hidden | high |
excessive_hops |
More intermediaries than the configured limit | medium |
confidential_seller |
Seller is marked confidential in sellers.json | medium |
reseller_hop |
Authorized but resold, not a direct path | low |
AdCP products do not carry supply signals (reach, hops, authorization). This auditor produces exactly those signals, so it is the natural enrichment source for the adcp-trader supply-path rule.
MIT. See LICENSE.