Hosting app-ads.txt when you have no website
What the crawler actually needs, three ways to give it a host without building a site, the redirect traps on each, and how to confirm it works.
You do not need a website, only a hostname you control that serves /app-ads.txt as plain text with HTTP 200 and no redirect. Put that address in your store listing's developer website field — the Marketing URL on the App Store — and the crawler reads the file there. AdMob names Firebase Hosting as acceptable.
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.
Checked 12 October 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.
You do not need a website, only a hostname you control that serves /app-ads.txt as plain text
with HTTP 200 and no redirect. Put that address in your store listing’s developer website field
— the Marketing URL on the App Store, the Website under Store listing contact details on Google
Play — and the crawler reads the file there.
AdMob says this outright: “If you don’t have a suitable website that allows the uploading of an app-ads.txt file at the root level, you can use Firebase Hosting to host your app-ads.txt file.” Platform hosting is the expected answer, not a workaround.
What the crawler actually needs
The crawler does not look your app up by package name. It takes the developer website from your
store listing, keeps the hostname, and fetches /app-ads.txt at the root of it. AdMob’s rules:
- Root, not a path. A listing pointing at
example.com/myappis checked atexample.com/app-ads.txt. - One subdomain level. The crawler “probe[s] up to one subdomain level from the developer
website”.
www.andm.count as the domain itself. - Served plainly.
200 OK,Content-Type: text/plain, no redirect, no login, nothing inrobots.txtblocking it.
So the job is: one address that will not move, serving one text file, correctly, for years. The three options below all do that; they differ in how much you maintain.
Option 1: Firebase Hosting
The one AdMob names. A free Firebase project gives you a hostname such as your-project.web.app.
- Create a project in the Firebase console and install the Firebase CLI.
- In an empty folder, run
firebase init hostingand keep the defaultpublicdirectory. - Put your
app-ads.txtinpublic/, next to the generatedindex.html. - Run
firebase deploy --only hosting. - Set
https://your-project.web.appas the developer website in each store listing.
The trap: if you later connect a custom domain and choose to redirect the web.app address to
it, the address in your listing now answers with a redirect. Either keep the listing on the address
that serves the file directly, or update the listing to the new domain.
Option 2: GitHub Pages or another static host
Any static host works if the file ends up at the root of the hostname you declare.
On GitHub Pages that detail matters: a project site lives at username.github.io/repo/, but the
crawler only checks username.github.io/app-ads.txt. The file has to be in the user site — the
repository named username.github.io — or the project needs its own custom domain.
The same redirect trap applies: once a custom domain is configured, GitHub Pages redirects the
github.io address to it. Declare whichever address serves the file without a hop.
Option 3: a hosted compliance page
If you also need a privacy policy, support page or account-deletion URL — and an app with ads almost
always needs the first — the same host can serve all of them. That is what AppFoyer does: each app
gets its own subdomain that serves app-ads.txt as plain text with no redirect, alongside the pages
the stores ask for. AdMob reports “app-ads.txt file found and verified” for apps on both stores whose
developer website is an AppFoyer address (checked October 2026). We have no crawl result of our own
from other ad networks yet.
Check it before the crawler does
curl -i https://your-host.example/app-ads.txt
You want HTTP/2 200 (or HTTP/1.1 200 OK), content-type: text/plain, no location: header,
and your lines in the body. A 301 or 302 here is the most common invisible failure.
Then wait. AdMob says “it can take up to 24 hours for AdMob to crawl and verify your app-ads.txt files”. Its status is under Apps → View all apps → app-ads.txt; if it still says not found after a day, the not-found guide goes through the causes in order.
The authoritative sources
- Set up app-ads.txt — AdMob Help. The Firebase Hosting sentence, the root and subdomain rules and the 24-hour figure come from this page.
- Understand app-ads.txt file statuses — AdMob Help. Where the status lives and what each one means.
- ads.txt / app-ads.txt specification — IAB Tech Lab.