Labs

ads.txt Validator

Fix “ads.txt not found” and “earnings at risk” for good: validate every line against the IAB spec, confirm your publisher ID is there, and check that each seller ID really exists in the ad system’s sellers.json.

Enter a site URL or paste ads.txt
ads.txt —
or drop a file here
Validation —
Line-by-line results, variables and the sellers.json cross-check appear here
Settings Also checks app-ads.txt
How It Works

How to Use ads.txt Validator in 3 Steps

1

Fetch or paste

Enter the site — the tool fetches /ads.txt (and /app-ads.txt) from the root, exactly where buyers look — or paste the file. Optionally type your AdSense / Ad Manager publisher ID so the report confirms the line exists. Press Validate.

2

Fix the flagged lines

Each record is checked against the IAB Tech Lab ads.txt 1.1 spec: three or four comma-separated fields, a bare domain for the ad system, DIRECT or RESELLER in capitals, a plausible certification authority ID (Google’s is always f08c47fec0942fa0), no duplicates or conflicting relationships, no stray BOM, quotes or tabs. Variables (OWNERDOMAIN, MANAGERDOMAIN, CONTACT, SUBDOMAIN, INVENTORYPARTNERDOMAIN) are validated too.

3

Cross-check sellers

Press Cross-check with sellers.json to fetch each ad system’s sellers.json and confirm every seller ID is listed there with the expected type — a line that points to an unknown seller earns nothing. Download the cleaned file (deduplicated, normalised) or the report.

FAQ

ads.txt Validator — Frequently Asked Questions

Where must ads.txt live, and why “not found”?

At https://yourdomain.com/ads.txt — the root of the registrable domain, served as text/plain with a 200 status, no redirect to another domain. Common causes of “not found” in AdSense: the file is on www only (or the bare domain only) and the other host does not redirect; a CMS returns an HTML 404 page with status 200; a CDN or firewall blocks Google’s crawler; or the file is cached empty. This tool shows the exact status and content type it received.

DIRECT or RESELLER?

DIRECT means you control the account in that ad system (your own AdSense publisher ID). RESELLER means a partner sells your inventory through their account. Each partner tells you which lines to add — paste them verbatim. The same seller ID appearing as both is flagged as a conflict.

What is sellers.json and why cross-check it?

Every ad system publishes sellers.json, the mirror image of ads.txt: a list of the seller IDs it pays. Buyers match the two. If your ads.txt names a seller ID that the ad system’s sellers.json does not list, that line is dead — bids are rejected. The cross-check downloads each system’s file in your browser (Google’s alone is tens of megabytes, which is why it is a button) and reports found / not found / confidential.

Do I need app-ads.txt?

Only if you monetise a mobile or CTV app: stores link the app to your developer website, and buyers look for app-ads.txt there. For a plain website a missing app-ads.txt is normal and reported as informational.

What are OWNERDOMAIN and MANAGERDOMAIN?

Spec 1.1 additions. OWNERDOMAIN names the business that owns the site (one per file); MANAGERDOMAIN names a company that manages monetisation on your behalf, optionally per country (MANAGERDOMAIN=agency.com, FR). They let buyers verify the chain of custody and are required by some programmatic platforms — invalid or repeated values are flagged.

Why does fetching sometimes fail — and what is the relay?

Browsers block JavaScript from reading other websites directly (CORS). The tool first tries a direct request; when the site forbids it, the URL only is sent to a public read-only relay (allorigins.win, then codetabs.com) that fetches the page and returns its HTML. The relay sees the URL you typed, nothing else — Toolity has no server and keeps no record. If the relay is busy or the site blocks bots, paste the page source instead: that path is 100% local.

Is my input sent anywhere?

No. Everything is computed by JavaScript in your browser tab. Nothing is uploaded, logged or stored by Toolity.