Is my app dead, or is my tracking broken?

Revenue or traffic fell off a cliff. Rule out the boring causes first: expired keys, late reports, removed tags. Then set up alerts that tell them apart.

By Torstein · · 5 min read

On this page
  1. First: is the data late?
  2. Second: is the connection alive?
  3. Third: did a release break the tags?
  4. Fourth: is the spike real?
  5. And sometimes, nothing tells you at all
  6. Getting warned instead of checking

A chart drops to zero. Your stomach drops with it. Half the time, nothing happened to the product: a key expired, a report hasn't arrived yet, or a release shipped without the analytics tags. The other half, something really broke, and every day you don't notice costs money.

This post is a checklist for telling the two apart, and a way to get warned about both without checking dashboards every morning.

First: is the data late?#

Every source has a delay, and it's different for each:

So "yesterday is zero" is normal for some sources on some days. Before reading anything into the last two days, check what date each source actually runs through.

Second: is the connection alive?#

The quiet killers:

  • Expired or revoked keys. A rotated API key or a removed team member can stop a sync without anyone being told.
  • Permissions changed. A Google account losing access to a GA4 property looks exactly like zero traffic.
  • Agreements not accepted. Store dashboards sometimes block report access until someone accepts new terms.

If one source stopped and the others carry on, it's almost always the connection.

Third: did a release break the tags?#

If traffic drops to zero on the day a new version ships, and revenue carries on as normal, it's your analytics, not your users. Revenue from a store or Stripe doesn't depend on your app's tags. Sessions do.

The opposite pattern is worse: sessions look fine, but revenue stops. That points at the purchase flow, the paywall, or the payment provider, and it deserves attention today.

Fourth: is the spike real?#

Silence isn't the only way data lies. For MyVisualRoutine, two volume purchases through Apple's education and business channel, one of 60 licences and one of 5, made up about a quarter of a month's first-time iOS downloads. App opens barely moved. The downloads were real; the users mostly weren't there yet. A dashboard that only shows downloads would have called it a great month.

And sometimes, nothing tells you at all#

Picture a paid mobile app with a free desktop version that people download from your website (an illustrative example, not a real app). A release breaks the desktop build. There is no store behind it and no revenue attached, so no report goes quiet and no number drops. It could stay broken for months. If a part of your product has no data source at all, no alert can watch it, and it needs a human check now and then.

Getting warned instead of checking#

The free way: GA4 custom insights#

GA4 can email you when a metric moves. You can create up to 50 custom insights per property, evaluated hourly, daily, weekly or monthly; hourly only works for web data (Google Analytics Help, custom insights).

  1. In the property, open the Insights panel and create a custom insight.
  2. Pick daily evaluation for traffic drops. It is the least noisy.
  3. Pick the metric, for example sessions or purchases, and the condition: either GA4's anomaly detection or a fixed "decreased by more than 30%".
  4. Turn on email and add yourself.

It works, with limits. It's one property at a time, so ten apps means ten setups. It only watches GA4, so it can't see a store report going quiet or a Stripe key expiring. And it can't tell you which of the two problems you have.

Watching every source at once#

Plask keeps source health and product numbers apart, so a broken key shows up as "Stripe needs reconnecting", not as "your SaaS made nothing". Connections that need attention are flagged in the app as soon as a sync fails. The dashboard also shows the date your data runs through, which is the latest day every connected source has reached, so a late store report never looks like a dead product.

On Pro, the Monday Focus cards also check every product for silence:

CheckFires when
Source stopped syncingA connection needs reconnecting, or its data is more than 3 days behind
Revenue stoppedA product's revenue is zero for 3 days, after averaging at least $5 a day
Traffic stoppedSessions are zero for 2 days, after averaging at least 20 a day

On Pro, money alerts watch each product's net revenue and MRR against its own 28-day baseline, using the median and median absolute deviation instead of an average, so one big day doesn't distort the baseline. Same-weekday comparisons are used when there's enough history, and moves under 20% are ignored. Alerts go to email, Slack or Discord. Days that are still estimates, like a Google Play month before its earnings report, are skipped so they can't trigger a false alarm. The method is written up on the methodology page.