An app with ads implemented sat at 0 requests and ¥0 revenue in AdMob’s reports.
No matter how many times I reread the code, I couldn’t find anything wrong with the implementation. To give you the conclusion up front: the cause wasn’t the code but three overlapping gaps in the ad-serving configuration. On top of that, each of the three happened for its own separate reason, and the setup was such that fixing one still left revenue at 0 as long as the other two remained.
1: The UMP fail-closed design was working exactly as intended
I had implemented the EU consent screen (UMP) with a fail-closed design: if consent status can’t be confirmed, it errs on the side of not showing ads (I wrote about this in detail in another post).
I had ported this design over from another app, where it was working without issues. But right after implementing it, not a single ad showed up. No error on the app side. Nothing unusual in the logs. The banner slot just showed nothing.
The cause was that I hadn’t created a single GDPR consent message in the AdMob console. Without a consent message configured in the console, the UMP SDK can’t correctly determine whether consent was obtained. The fail-closed design correctly read that as “no consent” and stopped the ads, exactly as designed.
The implementation was correct. The configuration was just incomplete. And what made this case nasty is that looking at the implementation-side logs gives you no way to notice a missing console setting.
2: AdMob and the store weren’t linked in the first place
Even after fixing the first one, revenue was still ¥0.
The AdMob dashboard has a per-app setting called “App store details.” It had been left blank. That meant the app registered in AdMob and the app actually published on the Play Store weren’t tied together at the system level.
Going through the “Add app” flow, searching for the published package name, and relinking it fixed the issue. This too was a setting that lives entirely inside the AdMob console, unrelated to the app’s code or build configuration.
3: The website field pointed to a domain that returned 404
After fixing two of them, revenue was still ¥0.
The cause was an app-ads.txt verification error. app-ads.txt is a text file declaring who is authorized to sell your ad inventory, and AdMob checks it by crawling the app’s official website.
The problem was that the website field in Play Console’s “Store settings” still pointed to an old domain. I had changed my GitHub account name at one point, which changed the GitHub Pages domain it referenced, and the old URL had been returning 404 ever since. (Another casualty of that account rename, where my terms pages all went 404 and blocked a review submission, is covered in a separate post.) Crawling a 404 URL, AdMob couldn’t find app-ads.txt and kept failing verification.
I fixed it to the correct domain and confirmed the change took effect immediately.
What the three have in common
All three showed the same symptom: “ad revenue ¥0.” But the causes were in
- No consent message configured in the AdMob console
- Forgetting to link AdMob to the store
- A broken reference in Play Console’s website field (a knock-on effect of an unrelated domain change)
three unrelated places. Fixing any one of them doesn’t change the symptom (¥0 revenue) as long as the other two remain. When “I fixed it and nothing changed” drags on, you start to suspect the fix itself was wrong, but that wasn’t the case here. Several independent causes just happened to produce the same symptom.
And none of the three are visible from the app’s code at all. Not flutter analyze, not static analysis, not even testing on a real device catches this kind of configuration gap. There was no way to notice other than actually going through the AdMob console and Play Console settings screens one by one with my own eyes.
Current status
I’ve fixed all three, but as of writing, AdMob’s reports still show 0 requests and ¥0 revenue. After you fix the settings, it takes time for the crawl to actually happen and for it to show up in the reports. There’s still a lag between “fixed” and “earning.”
To be honest, this isn’t a “fixed it and made money” story. It’s a record of “fixed it, and the results still haven’t shown up.” When they do, I’ll write about it again.
Summary
- When ad revenue is ¥0, it’s worth suspecting the console settings before the code
- Even with the same symptom (¥0 revenue), the causes can exist independently in multiple places. If fixing one changes nothing, that doesn’t necessarily mean the fix was wrong
- Settings in both AdMob and Play Console can’t be detected statically from the app’s code. The only option is to look at the screens directly on a regular basis
- A change you made in the past for a different purpose (like a domain change) can ripple out somewhere else later