Plain Reckoner
EN

Dataset

Where a publisher’s ads.txt and their ad network’s own seller list disagree, across 462 checked relationships

Two files are meant to say the same thing and nobody publishes how often they do not. A publisher hosts a file called ads.txt naming every company allowed to sell their advertising space, with the account number each one holds for them. The advertising network publishes a matching file, sellers.json, naming every account it may sell for and the site that account belongs to. The specification says the account number is the same in both. A matching account number is one check; the seller domain and relationship also need review. Direct browser requests may be restricted by cross-origin rules. We ran it across 462 relationships between one publisher and one network, drawn from 500 domains sampled at random from a 16,085-domain frame from Mediavine and Raptive. We compared the results against six network rosters. Of 462 relationships, 426 matched, 35 were roster-only and one had an account-number mismatch. These public-file differences do not establish lost revenue, buyer behavior or unauthorized trading.

Coverage
2026-09-02
Last updated
Licence
CC BY 4.0
What a row is
One relationship between a publisher and an advertising network: whether both files agree about it, and what the publisher’s own file looked like when it was read.
Subjects
ads.txt, sellers.json, authorised digital sellers, programmatic advertising, ad fraud, domain spoofing, supply chain transparency, IAB Tech Lab

Download the public data sample462 rows · 10 columns · CSV · no account, no email

How to cite this

Use it commercially, change it, build on it. The only condition is credit, and a link satisfies it.

In a chart, where space is shortPlain Reckoner (2026)
In fullPlain Reckoner (2026). "Where a publisher’s ads.txt and their ad network’s own seller list disagree, across 462 checked relationships" [dataset]. https://doi.org/10.5281/zenodo.22280372
As HTML, ready to pasteSource: <a href="https://plainreckoner.com/data/ads-txt-against-seller-lists/">Plain Reckoner, Where a publisher’s ads.txt and their ad network’s own seller list disagree, across 462 checked relationships</a>

What you should know about this data

How it was measured

500 domains were drawn at random from a 16,085-domain frame in Mediavine and Raptive seller lists, using a published seed so the same draw can be repeated. 457 domains were reachable and 43 refused or could not be reached; the ones that could not be reached are excluded rather than counted as having no file. Each domain was then compared against the seller lists of all six networks, one publisher-and-network pair at a time, matching on the account number, because that is the field the specification says the two files share. A pair is confirmed when the publisher’s file names the network and the network files that number against that site. It is roster-only when the network claims the site and the publisher’s file says nothing about it, and not-in-roster when the file names the network and that number appears on the network’s list nowhere. Rows are in the order the sample was drawn.

The summary

The first 60 of 462 rows. The download has all of them. Free to use with credit, commercially included.

networkagreementwhy_unconfirmedother_network_namedsite_under_another_numberads_txt_statusads_txt_presentrecords_declaredunparsed_linesserved_as_html
Raptiveroster-onlyno-ads-txtno404no00no
Mediavineconfirmedno200yes1440no
Raptiveconfirmedno200yes710no
Mediavineconfirmedno200yes1440no
Mediavineconfirmedno200yes1440no
Mediavineconfirmedno200yes1440no
Mediavineconfirmedno200yes1440no
Raptiveconfirmedno200yes710no
Raptiveconfirmedno200yes710no
Mediavineroster-onlynames-another-networkRaptiveno200yes710no
Raptiveconfirmedno200yes710no
Mediavineconfirmedno200yes1440no
Raptiveconfirmedno200yes710no
Raptiveconfirmedno200yes710no
Raptiveconfirmedno200yes710no
Raptiveconfirmedno200yes710no
Playwireroster-onlynames-another-networkRaptiveno200yes710no
Mediavineconfirmedno200yes1440no
Raptiveconfirmedno200yes710no
Raptiveconfirmedno200yes710no
Mediavineconfirmedno200yes1440no
Raptiveconfirmedno200yes710no
Raptiveconfirmedno200yes710no
Mediavineconfirmedno200yes1440no
Raptiveconfirmedno200yes710no
Raptiveconfirmedno200yes710no
Mediavineconfirmedno200yes1440no
Raptiveconfirmedno200yes710no
Raptiveconfirmedno200yes710no
Mediavineconfirmedno200yes1360no
Mediavineconfirmedno200yes1440no
Raptiveconfirmedno200yes710no
Mediavineconfirmedno200yes1440no
Raptiveconfirmedno200yes710no
Raptiveconfirmedno200yes710no
Raptiveconfirmedno200yes710no
Raptiveconfirmedno200yes710no
Mediavineconfirmedno200yes1440no
Raptiveconfirmedno200yes710no
Mediavineconfirmedno200yes1440no
Raptiveroster-onlynames-no-networkno200yes2070no
Raptiveconfirmedno200yes710no
Raptiveconfirmedno200yes710no
Mediavineroster-onlyno-ads-txtno404no00no
Raptiveconfirmedno200yes720no
Mediavineconfirmedno200yes670no
Mediavineconfirmedno200yes1440no
Mediavineconfirmedno200yes1440no
Mediavineconfirmedno200yes1440no
Raptiveconfirmedno200yes710no
Raptiveconfirmedno200yes710no
Mediavineroster-onlyno-ads-txtno404no00no
Mediavineconfirmedno200yes1390no
Mediavineroster-onlynames-another-networkRaptiveno200yes710no
Raptiveconfirmedno200yes710no
Raptiveconfirmedno200yes730no
Mediavineconfirmedno200yes1440no
Raptiveconfirmedno200yes710no
Raptiveconfirmedno200yes710no
Mediavineconfirmedno200yes1440no

What each column means

network
The advertising network in this relationship
agreement
confirmed, roster-only or not-in-roster, as the method defines them
why_unconfirmed
For a roster-only row, what the publisher’s file did instead
other_network_named
The network the file named instead, where it named one of the six
site_under_another_number
yes when the network holds this site under an account number the site’s own file does not carry
ads_txt_status
The HTTP status the publisher’s address answered with
ads_txt_present
yes when that address served a usable ads.txt
records_declared
How many seller records the publisher’s file carries
unparsed_lines
Lines in the file that are neither a seller record nor a variable declaration
served_as_html
yes when the body began as a web page rather than as records

Request the full research data

The download above contains the published research table: 462 rows, no account, no email, free to reuse with attribution. For the data and working used to reach this finding, request the supporting record below. Availability depends on source permissions and privacy.

What is not on the page is the working: the ads.txt bodies as they were served, the account numbers on each side of every comparison, and the 43 domains that could not be read at all. If you are checking our method, writing about this, or need something cut a different way, ask — we will send what we can and say plainly where we cannot.

No confirmation step and nothing to click. We log the request, email you to say so, and a person sends it — usually within a day. You are not added to any list, and unless you subscribe separately that acknowledgement is the only email you will get. What we collect.

← Every dataset