app-ads.txt for AdMob: A Complete Setup Guide (and Why Ads Stop Without It)
What app-ads.txt is, where the file has to live, the exact line AdMob needs, and the hosting mistakes that make verification fail.
If you monetize a mobile app with AdMob, sooner or later you will see a warning in the console asking you to set up app-ads.txt. It is easy to ignore, because ads keep serving for a while. But advertisers increasingly refuse to buy inventory from apps without a valid app-ads.txt file, and that shows up as lower fill rates and lower eCPM. This guide explains what the file does, how to publish it correctly, and how to debug it when AdMob says it cannot find it.
What app-ads.txt actually does
app-ads.txt ("Authorized Sellers for Apps") is a standard created by the IAB Tech Lab. It is a plain text file, hosted on the developer website listed in your store listing, that declares which ad networks are allowed to sell ad space in your apps.
Ad fraud often works by pretending to be a popular app. A fraudster sends bid requests claiming to be your app, and advertisers pay for impressions that never reached a real user of it. app-ads.txt closes that gap. A buyer looks up your app in the Play Store or App Store, follows the developer website link, downloads app-ads.txt, and checks that the seller in the bid request is listed there. If it is not, the buyer can refuse the impression.
The important consequence is that the chain of trust starts at your store listing. The file only counts if it lives on the exact website you entered as the developer website in Google Play Console or App Store Connect.
The line AdMob needs
AdMob gives you a ready-made line in the console under Apps → View all apps → app-ads.txt. It looks like this, with your own publisher ID:
google.com, pub-0000000000000000, DIRECT, f08c47fec0942fa0- google.com is the domain of the advertising system.
- pub-0000000000000000 is your AdMob publisher ID. It must match your account exactly.
- DIRECT means you have a direct account with that network, rather than reselling through someone else.
- f08c47fec0942fa0 is Google's certification authority ID. It is the same for every AdMob publisher.
If you use mediation with other networks (for example Meta Audience Network, AppLovin, Unity Ads or ironSource), each of them publishes its own lines. Add every line they give you, one per line, in the same file. A single file covers all of your apps that list this website as their developer site.
Where the file has to live
The file must be reachable at the root of your developer website, for example https://example.com/app-ads.txt. A few rules matter more than people expect:
- The website in your store listing and the domain hosting the file must match. If your listing says
https://www.example.com, test that exact address. - The file must be at the root, not in a folder such as
/files/app-ads.txtor/static/app-ads.txt. - The server must answer with HTTP status 200 and plain text content. A login page, a cookie wall or a "coming soon" page in front of it breaks verification.
- Avoid redirect chains. Redirects to a different domain are a common reason crawlers give up.
The single-page-app trap
Many developer websites today are single-page apps built with React, Vue or similar tools. They are usually deployed with a catch-all rule that sends every unknown URL to index.html, so that client-side routing works. That rule has a nasty side effect: if app-ads.txt is missing, the server still answers /app-ads.txt with status 200 and your homepage HTML.
To a quick manual check in the browser that might look like "something loaded". To the AdMob crawler it is a file with no valid records. Always open the URL and confirm you see the raw text line, not your website. In a Vite or Create React App project, put the file in the public/ folder so it is copied as-is into the build output.
Testing it yourself
Before waiting on AdMob, check the response from the command line:
curl -i https://example.com/app-ads.txtYou want to see HTTP/2 200 (or HTTP/1.1 200 OK), a content-type of text/plain, and your lines in the body. If you see text/html, a 301/302 to another domain, or a 404, fix that first.
Why AdMob still says "not found"
AdMob does not crawl instantly. After you publish the file, it can take a day or more for the status to update, and you can trigger a re-check from the app-ads.txt tab in the console. If it still fails after that, work through this list:
- The developer website field in the store listing is empty, misspelled, or points at a different domain than the one hosting the file.
- The publisher ID in the file does not match the account the app is linked to. Copy it from the console rather than typing it.
- The store listing was updated recently. Store changes need to be published and visible before the crawler picks up the new website.
- The file is saved with a byte-order mark, smart quotes, or extra characters from a word processor. Use a plain text editor.
- Your host blocks crawlers or certain user agents through a firewall or bot-protection setting.
Keeping it healthy over time
Treat app-ads.txt as part of your release checklist. Whenever you add a mediation partner, add its lines on the same day. When you move your website to a new host or framework, check the file again after deployment; it is surprisingly common for a redesign to quietly drop it. And when you publish a new app, make sure its developer website points at the same domain so it inherits the file.
Quick checklist: file at the domain root, exact developer website in the store listing, plain text with status 200, correct publisher ID, and every mediation partner's lines included.
Keep reading
- Privacy Policy and Data Safety Form for Android Apps: What Google Play Expects
A practical walkthrough of the privacy policy, Data safety form and account deletion rules on Google Play, including what ad and analytics SDKs mean for your declarations.
- Google Play Launch Checklist: From Signed Build to Production
A step-by-step checklist for publishing an Android app on Google Play: developer account, testing requirements, store listing, policy declarations and the first week after release.