What this tool checks
ads.txt (for websites) and app-ads.txt (for apps and CTV) are public text files that list which ad systems are authorized to sell your inventory. Buyers crawl them, so a malformed file or a missing line quietly cuts you off from demand. The validator runs these checks, each tied to the offending line:
| Check | Severity | Why it matters |
|---|---|---|
| File is plain text, not an HTML page | Error | An HTML page means the URL 404'd or redirected; crawlers get nothing |
| Each record has 3 or 4 fields | Error | Too few fields makes the line unparseable and ignored |
Field 3 is exactly DIRECT or RESELLER | Error | A typo like RESELER invalidates the authorization |
| Field 1 is a bare domain, not a URL | Error | https:// or a path breaks the ad-system match |
| Relationship and domain are lowercase / uppercase as expected | Warning | Mixed case is tolerated but inconsistent and error-prone |
| No duplicate records | Warning | Duplicates bloat the file and lower parser confidence |
Variables (ownerdomain, contact, …) are recognized | Warning | A misspelled variable is silently dropped |
| No UTF-8 BOM or stray tab characters | Warning | Some crawlers mishandle a BOM or tabs in fields |
| Certification authority ID looks like a TAG ID | Warning | A malformed optional 4th field can be ignored |
| At least one DIRECT seller is declared | Warning | Buyers trust DIRECT paths more than RESELLER-only files |
The record format
Each non-comment line is one authorized seller with up to four comma-separated fields: ad-system-domain, publisher-account-ID, DIRECT|RESELLER, certification-authority-ID. Lines beginning with # are comments, and key=value lines are variables such as ownerdomain and contact.
app-ads.txt is about location, not just syntax
The format is identical to ads.txt, but the file must sit at the root of the developer website declared in each app store listing - not inside the app. That discovery step is where most CTV publishers go wrong, so the Where to host tab turns your developer domain into the exact URL crawlers will request.
Frequently Asked Questions
Does my ads.txt file get uploaded?
No. The validator and generator run entirely in your browser - nothing is sent to a server, so you can safely check unreleased files.
Where should app-ads.txt be hosted?
On the root of the developer or marketing website you declare in each app store listing, e.g. https://your-developer-domain.com/app-ads.txt. Crawlers read that URL from the store listing, then fetch /app-ads.txt from it - they do not look inside the app.
What is the difference between DIRECT and RESELLER?
DIRECT means you have a direct account with that ad system. RESELLER means an authorized partner sells your inventory through that system. Field 3 of every record must be exactly DIRECT or RESELLER in uppercase.
Why can't the tool fetch my file?
Browsers block reading a file from another domain unless it sends an Access-Control-Allow-Origin header, and most ads.txt files don't. The tool reports that clearly; open the URL in a new tab to confirm it returns plain text, then paste the contents to validate.
Is ads.txt the same as app-ads.txt?
The line format is identical. The difference is location: ads.txt sits at your website root, while app-ads.txt sits at the root of the developer website declared in your app store listing.