Skip to content
AppFoyer
Start free

Guides app-ads.txt

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/myapp is checked at example.com/app-ads.txt.
  • One subdomain level. The crawler “probe[s] up to one subdomain level from the developer website”. www. and m. count as the domain itself.
  • Served plainly. 200 OK, Content-Type: text/plain, no redirect, no login, nothing in robots.txt blocking 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.

  1. Create a project in the Firebase console and install the Firebase CLI.
  2. In an empty folder, run firebase init hosting and keep the default public directory.
  3. Put your app-ads.txt in public/, next to the generated index.html.
  4. Run firebase deploy --only hosting.
  5. Set https://your-project.web.app as 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