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:
- The network reads the developer website URL from your store listing.
- It fetches
/app-ads.txtat the root of that domain. - 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
- Set up app-ads.txt — AdMob Help
- app-ads.txt / ads.txt specification — IAB Tech Lab
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.