Skip to content
AppFoyer

Guides

Why AdMob says your app-ads.txt was not found

How ad-network crawlers find the file, the six things that usually stop them, and how to tell a real problem from a crawl that has not run yet.

Checked 15 September 2026. Store policies change, sometimes without notice. Everything below links to the official documentation, and that page — not this one — is the authority. If the two disagree, the store is right.

app-ads.txt is an IAB standard that lets an ad network confirm that whoever is selling your app’s inventory is authorised to do so. When AdMob or another network reports that the file was not found, the cause is nearly always mechanical rather than mysterious.

How the crawler finds the file

The chain has three links, and a break in any one produces the same message:

  1. The network reads the developer website URL from your store listing.
  2. It fetches /app-ads.txt at the root of that domain.
  3. It looks for a line naming the network and your publisher id.

So the file is not found via your app, your package name, or your AdMob account. It is found via the website URL printed in the store listing. Get that wrong and nothing else matters.

The six usual causes

No website URL in the listing. The most common one. If the store listing has no developer website, the crawler has nowhere to start.

The URL points somewhere without the file. The listing says example.com but the file is on www.example.com, or on a page path rather than the domain root.

A redirect. The specification expects the file to be served directly. A chain of redirects — even http → https, or apex → www — is a frequent cause of failure. Serve it at 200, at the address the listing names.

The wrong content type. It must be served as plain text. A file served as text/html, or a hosting platform that wraps it in a page, will not parse.

A typo in the line itself. The format is strict: domain, publisher id, relationship, certification id. A missing comma or a stray space breaks that line.

The crawl simply has not run yet. Networks re-crawl on their own schedule, typically measured in days rather than minutes. A file uploaded an hour ago showing as missing is usually just early.

How to check it yourself in ten seconds

curl -i https://your-domain.example/app-ads.txt

You want 200 OK, Content-Type: text/plain, no Location: header, and your lines in the body. If curl is happy and the network still is not, the problem is upstream: the URL in the listing, or the crawl schedule.

A note on subdomains

The specification refers to the root of the domain declared in the store listing, and a subdomain has its own root. Serving the file from yourapp.example.page/app-ads.txt is therefore spec-legal when that exact address is what the listing declares.

We are being careful about this claim rather than confident. Networks apply their own heuristics on top of the specification, and we have not yet finished testing how each of them treats a subdomain. That is why app-ads.txt is labelled Beta in our product and why you will not find “AdMob verified” written anywhere on this site. We will publish the results, whatever they are.

What AppFoyer does here

We serve the file at plain-text with no redirect and the headers the specification asks for, give you presets for the common networks, and validate each line as you type it. We do not promise that a given network will accept it — see the paragraph above.

The authoritative sources


Do this in a few minutes instead

AppFoyer hosts the pages this guide is about — privacy policy, terms, support, account deletion and app-ads.txt — on their own subdomain, with no domain or server of your own. One app is free, and nothing a store requires is ever behind a paywall.