Open Calculator
← All Guides | Ad Fraud & Compliance Published: October 05, 2025 · Last Audited: February 11, 2026

App-ads.txt & Ads.txt Technical Specification: Preventing Inventory Spoofing and Authorized Seller Verification

Authorized Digital Sellers for Mobile Apps (`app-ads.txt`) and web (`ads.txt`) is a mandatory cryptographic chain-of-custody standard maintained by the IAB Tech Lab. Before programmatic DSPs (such as Google DV360, The Trade Desk, or AppLovin AppDiscovery) bid on an ad request, their crawlers verify that the publisher's root domain explicitly authorizes the seller account ID attached to the OpenRTB bid request.

If your `app-ads.txt` file is missing, returns an HTTP 404/403 status to bot user-agents, or omits required reseller lines, major demand sources automatically filter out your bid requests—reducing fill rates by 40% to 75% and collapsing eCPMs.

1. Syntax & Four-Field Record Structure

Every line in an `ads.txt` or `app-ads.txt` file consists of three mandatory comma-separated fields and one optional चौथा (fourth) certification authority ID field:

# Syntax: <Domain>, <Publisher_Account_ID>, <Relationship_Type>, <TAG_ID>
google.com, pub-0000000000000000, DIRECT, f08c47fec0942fa0
applovin.com, a1b2c3d4e5f6g7h8i9j0, DIRECT
unity.com, 1234567, DIRECT, 96c0489202320234
rubiconproject.com, 9876, RESELLER, 0bfd66d529a55807
Field # Field Name Technical Definition
Field 1 Exchange Canonical Domain The operational root domain of the advertising system (e.g., google.com, facebook.com, inmobi.com).
Field 2 Publisher Seller Account ID Your unique publisher identifier mapped to `SellerAccountID` in OpenRTB `publisher.id` bid requests.
Field 3 Relationship (`DIRECT` | `RESELLER`) DIRECT: You hold a direct account login and receive payouts directly from this network.
RESELLER: The network sells your inventory via an intermediary SSP or third-party exchange partner.
Field 4 TAG Certification ID (Optional) The Trustworthy Accountability Group (TAG) 16-character hexadecimal ID identifying the exchange (e.g., `f08c47fec0942fa0` for Google).

2. How App Store Domain Resolution Works (IAB Crawler Path)

Unlike websites where crawlers simply append `/ads.txt` to the site URL, mobile apps do not have a browser URL. To verify an app, the IAB crawler executes a strict 3-step lookup chain:

  1. Step 1 — Store Metadata Scrape: The crawler fetches your live Google Play Store or Apple App Store listing and extracts the Developer Website URL field.
  2. Step 2 — Root Domain Normalization: Following the IAB specification, if your store listing URL is `https://play.subdomain.mystudio.com/games/puzzle`, the crawler strips the path and subdomain, resolving the root path to `https://mystudio.com/app-ads.txt` (with only a single one-level subdomain fallback allowed before root).
  3. Step 3 — HTTP Header & Encoding Validation: The file must return an `HTTP 200 OK` status with `Content-Type: text/plain; charset=utf-8`. A redirect chain exceeding one hop or redirecting to a different root domain invalidates verification.

3. Why Never to Copy Generic `DIRECT` Lines from Other Publishers

A dangerous mistake made by junior developers is copying another app's `app-ads.txt` file or pasting `RESELLER` lines marked as `DIRECT`.

  • Direct vs. Reseller Filtering: Supply-path optimization (SPO) algorithms used by agency buyers prioritize `DIRECT` paths to avoid double intermediary fees. However, if you label a network's third-party reseller line as `DIRECT`, the exchange's `sellers.json` file will contradict your `app-ads.txt` file, causing DSPs to flag the discrepancy as spoofing and drop the bid entirely.
  • Keeping Reseller Lines Updated: Networks like AppLovin MAX, Unity LevelPlay, and Liftoff aggregate bids from dozens of external DSPs (Index Exchange, Magnite, PubMatic, OpenX). Use your mediation platform's automated `app-ads.txt` validator once per quarter to append new authorized reseller lines.

4. Troubleshooting "app-ads.txt Not Found" in Google AdMob

If you have uploaded `/app-ads.txt` to your root domain and linked your website in Google Play Console / App Store Connect, yet AdMob still displays "No app-ads.txt file found," check these four common failure points:

  1. Cloudflare Bot Fight Mode / WAF Rules: Ensure your firewall or Cloudflare security settings do not challenge or block `Googlebot` or `Google-AdWords-Express` user-agents with a JavaScript CAPTCHA challenge.
  2. `robots.txt` Disallow Rules: Confirm your `/robots.txt` file explicitly allows `User-agent: *` and does not block `/app-ads.txt`.
  3. UTF-8 BOM (Byte Order Mark) Corruption: Windows Notepad frequently prepends invisible `EF BB BF` byte order marks to text files, causing strict parsers to fail on Line 1. Always save the file in pure `UTF-8` without BOM or place a comment (`# app-ads.txt`) on Line 1 so any invisible BOM only affects the comment line.
  4. Play Store Crawl Delay: After updating your Developer Website URL in Google Play Console, it takes Google's store indexers 24 to 72 hours to propagate the metadata change to AdMob's crawler.

Protect Your Account from Ad Serving Limits Next

Learn how to prevent invalid traffic flags and configure test devices properly in Google AdMob.

Ad Serving Limits Guide →