Skip to content
PlacementGraph™
Supply path

What is a seller ID in programmatic advertising, and how do buyers trace it?

Part of Supply path transparency

A reader browsing on a laptop with a coffee.
Photo: Vlada Karpovich, Pexels

The short answer

A seller ID is the account number an exchange or SSP gives each company it pays for ad inventory. The same ID appears in the publisher's ads.txt file, the exchange's sellers.json directory and each node of a bid request's SupplyChain object, so a buyer can follow one ID to see who sells an impression and whether they are authorized.

Key takeaways

  • A seller ID belongs to an advertising system: it means something only next to that system's domain.
  • The sellers.json specification says it is the same ID that appears in ads.txt and in the SupplyChain nodes' sid property.
  • Each seller ID must map to a single paid entity, but one company may hold several seller IDs on the same system.
  • An ID missing from the publisher's ads.txt makes that seller unauthorized; an ID missing from sellers.json leaves it unidentified.

What is a seller ID in programmatic advertising?

Definition

Seller ID
The identifier an advertising system, such as an SSP or exchange, assigns to an account that sells inventory through it. It names the entity the system pays, not a website, and it is unique only within that system.

A seller ID is a unique ID assigned by an advertising system to each of the inventory sellers on their platform.

IAB Tech Lab, FAQ for sellers.json and SupplyChain Object (updated September 2020), source (opens in a new tab)

The same FAQ explains why the term confuses people. OpenRTB's older wording assumed simple exchanges where every seller was a publisher, so the field was called a publisher ID, and some exchanges filled it with something closer to a site or app owner than the account actually supplying the inventory. For sellers.json and the SupplyChain object, the FAQ is explicit: the seller ID must represent a single entity that the advertising system pays directly for inventory.

Two consequences follow for buyers. First, a seller ID tells you nothing without its system: account 4417 on one exchange and account 4417 on another are unrelated. Second, a seller ID describes a payment relationship. When a sales house sells a site, the ID on that path is the sales house's account, even though the impression is on the publisher's pages.

Where does a seller ID appear?

The sellers.json specification (opens in a new tab) defines seller_id as the same ID that appears in an ads.txt file and in the SupplyChain.nodes array sid property, adding that in most cases it will also appear in the Publisher.id property of an OpenRTB request. Each record names the field differently, and each is written by a different party.

One seller ID, four places, as defined in IAB Tech Lab specifications
RecordFieldWritten byPaired with
ads.txt on the publisher's domainField 2, the account IDThe publisherField 1, the advertising system's domain
sellers.json on the system's domainseller_idThe advertising systemThe file's own location, plus name, domain and seller_type
SupplyChain object in the bid requestsid in each nodeEach system that handles the requestasi, the system's domain, in the same node
OpenRTB bid requestsite.publisher.id or app.publisher.idThe exchange sending the requestThe exchange that sent it

The OpenRTB 2.6 specification (opens in a new tab) describes publisher.id as the exchange specific seller ID and says it corresponds to a seller_id in the exchange's sellers.json file. The SupplyChain object specification (opens in a new tab) makes both asi and sid required in every node, says both should match the values in ads.txt, and asks that sid be limited to 64 characters. The pairing is the point: a domain and an ID together identify one account.

How do you trace one seller ID across the files?

Tracing works best from the bid request outward, because the request says which accounts actually handled one impression. Ask the trading desk for a sample request or a log row that includes the site domain and the SupplyChain nodes, then follow each node's pair of values.

Following seller IDs from one bid request

  1. List the nodes in order. Each node in schain gives an asi and a sid. In a complete chain, the specification says the first node represents the owner of the site, and the last node is the entity sending the request.
  2. Find each pair in the publisher's ads.txt. Look for a line whose field 1 matches the asi and whose field 2 matches the sid. A node with no matching line is an unauthorized seller for that site.
  3. Find each sid in that system's sellers.json. Open the file at the asi domain and look up the seller_id. Note the seller_type, name and domain.
  4. Check the links between nodes. IAB Tech Lab's FAQ suggests that the name behind a seller ID on one system should match the advertising system in the preceding node; a mismatch implies a break in the chain.
  5. Check the first node. When the chain is marked complete, the FAQ says the first node should have a seller_type of PUBLISHER and should usually be listed as DIRECT in the publisher's ads.txt.
One seller ID, followed through three records
One seller ID, followed through three recordsThe same pair of values, system domain and seller ID, should appear in the bid request, the publisher's ads.txt and the system's sellers.json. 1. schain, Bid request node: asi and sid name the selling account. 2. ads.txt, Publisher's file: Same domain and ID on one line. 3. sellers.json, System's directory: Same ID, with name and seller_type. 4. Plan, Buyer's record: Path confirmed, dated, with owner01schainBid request nodeasi and sid name theselling account02ads.txtPublisher's fileSame domain and ID onone line03sellers.jsonSystem's directorySame ID, with name andseller_type04PlanBuyer's recordPath confirmed, dated,with ownerSame ID in each
One seller ID, followed through three recordsThe same pair of values, system domain and seller ID, should appear in the bid request, the publisher's ads.txt and the system's sellers.json. 1. schain, Bid request node: asi and sid name the selling account. 2. ads.txt, Publisher's file: Same domain and ID on one line. 3. sellers.json, System's directory: Same ID, with name and seller_type. 4. Plan, Buyer's record: Path confirmed, dated, with owner01schainBid request nodeasi and sid name the sellingaccountSame ID in each02ads.txtPublisher's fileSame domain and ID on one line03sellers.jsonSystem's directorySame ID, with name andseller_type04PlanBuyer's recordPath confirmed, dated, withowner
The same pair of values, system domain and seller ID, should appear in the bid request, the publisher's ads.txt and the system's sellers.json.

What does a missing seller ID mean?

It depends on which record is missing it. The three files answer different questions: ads.txt says who may sell, sellers.json says who the account belongs to, and schain says who did sell. A gap in each has a different meaning and a different owner.

Reading a seller ID that is missing from one record
Where the ID is missingWhat the specifications or platforms sayWhat a buyer does
Publisher's ads.txt, while the file existsDisplay & Video 360 treats sellers not declared in the file as unauthorized and blocks them; Google Ad Manager says it no longer monetizes sites whose file omits the seller's publisher IDTreat the path as unbuyable until the publisher adds the line
System's sellers.jsonThe specification says all sellers must be included even if they are confidential, so absence is an error or a stale fileAsk the exchange; the account cannot be identified meanwhile
sellers.json lists the ID as confidentialPresent, but name and domain may be omitted when is_confidential is 1The account exists; only its owner is hidden
A schain nodeasi and sid are both required in every nodeTreat the request's chain as unreadable
The whole SupplyChain object is emptyDisplay & Video 360 says an empty SupplyChain object is considered unauthorizedExpect no bids from that platform on that request

Can one publisher have many seller IDs?

Yes. The sellers.json specification says it is invalid for a seller_id to represent multiple entities, but valid for one selling entity to have multiple seller_ids within an advertising system. A publisher can hold separate accounts for different integrations, for web and app inventory, or for owned sites and sites it represents.

Google gives a concrete version. Its Ad Manager sellers.json help (opens in a new tab) says a company with AdSense, AdMob and Ad Manager accounts appears in sellers.json once per product, with a seller_id unique to each product, while its transparency status and business domain are shared across them. Its ads.txt FAQ (opens in a new tab) tells publishers that monetize through several accounts to include a separate row for each, with its own pub- code. The same sellers.json page says the seller ID represents the company being paid for inventory, not each individual site.

Seller ID patterns worth a question, from IAB Tech Lab's FAQ

  • Every domain on an exchange has its own seller ID, one to one across the board, which the FAQ says suggests incorrect use of seller IDs.
  • Many apparently unrelated domains sell under one seller ID whose seller_type is PUBLISHER.
  • A seller ID listed as PUBLISHER carries the name of a company known to be an intermediary.
  • The first node of a complete chain is listed as RESELLER, not DIRECT, in the publisher's ads.txt.

What does a seller ID trace look like on a real plan?

Fictional example

An auto glass repair chain in British Columbia

A fictional windshield repair and replacement chain with shops across Metro Vancouver and the Okanagan asks its agency to confirm the selling paths behind a curated deal on 18 driving, commuting and local news sites. The trading desk shares log rows with schain nodes for a sample of impressions from each site.

For most sites the first node's asi and sid match a DIRECT line in ads.txt, and the exchange's sellers.json lists the same ID as PUBLISHER under the site owner's name. For a commuter news site, the first node is the account of a regional sales house: its ID is declared DIRECT in the site's file, and in the sales house's own sellers.json that ID is listed under the publisher's name, with a second node for the exchange account that the sales house sells through. The path is longer but every ID resolves.

One traffic news site fails. The request's only node carries a sid that is not in the site's ads.txt at all. The desk removes that path from the deal and keeps the site through its declared direct account, which the exchange confirms.

How does PlacementGraph use seller IDs when it checks a site?

PlacementGraph does the file side of the trace for each candidate site, before any bid request exists.

Frequently asked questions

Is a seller ID the same as a deal ID or a buyer seat ID?

No. In OpenRTB 2.6 the deal ID is a unique identifier for the direct deal, and seat IDs in wseat name buyer seats such as advertisers or agencies allowed to bid. The seller ID sits on the other side of the trade: it names the account being paid for the inventory. See the guides to the deal ID and the buyer seat ID.

What does the hp field next to sid mean in schain?

hp says whether the node is involved in the flow of payment for the inventory. The SupplyChain specification says that for version 1.0 it should always be 1, and that it is required because future versions are expected to add nodes that do not handle payment. Systems should support it and pass it on downstream.

Is the TAG ID in ads.txt a seller ID?

No. The optional fourth field of an ads.txt line is a certification authority ID that identifies the advertising system named in field one, not the seller account. The ads.txt 1.1 specification says these declarations are superseded by the identifiers object in sellers.json and that the field may be deprecated in a future version.

Where can a buyer look up Google's seller IDs?

Google publishes its file at realtimebidding.google.com/sellers.json (opens in a new tab). Its seller IDs are the pub- codes publishers place in the second field of their ads.txt lines next to google.com. Google's help suggests downloading the file and searching it for the seller_id.

Sources

  1. FAQ for sellers.json and SupplyChain Object (opens in a new tab)IAB Tech Lab, July 2019, updated September 2020
  2. sellers.json specification (opens in a new tab)IAB Tech Lab (GitHub)
  3. SupplyChain object (opens in a new tab)IAB Tech Lab (GitHub)
  4. OpenRTB 2.6 specification (opens in a new tab)IAB Tech Lab (GitHub)
  5. ads.txt Version 1.1 specification (opens in a new tab)IAB Tech Lab, 2022 (GitHub)
  6. Provide seller information with sellers.json (opens in a new tab)Google, Ad Manager Help
  7. ads.txt/app-ads.txt FAQs (opens in a new tab)Google, Ad Manager Help
  8. Authorized Digital Sellers (opens in a new tab)Google, Display & Video 360 Help

Researched and written by PlacementGraph Research. Read how we research, source and update these pages. Corrections: diana@placementgraph.com.

HOW AGENCIES WORK WITH US

From your first brief.
To your next campaign.

Share a brief in plain language. Get contextual websites and YouTube channels that fit it, with the evidence behind every pick and a deal ready for your usual buying platform.

  1. 01

    Share your brief

    The campaign in plain language.

  2. 02

    Get your shortlist

    The strongest contextual sites and channels, with the evidence behind each.

  3. 03

    We build the deal

    Your shortlist becomes a curated deal through our exchange partners.

  4. 04

    Activate and grow

    Buy in your usual platform. Agencies earn benefits as their investment grows.

LET’S WORK TOGETHER

Your next campaign starts here.

Your details will only be used to respond to your enquiry.

Prefer email? diana@placementgraph.com

YOUR PRIVACY

You choose whether to allow optional analytics. You can use the whole website either way.

Change or withdraw consent at any time using “Cookie preferences” in the footer. Turning analytics off stops future collection and removes this site’s analytics cookies; it does not erase information already sent. The page may refresh to apply withdrawal.