Verifying app-ads.txt for AdMob, step by step
AdMob keeps showing an app-ads.txt warning until three things line up: your developer website, the file on it, and the Play listing. Here is how to connect them.
If your app shows ads through AdMob, sooner or later you will see a warning that your app-ads.txt file could not be verified. Ads still serve, but unverified inventory can earn less, and the warning does not go away by itself.
app-ads.txt is a small text file that says which ad networks are allowed to sell your app's inventory. AdMob finds it through a chain:
- The developer website field on your Google Play listing
- The root of that website
- A file named
app-ads.txtat that root
All three have to line up.
Step 1: Put the file at the root of your site
Create app-ads.txt with the line AdMob gives you (AdMob > Apps > View all apps > app-ads.txt). It looks like this:
google.com, pub-0000000000000000, DIRECT, f08c47fec0942fa0
With Astro, Next.js or most static hosts, dropping the file in the public folder is enough. Open https://your-domain/app-ads.txt in a browser and check that it loads as plain text, with no redirect and no HTML around it.
Step 2: Point the Play listing at that domain
In the Play Console, go to Store presence > Store settings > Store listing contact details and set the website to the same domain, for example https://kklabs.vercel.app. Save and publish the change.
This step is the one most people miss. AdMob does not search for your file; it only follows the website on the listing.
Step 3: Ask AdMob to check again
Back in AdMob, open the app-ads.txt tab and choose Check for updates. The crawler can take anywhere from a few hours to a day to pick up the change.
Common reasons it still fails
- The file is on
www.but the listing points to the bare domain, or the other way round - The host serves the file with a redirect
- The publisher ID has a typo or a missing
pub-prefix - The listing change was saved but not published
One file can cover every app you publish under the same developer account, which is why it lives on the studio site rather than on each app's page.
