Skip to content
Flowpane
Level 3 / Method

ads.txt

ads.txt lists the advertising systems authorised to sell a site's inventory. Seller lines rot as ad stacks change, so Flowpane checks each record.

Updated 29 September 2026·4 min read·Weight 8 of 100·Markdown

ads.txt is a public list, served at the root of a domain, of the advertising systems authorised to sell that domain's inventory. Buyers and their platforms read it to reject inventory offered by anyone not on the list. It carries 8 of the 100 points in Flowpane's site score, and it only applies to sites that sell advertising.

What it is for

The IAB Tech Lab ads.txt specification exists to stop domain spoofing: a seller claiming to offer inventory on example.com when it has no right to. Programmatic buyers fetch the file and compare the seller in each bid request with the records it contains.

That comparison drives money in both directions. A missing record means a legitimate partner's bids are discarded and revenue is lost. A record that should have been removed means a party you no longer work with can still sell as you.

Record format

Each seller record is one line of three or four comma-separated fields:

  1. The advertising system's domain.
  2. The publisher's account ID on that system.
  3. The relationship: DIRECT or RESELLER.
  4. Optionally, the certification authority ID for that system.

DIRECT means the publisher controls the account. RESELLER means the publisher has authorised another party to control the account and resell the inventory.

ads.txt 1.1 adds variables written as NAME=value: OWNERDOMAIN (the business that owns the inventory), MANAGERDOMAIN (a party managing it, globally or per country), CONTACT, SUBDOMAIN (pointing to subdomains with their own file) and INVENTORYPARTNERDOMAIN. A publisher that authorises no one uses a specific placeholder record rather than an empty file.

How it goes stale

Ad stacks change more often than the file does. Seller lines rot in predictable ways:

  • Additions without removals. Each new partner supplies a block of lines to paste in. When the contract ends, nobody removes them, and the file grows to hundreds of records that nobody can vouch for.
  • Wrong relationships. Lines are pasted with DIRECT where the contract is a resale, or the same account appears as both DIRECT and RESELLER.
  • Damaged formatting. A CMS or text editor introduces typographic quotes, extra fields or wrapped lines, and the affected records stop parsing.
  • Lost files. A hosting migration drops the file, or a catch-all route answers /ads.txt with an HTML page.

What true looks like

# ads.txt for www.example.com, reviewed 2026-09-15
OWNERDOMAIN=example.com
CONTACT=adops@example.com
adexchange.example.net, pub-1234567890, DIRECT, a1b2c3d4e5
ssp.example.org, 98765, RESELLER

A publisher that authorises no advertising systems publishes only the placeholder:

placeholder.example.com, placeholder, DIRECT, placeholder
  • Every line is a seller record, a variable or a comment.
  • Every record traces to a current agreement, with the relationship that agreement describes.
  • One OWNERDOMAIN, and at most one MANAGERDOMAIN per country plus one global.
  • Served as plain text at /ads.txt, never as an HTML page.

How Flowpane checks it

Applicability. ads.txt is scored only when the site declares, in its capability settings, that it sells advertising. On any other site it is not applicable and is excluded from the weighting entirely. Once declared, it is required, so a missing file counts as 0.

Records. Flowpane parses every line and checks that seller records have exactly three or four fields, that the system field is a valid domain, that account IDs are present and contain no whitespace, and that the relationship is DIRECT or RESELLER. It detects malformed lines, duplicate records and relationship conflicts, where the same system and account appear as both DIRECT and RESELLER. Flowpane reports conflicts without choosing which relationship is correct: only the publisher can confirm that.

Variables. The five ads.txt 1.1 variables are validated, including repeated OWNERDOMAIN values and duplicate MANAGERDOMAIN scopes. A missing OWNERDOMAIN or CONTACT is a recommendation, and Flowpane never invents either value.

Zero-score rules. An empty file, an HTML response or a file with no seller records scores 0. The no-seller placeholder is recognised as a valid declaration, but because it authorises no seller, it also scores 0 on a site that has declared it sells advertising. That mismatch deserves a human decision.

Drafts. A starter for a missing file contains comments and explicit placeholders only. Seller records, account IDs and manager domains must come from the publisher.

What Flowpane does not cover

Flowpane checks the file you publish. It does not reconcile records against sellers.json, does not confirm that an account ID exists on the advertising system, and does not verify commercial relationships externally. app-ads.txt, the equivalent file for mobile and connected-TV apps, is not monitored.

Common failures

SymptomWhat it meansEffect
Empty file or HTML responseNo usable declarationScore 0
Same account as DIRECT and RESELLERConflicting relationshipFlagged for review
Most lines malformedFormatting damagedIssue
Duplicate recordsPasted twiceRecommendation
Placeholder only, site sells adsDeclaration contradicts settingsScore 0