Skip to content
Stoqlab

Free tools

sellers.json validator

Check the sellers.json of an SSP, exchange or network: is it there, does it follow the specification, and how transparent is it about who its sellers are?

What sellers.json is

sellers.json is the other half of app-ads.txt. A publisher's app-ads.txt says which accounts may sell its inventory; the network's sellers.json says who owns each of those accounts. Every SSP, exchange or network that gets paid for inventory publishes one at the root of its domain, for example https://example-exchange.com/sellers.json.

Each entry has a seller_id (the account ID publishers write in field 2 of their lines), a seller_type, and, unless it is marked confidential, the seller's name and domain. PUBLISHER means the account owns the inventory it sells, INTERMEDIARY that it resells someone else's, BOTH that one account does both. The file also carries a version, optional contact fields and identifiers such as the network's TAG-ID.

Why buyers care

A buyer who sees an impression from seller ID 12345 on an exchange looks the ID up in that exchange's sellers.json. If it is missing, the seller is unknown. If its type is INTERMEDIARY but the publisher declared it DIRECT, something is wrong. If its domain is not the publisher's, the account may belong to someone else. The schain object in OpenRTB bid requests leans on the same file for every hop.

Common problems

  • seller_id written as a number. JSON numbers drop leading zeros and some parsers reject them. Write every ID as a string.
  • Missing domains. Without a domain nobody can match the account to the publisher's website, so the publisher's lines only pass half the check.
  • Duplicate IDs. The same seller_id listed twice, often with different types after a migration. Crawlers keep one entry and the other is lost.
  • Invalid seller_type. Values such as "Publisher/Intermediary", "RESELLER" or an empty string. Only PUBLISHER, INTERMEDIARY and BOTH are defined.
  • The file is served as HTML or behind a bot wall. Crawlers then see no file at all, and every publisher line pointing at the network fails.

How this validator works

For networks we already crawl, the first result comes from our last read: no request leaves our servers, and the counts cover every seller, however large the file. A live check downloads the file now (up to 4 MB), parses it, and checks every entry against the IAB Tech Lab sellers.json specification. We never list seller names here, and contact fields are reported only as present or not.

How to validate a sellers.json, step by step

  1. Enter the network's domain. Use the domain publishers write in field 1 of their app-ads.txt lines, for example pubmatic.com.
  2. Read the summary. See whether the file exists, how many sellers it lists, and how they split between publishers, intermediaries and both.
  3. Run a live check for the schema. A live check downloads the file now and validates every entry: seller_id, seller_type, name, domain, flags and duplicates.
  4. Fix errors, then warnings. Errors make entries unusable to buyers. Warnings, such as a missing domain, make accounts impossible to confirm.

More free tools

Further reading

sellers.json questions

Who has to publish a sellers.json?

Every SSP, exchange or network that is named in field 1 of app-ads.txt or ads.txt lines and is paid for the inventory. It lives at the root of that domain, for example https://pubmatic.com/sellers.json. Publishers do not publish one; they publish app-ads.txt.

Which fields does each entry need?

seller_id and seller_type always, and a name unless the entry is marked is_confidential: 1. A domain is expected for every seller that is not confidential: without it nobody can tie the account to a business. seller_type is PUBLISHER for an account that owns its inventory, INTERMEDIARY for one that resells, and BOTH when one account does both.

Is a high share of confidential sellers a problem?

Not by itself: the specification allows it to protect individuals. But a confidential entry cannot be tied to a business, so buyers who require full transparency discount it, and many networks keep the share low. The validator shows the share so you can compare networks.

Why does seller_id have to be a string?

The specification defines it as a string, and app-ads.txt lines are text. A number loses leading zeros, and strict parsers reject it. Writing "0123" as 123 makes it impossible to match the publisher's line.

Why do duplicate seller IDs matter?

When one ID appears twice with different types or names, a buyer cannot tell which entry is true, and a crawler keeps only one of them. Remove the duplicate and keep the entry that matches the account.

How large a file can the live check read?

Up to 4 MB. The largest networks publish files of hundreds of megabytes; for those the validator shows what our crawler stored on its last read, which covers every entry.

Stoqlab

Get the full supply picture

The free tools answer one question at a time. Stoqlab tracks the app-ads.txt of over half a million apps and the sellers.json of every network they name, follows resellers four hops deep, and keeps every change with its date. Dashboard, REST API and MCP server. Access is by request.