AD OPS

ads.txt & app-ads.txt Validator & Generator

Validate your authorized-sellers file line by line, build a clean one from scratch, and find the exact URL crawlers expect for app-ads.txt - the step CTV publishers miss most. Everything runs in your browser; your file never leaves your device.

Fetched in your browser - nothing is proxied through us. Most ads.txt files block cross-origin reads (CORS); if a file opens in a tab but fails here, paste it above instead.

Never lose demand to a broken ads.txt again.

OTT Engine wires up app-ads.txt on the right developer domain for every store, keeps your authorized-seller lines in sync with your SSP relationships, and validates the file on every change - so buyers can always verify your inventory.

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:

CheckSeverityWhy it matters
File is plain text, not an HTML pageErrorAn HTML page means the URL 404'd or redirected; crawlers get nothing
Each record has 3 or 4 fieldsErrorToo few fields makes the line unparseable and ignored
Field 3 is exactly DIRECT or RESELLERErrorA typo like RESELER invalidates the authorization
Field 1 is a bare domain, not a URLErrorhttps:// or a path breaks the ad-system match
Relationship and domain are lowercase / uppercase as expectedWarningMixed case is tolerated but inconsistent and error-prone
No duplicate recordsWarningDuplicates bloat the file and lower parser confidence
Variables (ownerdomain, contact, …) are recognizedWarningA misspelled variable is silently dropped
No UTF-8 BOM or stray tab charactersWarningSome crawlers mishandle a BOM or tabs in fields
Certification authority ID looks like a TAG IDWarningA malformed optional 4th field can be ignored
At least one DIRECT seller is declaredWarningBuyers 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.

Related tools

Related reading