App monetization

How to Set Up app-ads.txt and Fix AdMob Errors

What app-ads.txt is, how to create and host it on your developer website, the line format, and how to fix AdMob errors such as app-ads.txt not found.

MH AdX graphic explaining app-ads.txt setup on a developer website, the file format and common AdMob errors

app-ads.txt is a plain text file that lists every company authorized to sell ads in your mobile or CTV app. It sits at the root of the developer website named in your app store listing, and ad buyers check it before they bid, so a missing or wrong file costs demand.

The frustrating part is that the file's lines are rarely the problem. Most app-ads.txt errors trace back to the developer website in the store listing: a missing URL, a social page you can't upload to, or an old domain. This guide covers the format, where to host the file, how crawlers find it and how to fix each issue AdMob reports. It builds on our ads.txt guide for websites, which uses the same line format. If you run several ad networks in one app, our app monetization service shows how we help with demand and setup.

What is app-ads.txt and why does it matter?

app-ads.txt is the app version of ads.txt, an IAB Tech Lab standard that lets buyers confirm a seller may sell your inventory. Apps have no web domain of their own, so the file lives on the website your store listing points to.

app-ads.txt stops spoofing. Without a public list, anyone can claim to sell ads in a popular app and pass off cheap inventory under its name. With one, buyers compare the seller ID in each bid request with your list and skip the ones that don't match. The IAB spec covers apps from mobile app stores, connected TV app stores and other channels, so Roku, Fire TV and smart TV apps need it as much as Android and iOS apps do.

It also hits revenue directly. Google's AdMob help says ad sources that have adopted the standard only buy on apps with a verified file. That's why AdMob flags an app with a file problem as having revenue at risk.

app-ads.txt vs ads.txt

The two files share one line format, but they live in different places and buyers find them in different ways. The IAB app-ads.txt specification says the structure and content are the same as ads.txt for the web.

ads.txtapp-ads.txt
Inventory it coversWebsitesMobile apps and CTV apps
Where it livesThe root of the site that shows the adsThe root of the developer website in the store listing
How a buyer finds itFrom the page's domainFrom the store URL in the bid request, then the listing's developer website
Line formatAd system, account ID, DIRECT or RESELLER, optional TAG IDThe same
subdomain= variableSupportedIgnored
One file coversOne domainEvery app that lists the same developer website

If you run a website and an app on the same domain, you need both files side by side. They don't replace each other.

app-ads.txt file format, with an app-ads.txt example

Each line names one ad system and one account, using the same fields as ads.txt. Lines starting with # are comments.

FieldWhat it holdsRequired?
1. Ad system domainThe domain of the ad system, such as google.com for AdMob and Google demandYes
2. Publisher IDYour account ID in that ad system, such as an AdMob pub- IDYes
3. RelationshipDIRECT if you control the account, RESELLER if you let another company sell through itYes
4. Certification authority IDAn ID for the ad system from a certification body such as TAGNo

Here's an example based on the one in Google's help page. The domains and IDs are placeholders, so copy your real lines from each network:

# Authorized sellers for example.com
google.com, pub-0000000000000000, DIRECT
greenadexchange.com, 12345, DIRECT, d75815a79
silverssp.com, 9675, RESELLER, 496211

Here google.com is the ad system, pub-0000000000000000 is the publisher ID and DIRECT is the relationship. One file serves every app that lists the same developer website. You add each network once, not once per app. If you're still choosing where your app's demand comes from, our ad network vs ad exchange comparison shows how each one sells your inventory.

DIRECT or RESELLER: a worked example

Say your game uses AdMob mediation with two other networks. Your AdMob account is yours, so its line is DIRECT. A network where you signed up and get paid directly is also DIRECT, with your account ID on that network.

Now say that second network also resells your impressions through an exchange it works with. That exchange sees the network's account, not yours. So the network gives you a RESELLER line with the exchange's domain and the network's ID there. Copy both kinds of line exactly as each partner sends them, and never relabel a RESELLER line as DIRECT.

Keep only reseller lines you really use, though. Buyers cut paths they don't trust, as our guide to supply path filtering explains.

Version 1.1 of the standard also lets you add OWNERDOMAIN= with your own business domain, and MANAGERDOMAIN= when one partner manages your inventory. Neither replaces a seller line.

How to create app-ads.txt and set it up, step by step

Put a developer website in the store listing, create a text file with one line per ad network, upload it to that website's root and wait for each network to crawl it. Google's AdMob setup guide gives the same order.

1. Add a developer website to the store listing

Crawlers start from the store listing, not from your app. In Google Play Console, AdMob's help points to Grow users, then Store presence, Store settings and the store listing contact details. For Apple, it points to the marketing URL field. The app must be published before AdMob can verify the file, and AdMob notes that store changes can take up to 24 hours to detect.

Say your listing points to a Facebook page or a link-in-bio page. You can't upload a file to either, so the crawler will never find one. Fix the listing first.

2. Collect a line from every network

Copy the snippet from the app-ads.txt page of your AdMob account. If you use mediation, ask each mediated network and each bidding partner for its own lines. They're in each partner's help centre or dashboard.

3. Create the app-ads.txt file

Paste the lines into a plain text file named app-ads.txt, all lowercase. Use a plain text editor, not a word processor.

4. Upload it to the root of the domain

Upload the file so it opens at the root of your domain, for example https://example.com/app-ads.txt. Open that address in a browser. You should see plain text, not a login page, your homepage or a 404. AdMob's help says it can't crawl a file built in Google Sites, so use a host where you can upload a real file.

5. Wait for verification

AdMob says crawling and verifying can take up to 24 hours. You can ask for a fresh check in AdMob, but the status still needs time to update. Don't keep editing the file while you wait.

How crawlers find the file on your developer website

Crawlers take the developer URL from your store listing, cut it down to the host name and request the file at the root of that host, trying HTTPS first. The IAB spec tells them to drop a leading www. or m. and to fall back to the parent domain only when the subdomain has no file.

AdMob's help gives an example. If your developer website is https://help.example.com/game, it checks these addresses in order:

  1. The root of help.example.com over HTTPS
  2. The root of help.example.com over HTTP
  3. The root of example.com over HTTPS
  4. The root of example.com over HTTP

The path in the listing is ignored. Redirects within the same root domain are fine, and the ads.txt spec allows only one redirect to a different domain. What we'd do: a plain site on your own domain, with the file at its root and no redirects at all.

Buyers don't look up your app by name. Each bid request carries the store URL of your listing, and the IAB spec asks app stores to publish the developer URL, bundle ID and store ID as tags on every listing page. The crawler reads those tags, then fetches the file. The same spec asks crawlers to check each store listing no more than once a week, so a listing change takes longer to show up than a file change.

Changing your developer website

Moving to a new domain is where many apps lose demand for weeks. The IAB spec suggests keeping the old file live for an extended period, with 30 days given as a guide, and hosting the same file on both domains while crawlers catch up. Update the store listing, copy the file to the new domain, and only then retire the old one.

How to fix app-ads.txt not found and other AdMob errors

Most app-ads.txt AdMob issues have three causes: the store listing points to the wrong website, the file isn't at that website's root, or a line has a typo. AdMob shows a green status for a verified file, grey when it finds no file and red when the file has a problem.

Issue AdMob reportsUsual causeFix
The app-ads.txt file isn't foundNo file at the root, or the listing shows another websiteUpload the file to the listed domain, open it in a browser, then wait up to 24 hours
Developer website missing from the store listingThe listing has no website, or only an emailAdd the website in Play Console or App Store Connect and wait for the store to update
Developer website URL isn't validA URL the crawler rules can't turn into a file pathUse a normal https:// address on a domain you control
Hosted on an unsupported subdomainThe file is on a subdomain the crawler doesn't checkHost it at the address AdMob shows, redirect to it, or change the developer website
File not formatted correctlyA missing or mistyped publisher ID, or admob.com instead of google.comPaste the snippet from your AdMob account again, unchanged
robots.txt blocks the crawlerA rule that blocks all bots or the file pathAdd User-agent: Google-adstxt followed by an empty Disallow: line. If the file redirects to another host, check that host's robots.txt too
Crawler keeps crawling the file from the wrong linkAn old or unexpected URL is still being checkedFind the exact crawled URL in the detailed status in AdMob and redirect it to your live file
No status shownNo ad requests from the app in the last 7 days, or the app isn't verified yetCheck that the app is live and requesting ads

If you changed the developer website recently, AdMob's FAQ says checks can take longer and suggests waiting a week before asking for more help. One case surprises people: an unknown app shows up in your AdMob account. AdMob says this means another developer listed your website and the file is working. You can block that app.

Mediation, sellers.json and CTV apps

Every network that can sell your app inventory needs its own line, and the more partners you add, the easier one is to miss. A partner without a line loses bids from buyers who check the file.

  • Mediation: list every ad source that can win an impression, not only AdMob. When you add or remove a source, update the file the same day.
  • Resellers: if a partner resells your inventory through another exchange, it should give you a RESELLER line for that exchange.
  • sellers.json: buyers match the IDs in your file against each ad system's sellers.json, which lists the sellers it works with. An ID missing from the partner's sellers.json looks like an error to them. Here's how to find and read your seller entry.
  • CTV: TV app stores also list a developer website, and CTV buyers check the file the same way. Our guides to CTV monetization for streaming apps and how to monetize a Roku channel show where the file fits in a TV launch.
Tip: give the file one owner. Most errors start when a developer, an agency and an ad partner each edit it without telling the others.

app-ads.txt checklist before you launch or add a network

Run this list every time you publish an app, change the store listing or add an ad source. It takes ten minutes and catches nearly every status AdMob can show.

  • Each store listing (Google Play, App Store, every TV store) shows the same developer website, on a domain you control.
  • https://yourdomain.com/app-ads.txt opens as plain text in a private window, with no login page or homepage in the way.
  • Your AdMob line is pasted unchanged from your AdMob account, with google.com as the domain.
  • Every mediated network and bidder has its own lines, including RESELLER lines it sent you.
  • robots.txt doesn't block the file or the Google-adstxt crawler.
  • Networks you've dropped are gone from the file.
  • After 24 hours, AdMob shows a green status for each app.

Frequently asked questions

Is app-ads.txt necessary?

app-ads.txt isn't a law, but you need it for any app that earns from programmatic ads. Ad sources that have adopted the standard only buy on apps with a verified file, so going without one shrinks the demand competing for your inventory.

Where do I put the app-ads.txt file?

At the root of the developer website in your app's store listing, so it opens straight after your domain name. It never goes inside the app.

Do I need a website for it?

Yes. The file must sit on a website you control, and that website must be in the store listing. A one-page site on your own domain is enough, as long as you can upload a text file to its root.

How long does AdMob take to verify the file?

AdMob says up to 24 hours after it can reach the file. If you recently changed the developer website in the store, it takes longer, and AdMob suggests waiting a week before asking for help.

Can one file cover several apps?

Yes. Every app that lists the same developer website shares one file, so add each network account once and it covers all of them.

How often should I update app-ads.txt?

Update the file the same day you add or remove an ad source, and whenever a partner sends new lines. Beyond that, review it once a quarter against your mediation setup. Stale lines don't break anything on their own, but they make it harder to see who really sells your inventory.

How can I check that my app-ads.txt works?

Open the file's address in a browser first. Then check your AdMob account, which shows a status for each app, and use the validation page your other networks offer in their dashboards.

Next step: a clean file and more demand

Check the developer website in your listing first, then the file, then the lines. A verified file lets every buyer who checks it bid on your inventory, and it's one of the first things we look at when an app publisher asks for more demand. Want a second opinion on your file, your mediation stack or which premium partners to add? Read about our app monetization support or contact MH AdX to talk it through.

Free tools

Is your site ready for Google AdX?

Check your AdX eligibility

Our current screening asks for $1,000 or more in two separate months of the last three, and invalid traffic under 10%.

Free AdX readiness checklist (PDF)

The 25 checks we run before recommending a site for AdX through MCM. Enter your details and download it straight away.

We will only use your email to reply about your site.

WhatsApp