RORK LABJP
RORKMAX — Rork Max generates pure Swift instead of React Native, enabling true native apps across iPhone, iPad, Watch, TV, Vision Pro, and iMessageAPPLE — Rork's 2026 direction has a clear theme of native empowerment across the Apple ecosystemEXPO — Standard builds run on React Native and Expo, so you're left with a real project structure and code you can keep working onFUNDING — Rork recently raised $15M and now sees over 743,000 monthly visits with 85% growthPRICING — Rork is free to start, with paid plans from $25/month and Rork Max at $200/monthCROSS — Rork builds iOS, Android, and web from a single prompt, finished off with a bit of follow-up tweakingRORKMAX — Rork Max generates pure Swift instead of React Native, enabling true native apps across iPhone, iPad, Watch, TV, Vision Pro, and iMessageAPPLE — Rork's 2026 direction has a clear theme of native empowerment across the Apple ecosystemEXPO — Standard builds run on React Native and Expo, so you're left with a real project structure and code you can keep working onFUNDING — Rork recently raised $15M and now sees over 743,000 monthly visits with 85% growthPRICING — Rork is free to start, with paid plans from $25/month and Rork Max at $200/monthCROSS — Rork builds iOS, Android, and web from a single prompt, finished off with a bit of follow-up tweaking
Articles/Business
Business/2026-05-21Intermediate

Two Months Without Opening AdMob Every Day — A Four-Tier Slack Setup for My Rork Apps

I have been shipping iOS and Android apps since 2014, and opening AdMob first thing in the morning had become a daily ritual. Earlier this spring I let it go and rebuilt the workflow around a four-tier Slack notification setup. Two months in, here is what I learned, including the misfires that took me three weeks to iron out.

Rork504AdMob69Slack2monitoring3indieoperations7

import { ArticleImage } from "@/components/ArticleImage";

This is Masaki Hirokawa — artist and indie creator behind a portfolio of mobile apps.

Since 2014 I have been shipping iOS and Android apps, and opening AdMob first thing in the morning had become a quiet daily ritual. Ad revenue has carried the business that grew into roughly 50 million cumulative downloads, so checking the dashboard never felt optional. Earlier this spring I decided to let go of that habit. Instead, I rebuilt the workflow around a four-tier Slack notification system, with the goal of touching nothing unless the numbers genuinely asked for it. Two months in, the experience has been quietly positive, so I wanted to write down how I got there, including the misfires it took me three weeks to iron out, using the wallpaper apps I update in Rork as the running example.

Why I wanted to stop looking every day

Honestly, the AdMob graphs have a hard-to-shake pull. A 10% day-over-day move would set off a small reaction in my head, an eCPM dip would steal twenty minutes of focus, and I would usually end the morning concluding that it was just an advertiser-side ripple. Those small loops were adding up.

What pushed me over the line was an offhand comment from one of my kids, who lives apart from me: "Dad, you have been staring at screens a lot lately." It was half a joke, but the other half landed. The apps are my livelihood, and they are also the work I want my children to remember as something built by hand. Spending my mornings reacting to graphs was slowly drifting away from that intention.

Both of my grandfathers were temple carpenters, and growing up watching them work left me with a sense that you should respect the grain of the material and add a hand only when needed. If I take ad metrics as a material with its own grain, opening the dashboard every day is the opposite of that instinct.

A four-tier Slack setup

If you stop looking every day, you need a mechanical way to separate "act on this immediately," "worth a glance today," "review next week," and "ignore." I ended up routing everything into four Slack channels.

#admob-p0 only receives revenue-collapse signals. The exact rules are: daily revenue 40% or more below the 14-day median, fill rate under 70% for 24 hours, or impressions 60% or more lower than the same hour the previous day. When this channel pings, I drop what I am doing. Over two months it fired three times, and every one of them was a real issue.

#admob-p1 catches eCPM swings and unit-level anomalies — eCPM moving more than 25% from the 7-day mean, or a specific ad unit suddenly hitting zero impressions. I expect two or three pings a week, and I make sure to look within a day.

#admob-p2 is for baseline drift — 7-day average down 15% or more compared to the prior 28-day window, or the Android-to-iOS revenue ratio meaningfully shifting. I made it a rule to read this channel only once a week, Friday morning.

#admob-noise quietly catches everything that does not meet the thresholds above. I do not read it. The one thing I do watch is whether it ever goes completely silent for a week — that is usually a sign the detector itself broke, not that the metrics suddenly stopped moving.

After two months running the tiers, aside from the three #admob-p0 events, my hands almost never had to move. Put another way, more than 90% of my old "every morning" checks turned out to be checking I did not actually need.

Three misfires I had to fix

The system did not work cleanly from day one. The first three weeks were full of false positives and notification fatigue.

The first misfire was setting #admob-p0 too tight. I started with a 20% threshold, and Friday's advertiser-budget exhaustion cycle would set it off every single week. Opening Slack started to feel heavy. I relaxed the threshold based on a simple question — would I actually act on this? — and the channel settled down.

The second misfire was firing the same event into three channels at once. A 30% eCPM dip would set off #admob-p1 (eCPM swing), #admob-p2 (7-day drift), and #admob-noise simultaneously. I added a small suppression layer so lower-priority channels drop signals already represented in higher-priority ones.

The third misfire was time-zone drift. The AdMob reporting API I use from my Rork apps returns UTC, my Slack messages were stamped in JST, and my own habit is JST mornings. "Yesterday's number" started to mean three different things. I had two choices: align everything to JST, or label every message clearly with "UTC basis." I chose the former.

It naturally led into letting Claude in Chrome handle the rounds

Once I committed to not looking every day, the next move appeared on its own. I started letting Claude in Chrome walk the AdMob dashboards on my behalf and leave me a written summary.

Notifications, no matter how well tiered, lose context. A "‑18% eCPM dip on interstitial" alert does not tell me whether ad rates in India simply softened for a day, or whether I should be migrating the unit to a different format. To answer that, somebody has to open the dashboard and read the supporting screens.

So once a week now, Claude in Chrome makes the rounds across specific AdMob reports and leaves me a short Markdown summary. The only things I read are that Markdown and the #admob-p0 to #admob-p2 channels. Even that is arguably too much, but the first goal is to make "not opening the dashboard every day" a habit that sticks.

The architecture is still being tuned, but one thing is clear: handing the rounds to AI only works if you have already decided not to look every day. Reverse the order and you just double-check the same numbers twice.

What changed in the numbers

I do not trust pure intuition for things like this, so I kept a few measurements.

First, how often I opened the AdMob dashboard. A rough count from my Chrome history showed about 28 visits per week before the switch, and an average of four visits per week across the two months after. Friday's #admob-p2 review, the three times #admob-p0 fired, and a monthly retrospective — that roughly accounts for it.

Second, the effect on revenue. Year over year, the same months are essentially flat, moving within plus or minus 3%. At minimum, there is no correlation showing that "not checking the dashboard daily" drags revenue down. If anything, the metrics have been steadier than during periods when I would impulsively tweak ad units.

Third, what I replaced the time with. Most of it went into updating the artwork for the wallpaper apps and prototyping in Rork. That feels closer to the original intention — leaving my kids the memory of a parent who actually built things — than reacting to graphs ever did.

What I want to extend next

Looking back, monitoring really is a question of sensitivity. Some metrics deserve a daily look; others are fine on a monthly review. AdMob daily variance, for me, turned out to be in the latter group.

The next thing I want to apply this approach to is Crashlytics — which already runs through #crashlytics-p0 — and App Store review monitoring. Reviews are still mostly manual on my side, and I plan to start by having Claude in Chrome read them once a day, then layer the tiering on top.

Building the system carefully and then stepping back feels close to how my grandfathers worked as carpenters. Before adding a hand, identify what does not need to be touched. After two months running the new setup, that finally clicked for me when it comes to ad metrics too.

If you are also a solo developer running AdMob, I hope this gives you a small nudge to question the "look every day" habit. Thank you for reading.

Share

Thank You for Reading

Rork Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.

  • Copy-paste ready implementation code
  • New advanced guides published daily
  • $5/mo or $10 for lifetime access
View Membership →

If you found this article helpful, a small tip ($1.50) would mean a lot to us. Your support helps keep this site ad-free and covers server and hosting costs.

Related Articles

Business2026-05-23
Minimal Customer Support Architecture for Solo Rork Devs — Running Inquiries for Multiple Apps Alone
The minimum-viable customer support stack I run as a solo developer maintaining a dozen apps with 50M cumulative downloads — in-app form with auto-attached diagnostics, Gmail filtering, reply templates, and the escalation rules that keep me under thirty minutes a day.
Business2026-07-05
When Your AdMob Earnings Suddenly Get Deducted: Preventing Invalid Traffic as a Solo Developer
Invalid traffic deductions in AdMob are unsettling because the cause is rarely obvious. From the perspective of running several apps solo, here is a minimal setup that prevents the most common accidents, plus how to respond when a deduction actually happens.
Business2026-06-28
Don't Pay Out a Rewarded Ad on the Client's Word Alone — SSV Verification for a Rork (Expo) App on a Worker
Trusting the client-side 'reward earned' callback alone invites double-grants and spoofing. Here is how to wire AdMob server-side verification (SSV) into a Rork-generated Expo app, verify the signed callback on a Cloudflare Worker, and make payouts idempotent with transaction_id.
📚RECOMMENDED BOOKS
Build a Large Language Model (From Scratch)
Sebastian Raschka
LLM Dev
Prompt Engineering for LLMs
Berryman & Ziegler
Prompting
AI Engineering
Chip Huyen
AI Eng
* Contains affiliate links
See all →