Missing S-Chain Entries Are Silently Blocking Your DSP Bids. Here's How to Check.

The supply chain object (schain) exists so a DSP can see every seller that touched a bid request between the original publisher and the buyer, not just the last one in line. More DSPs are now using an incomplete or invalid schain as a reason to drop a bid request entirely, before it's even evaluated on its merits, as a basic fraud and transparency guardrail.

That means a publisher can have solid inventory, a clean ads.txt file, and real demand interest, and still lose bids for a reason that never shows up as a rejection anyone sees.

What the supply chain object is actually verifying

Schain is meant to confirm that every intermediary handling a request is a seller the publisher has actually declared, matching what's published in ads.txt, and what the SSPs have published in their sellers.json files. When a reseller in the chain isn't properly declared, or a node is missing entirely, the schain object is incomplete, and an increasing number of DSPs treat that as a signal not to bid rather than a minor technicality.

The gap between what you published and what DSPs actually see

Ads.txt is usually maintained as a static file: updated when a new partner is added, rarely reviewed after that. Sellers.json is one step further removed, it's published by each SSP, and your reseller entries in it are their data entry, not something you control directly.

Meanwhile, the actual chain of resellers touching a given impression can change on the supply side at any time, without either file being updated to match. The result: your ads.txt can be technically correct and still not reflect the live schain being passed on a meaningful share of requests. Two records that were aligned when written have quietly drifted apart, and the DSP is enforcing the drift against you.

A manual check that doesn't require new tooling

Ask your SSPs for a sample of live bid requests, most will provide one on request. Then compare the schain nodes actually present against two sources: what's declared in your ads.txt, and what the SSP has published in sellers.json.

Look specifically for two mismatches:

  1. Resellers appearing in the live chain that aren't declared.
  2. Declared sellers that never actually appear.

Either one is worth raising directly with the SSP, because in most cases it's fixable on their side once flagged, a wrong reseller entry in sellers.json, an outdated ads.txt line, a hop that should have been removed. The check costs an afternoon. The gap it finds can be quietly taxing every request you send.

Why this is easy to miss and expensive when it happens

There's no error message. No dashboard flags "bid dropped for schain reasons." It shows up as demand-side softness that looks like a market problem, when it's actually a data-hygiene problem sitting entirely on the sell side.

It's also the kind of thing that gets worse on its own. As more DSPs adopt stricter schain enforcement, a gap that costs little today can cost meaningfully more in six months, without anyone changing anything about how they're selling.

What this actually means for revenue

This isn't a demand problem to solve by chasing more DSPs. It's a transparency problem that's fixable by checking whether the chain you're declaring matches the chain you're running, the sort of manual cross-check that rarely happens unless someone goes looking for it.


Back to Blog
Subscribe to our adops newsletter!