Every small mobile game team eventually runs into the same question:
Why did ad revenue change yesterday?
Was it because eCPM dropped, impressions dropped, fill rate changed, one country performed worse, or one ad source started underperforming?
I am building a small tool called eCPM Bazaar to make that diagnosis easier for mini-game and mobile app developers.
The first version focuses on a simple workflow:
- collect ad monetization report data
- normalize revenue, impressions, eCPM, fill rate, country, placement, and ad source
- compare the change by dimension
- surface possible causes when revenue drops
The current version supports demo mode and a TopOn reporting API integration. The long-term goal is to support more sources such as AdMob, AppLovin MAX, Unity LevelPlay, and CSV exports.
Why this matters
A lot of ad dashboards show numbers, but small developers still have to manually answer questions like:
- Did revenue drop because eCPM fell or because impressions fell?
- Is the issue global or only in one country?
- Is one placement causing most of the loss?
- Did fill rate drop while eCPM stayed stable?
- Is the problem tied to a specific ad source?
For example, if US rewarded video revenue drops 25%, but eCPM is stable and fill rate falls from 78% to 54%, the first thing to check is probably fill, waterfall, floor settings, or platform status rather than pricing.
What I am validating
I am not claiming this will magically increase revenue. I am trying to validate whether a clean diagnosis workflow is useful for small teams that do not have a dedicated data analyst.
If you monetize a game or app with ads, I would love feedback:
- When revenue drops, what do you check first?
- Do you care more about eCPM, fill rate, match rate, country mix, or placement performance?
- Would a simple daily alert be useful if it explained the most likely driver of the change?
If this resonates, leave a comment. I am looking for a few developers with real ad monetization data to test the workflow and improve the diagnosis logic.
Top comments (0)