An ads.txt audit is a line-by-line reconciliation of who you have authorized to sell your inventory against who is actually selling it — and how the rest of the supply chain describes those relationships back to buyers. It matters because ads.txt, app-ads.txt, sellers.json, and the schain object are the three places DSPs look before deciding whether your inventory is worth bidding on. When they disagree, buy-side filters don’t send you an email. They just stop bidding.
Why does supply chain rot cost you money?
Ads.txt files rot the same way any unowned config does. A partner gets sunset but the line stays. A reseller you tested in 2022 still holds authorization. An exchange migrates seller IDs and your file points at the old one. None of it breaks anything visibly — fill holds, reporting looks normal — which is exactly why it persists.
The cost shows up in places nobody’s dashboard attributes to the file:
- Depressed bid rates. DSPs running supply-path optimization score paths by verifiability. Stale entries and unresolvable seller IDs lower that score across your whole domain, not just the offending line.
- Silent SPO exclusion. Buyers increasingly buy through curated path lists. A sellers.json mismatch can drop you from a curation list without any notification, because the curation logic is automated.
- Reseller leakage. Every authorized reseller line is a path where someone else takes a margin on your inventory. Lines you can’t map to incremental demand are pure leakage.
What does an ads.txt audit actually check?
Marcus and Muse runs a programmatic supply chain audit the way a supply-side operator would, because that’s the background it comes from — Aaron Foley spent years inside SSPs at Sharethrough and Samsung Ads, on the side of the fence that publishes sellers.json and passes schain. The audit reconciles three sources against each other:
- Full crawl of your ads.txt and app-ads.txt across every domain, app bundle, and CTV property in scope.
- Sellers.json validation for every exchange you’re authorized on — confirming your seller ID exists, is marked confidential or not intentionally, and carries the right entity type.
- Observed schain from live bid requests, verified node by node against the first two sources.
Every line gets classified: direct, reseller, or dead. Every reseller line gets mapped to the demand partner that requested it, so you can see which paths earn their margin and which are inherited clutter.
Two failure patterns come up constantly. The first is the DIRECT/INTERMEDIARY contradiction: your ads.txt declares a relationship DIRECT while the exchange’s sellers.json lists your entry as INTERMEDIARY. To a buy-side filter that’s not a typo — it reads as a misrepresented path, and some DSPs treat it as disqualifying. The second is reseller lines pointing at seller IDs that no longer exist in the SSP’s sellers.json at all: authorization granted to a ghost. In supply audits we’ve run for Canadian publishers, dead and contradictory lines routinely made up a double-digit share of the file — in properties where ad ops was confident the file was current.
Because Marcus and Muse holds no reseller relationships and takes no vendor rev-shares, the classification has no thumb on the scale. If a path should be cut, the audit says so.
What does the engagement look like?
Three phases: the audit itself, a prioritized remediation roadmap ordered by revenue impact and effort, and implementation support — sitting on calls with your exchanges and demand partners until the fixes actually land, because sellers.json corrections require the partner to act and that’s where remediation usually stalls.
Pricing is straightforward: $200/hour USD for scoped work, or a $5,000/month retainer with a three-month minimum for audit-through-implementation engagements. Supply chain audits pair naturally with broader publisher monetization consulting when the roadmap surfaces demand-stack questions beyond hygiene, and they’re one spoke of the programmatic consulting practice.
If you want a second set of eyes on your file before a buyer’s filter makes the decision for you, book a 30-minute call and bring your domain list.
People also ask
What is the difference between an ads.txt audit and sellers.json validation?
An ads.txt audit reviews the authorizations you publish; sellers.json validation checks how your exchanges declare you back to buyers. They only mean something together — a seller ID your ads.txt authorizes should resolve to a live, correctly typed entry in that exchange’s sellers.json. Auditing one without the other misses most real problems.
How often should publishers audit their ads.txt file?
A full reconciliation once or twice a year, plus a review whenever you add or drop a demand partner. Files rot between edits: exchanges migrate seller IDs, resellers get acquired, and dead lines accumulate. Continuous monitoring is ideal, but a scheduled audit catches the drift that quietly erodes bid rates.
What is a schain audit?
A schain audit inspects the SupplyChain object attached to your bid requests and verifies every node against ads.txt and sellers.json. Broken, incomplete, or missing schain nodes make your inventory look unverifiable to DSPs running supply-path optimization, which filter it out before a human ever reviews the decision.
How long does a supply chain audit take?
The crawl and reconciliation typically take two to three weeks depending on how many domains, apps, and demand partners are in scope. The remediation roadmap follows immediately after. Implementation timelines depend on your partners’ responsiveness, which is exactly why the engagement includes support through that phase.