Blog
How to Host app-ads.txt Without a Website
Published: Updated: 7 min read
Why must app-ads.txt live at the root?
app-ads.txt must sit at the exact ROOT of the domain declared in your store listing's developer website field: https://yoursite.com/app-ads.txt. A file placed in a subdirectory (e.g. /files/app-ads.txt or /ads/app-ads.txt) is considered invalid and won't be found by ad networks — standard crawling only checks the root path.
On Android, this address must match exactly the developer website field you entered on your Play Console store listing: AdMob and other ad networks crawl the file at the domain you declared. If the declared domain and the domain hosting the file differ (say, the listing says yoursite.com but the file lives at anotheraddress.com), verification fails.
On iOS, Apple has no field equivalent to Play Console's; AdMob instead uses the 'Marketing URL' field on the App Information tab in App Store Connect. So regardless of platform, the answer to "which domain will I host on" and "which domain do I enter in that field" must be exactly the same.
Without a website: Google Sites and GitHub Pages
Google Sites publishes your pages as content built in its own editor; it doesn't let you place a raw .txt file at your domain's root as-is — attaching a file turns it into an embedded attachment link, not a root file at https://yoursite.com/app-ads.txt. So despite its easy setup, Google Sites is not a technically viable option for app-ads.txt.
GitHub Pages works, but it requires setup. If you create your repo with the exact name username.github.io, the repo root maps directly to that address, and your /app-ads.txt file becomes a genuine root file — no need to buy an extra domain. If you instead use an ordinary project repo (e.g. username.github.io/myapp), the file publishes under a subpath and fails the root requirement — in that case you'd need to connect a domain you already own to Pages as a custom domain.
Whichever path you choose, the address you enter in the store listing's developer website field must exactly match the root domain where the file actually lives — if you used username.github.io, you need to enter that exact address in the store listing too; it may not look professional, but it works technically.
The hosted approach: a Vibeloy subdomain
Generating the app-ads.txt content on Vibeloy is free: just enter your AdMob publisher ID (pub-XXX), and with a free account you can copy the file's full content. If you don't have your own website, automatically publishing the file at the root of an app-specific subdomain (e.g. yourapp.vibeloy.dev/app-ads.txt) is included in the premium plan.
All you need to do is enter that subdomain address in your store listing's developer website field; since the file already sits at the root of that address, the matching rule is satisfied automatically. No repo to create, no file to upload manually, no DNS to configure.
AdMob generally re-crawls to verify a newly added or updated app-ads.txt file within about 24 hours; the warning fully clearing from your console can take a few more days on top of that. During that window, all you can do is make sure the file stays at the root, accessible, and correctly formatted.
Step by step: hosting your app-ads.txt file
1. Gather your AdMob publisher ID (pub-XXX, found in the AdMob console under Settings > Account information) and the details of any other ad networks you use; the file's content needs to be settled before the hosting address.
2. Decide on your hosting option: if you're comfortable with GitHub Pages, use a username.github.io repo or connect your own domain as a custom domain; if you'd rather avoid technical setup, use a hosted subdomain solution instead.
3. Publish the file at the exact root of your chosen address, and enter that same address in both the Play Console developer website field and the 'Marketing URL' field in App Store Connect (for iOS).
4. After publishing, open the address directly in a browser and confirm the file renders as plain text — not an HTML page, not a 404 — then keep an eye on whether the warning in the AdMob console clears over the next few days.
If you'd rather not walk through each of these steps yourself, Vibeloy's free app-ads.txt generator produces a correctly formatted file in minutes; if you want it automatically hosted at the root of your own subdomain, that's included in the premium plan.
Frequently asked questions
- Can I publish app-ads.txt on a subpage?
- No. The file must sit exactly at the domain root: https://yoursite.com/app-ads.txt. A file placed under a subpath like /files/app-ads.txt is considered invalid and won't be found by ad networks.
- Can I host app-ads.txt with Google Sites?
- No. Google Sites publishes pages built in its own editor and doesn't let you place a raw .txt file at the domain root; even attaching a file doesn't make it a root file. You'll need GitHub Pages or a hosted subdomain solution instead.
- What does it take to actually publish the file at the root on GitHub Pages?
- If you create your repo with the exact name username.github.io, the repo root maps directly to that address, with no need to buy an extra domain. With an ordinary project repo, the file publishes under a subpath, so you'd need to connect your own domain to Pages as a custom domain instead.
- Must the store-listing domain match the domain hosting the file?
- Yes, they must match exactly. AdMob and other ad networks crawl the file at the domain declared in your store listing (the developer website field in Play Console for Android, the 'Marketing URL' field in App Store Connect for iOS); a file hosted on a different domain can't be verified.
- How long does AdMob verification take?
- AdMob generally re-crawls to verify a newly added or updated file within about 24 hours; the warning fully clearing from your console can take a few more days. There's no guaranteed way to speed this up.
Related tool
Generate your free app-ads.txt file