Baren81 Devlog

I Uploaded One File. Only Apple Could Not Find It.

Devlog card: "One file. Only Apple could not find it" — The file was fine. The store was reading a different field.

Written by

in

Call the Cat: Galaxy — devlog

TL;DR: The file was fine. AdMob reads a different field on each store, and on Apple it reads the marketing URL — which pointed at a site that did not have the file.

One address, and only one store could not find it

To run ads you have to put a single text file called app-ads.txt on your own website. It is one line long. It is a public statement that a given ad account is allowed to sell ads for your app, and it exists so buyers can filter out impersonators.

I made the file and uploaded it. Google Play went green. Apple kept showing “app-ads.txt file not found.”

Same file, same contents, same ad account. Only one side could not find it.

My first suspect was the file. Typo? Wrong extension? Wrong folder? I opened it several times. The file was fine.

AdMob looks in a different place for each app

Where does AdMob look? It goes to the developer website address written in your store listing, appends /app-ads.txt, and crawls that.

The catch is that the field it takes that address from is not the same on every store.

Google has one website field. Apple has two, and AdMob reads the marketing one.
Google has one website field. Apple has two, and AdMob reads the marketing one.

Google Play has one website field. The domain that has the file was in it, so it matched.

Apple has a support URL and a marketing URL, separately. I had put runaria81-eng.github.io — the domain that has the file — in the support URL, and AdMob reads the marketing URL. My marketing URL was barendevlog.com, this blog, and it did not have the file.

Google was not right because I did it better. It was right because there was only one field, so there was nowhere for it to drift.

What I actually measured

I stopped guessing and sent requests to both addresses.

Address Response
https://runaria81-eng.github.io/app-ads.txt — the support URL 200 · text/plain · 59 bytes
https://barendevlog.com/app-ads.txt — the marketing URL 404 · the blog’s not-found page answered instead

AdMob’s own crawl record said the same thing. For the marketing domain it had failed on both https and http; for the support domain it reported that it had found and checked the file.

Only at this point was it settled that this was an address problem and not a file problem. Everything before that was my guess.

There were two fixes, and I nearly picked the slow one

Put the file on the marketing-URL domain Change the marketing URL
How fast it takes effect About a day — AdMob re-crawls app-ads.txt roughly daily (the console showed the last crawl 3–8 hours earlier) Up to 7 days — the console states it can take up to 7 days to detect a domain change on the App Store
App resubmission Not needed A shipped app may need a new version
Scope Every app using that domain One app at a time

Changing the address looked faster at first. It was the opposite. Store-listing changes take up to a week to be detected, and the file gets re-crawled within a day.

Putting the file on the marketing-URL domain was also the more correct shape to begin with. barendevlog.com is my actual marketing site — this one.

I fixed it in under a day without moving the file

The blog runs on WordPress, so dropping a file into the web root meant going into hosting. Instead I used the redirect plugin that was already installed and added one rule.

/app-ads.txt  →  301  →  https://runaria81-eng.github.io/app-ads.txt

Before touching anything I opened the official documentation and read whether this is even allowed. Google Ad Manager’s help says only one redirect off the original root domain is followed, and that if a second redirect is involved the file is not crawled — even to the same domain. AdMob’s help adds that the destination host’s robots.txt can affect the crawler and that the Google crawler fetches both http and https, so I checked the destination’s robots.txt and both schemes.

Then I verified it with real responses.

Request Result on 2026-09-08
https://barendevlog.com/app-ads.txt 301 → final 200 · text/plain · 1 hop
https://barendevlog.com/app-ads.txt 301 → final 200 · 1 hop
https://www.barendevlog.com/app-ads.txt 301 → final 200 · 1 hop
https://runaria81-eng.github.io/robots.txt 404 — no robots.txt, so nothing there blocks the crawler

One hop is the whole point. Google’s limit is a single redirect leaving the domain. A second one voids it. And because AdMob crawls http and https both, both have to be checked.

Copy this — three lines to check after you upload it

Does it open, which field does the store read, how many hops.
Does it open, which field does the store read, how many hops.

Run these three in order after uploading the file. Stopping at line one is exactly the mistake I made.

Order What you check Passing means
1 Does the file actually open? Type that address yourself and see one line of text. It must open without a login
2 Is that domain in the field the store reads? Google: the website field in the store listing. Apple: the marketing URL. AdMob does not read the support URL
3 If you used a redirect, is it one hop? Only one redirect off the domain is allowed. Check http and https both

Give the AI this one sentence when you hand it the job.

After uploading app-ads.txt, send a real request to the developer website address
written in the store listing and show me that it returns 200 and text. If you
could not check, say exactly that: "I only uploaded the file and did not verify
the address the store actually reads."

With that sentence, “I uploaded it” comes back split into how far it actually went.

The same shape as the previous post

In the previous devlog I wrote that “it is in the config file” and “it is in the app” are two different sentences. This is the same shape happening outside the store console.

“I uploaded the file” and “it is where the store looks” are different sentences. The first one ends in my hands. The second depends on where someone else’s system is pointed. Skip the gap between them and you will keep re-opening a file that was never the problem.

At a glance

Item Detail
Symptom Same file: Google fine, Apple reports “not found”
Cause AdMob reads a different field per store. On Apple it is the marketing URL
Measured Direct requests to both domains — 200 on one, 404 on the other
Fix One 301 redirect on the marketing-URL domain. No app resubmission
Verified 2026-09-08 — http, https and www all reach 200 in one hop, and the destination has no robots.txt
Not confirmed The AdMob console flipping to “verified” only happens on the next crawl
Lesson “I uploaded it” and “it is where they look” are two different sentences

Solo dev of Call the Cat, shipped after 178 days
on Google Play and Steam.
The sequel, Call the Cat: Galaxy, is now on the App Store — still building it in public.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *