The Business Reality5 min read

I grew installs 52% and revenue didn't move one cent

Over 84 days new installs went 451 → 685. Over the same window revenue went from $30.10 to $30.10. All of the growth was landing on apps with nothing to sell — and those were the apps converting best.

#app-store#aso#revenue#reality-check
Concept diagram: install bars growing 451 → 610 → 685 on the left, three identical $30.10 revenue bars on the right.
The install bar grew; the revenue bar was drawn three times identically. 56% of the growth went to apps with no checkout.

I have 43 apps on the App Store and I kept tuning ASO — work that grows impressions.

Impressions did grow. Cut into three 28-day windows, new installs moved like this:

d-84…-57   451
d-56…-29   610
last 28d   685      +52%

52% growth over 84 days. Revenue over the same period:

$30.10  →  $30.10

Not one cent.

This is the sequel to My top-impression app earned zero. That post was the observation. This one is the mechanism.

Exactly one term in the chain was broken

Window: 2026-07-07 to 08-03, 28 days.

impressions 51,744 → product page views 3,428 (6.6%) → installs 663 (19.3%) → 4 actual charges → $30.10

The first three terms are all in normal range. 6.6% impression-to-view and 19.3% view-to-install need no fixing. The broken term is install → payment at 0.60%, plus the raw impression volume in front of it (44 per app per day).

What I checked next was the answer. I queried ASC directly for how many subscriptions and IAPs each app actually has.

16 of 43 have 0 subscriptions and 0 IAPs
those 16 take 52% of impressions (26,690) and 56% of installs (370)

The growth went to apps with nothing to sell. And those happen to convert best.

App with no products Impressions Installs View→install
map app 9,499 85 8.0%
music quiz 4,235 95 34.4%
nonogram 1,966 67 60.9%
CCTV 1,130 30 41.7%
coffee timer 1,018 23 25.0%
minesweeper 911 6 35.3%

61% of people who view the nonogram page install it. It's the best-selling page in the fleet and it has nothing to sell.

The 36× gap is in revenue per install, not traffic

The fleet average is $0.045 per install. In the same window, one tinnitus tracker earned $24.5 on 12 installs — $2.04 per install. It sits around rank 20 by impressions.

The arithmetic forces the direction. To make $1,000/month on traffic at $0.045 per install I'd need 22,000 installs/month, 32× today. Pulling that from 1,848 impressions/day would require a 40% impression-to-install rate. Impossible.

I also re-checked my best measured ASO levers: icon redesign 3.09×, page rework 2.4×. Both move only the front terms. Even if every one landed, that's 2–3× revenue — about $90/month.

Where would you put next week? Push impressions harder, attach checkout to the apps that already have traffic, or first check whether those apps have any scale at all?

Money comes from the payout report, not analytics

SALES SUMMARY DAILY is the only ground truth. Analytics "subscription starts" over-counts because it includes free trials and intro pricing. And the Apple Identifier on IAP rows is a product ID, not an app, so it doesn't resolve to an app name — attribute via Title / Parent Identifier. There's a retention limit too: SALES DAILY goes back about 110 days, and older dates return 404.

Checking whether products exist is two calls.

GET /v1/apps/{id}/subscriptionGroups → /subscriptionGroups/{gid}/subscriptions
GET /v1/apps/{id}/inAppPurchasesV2

What I actually shipped — one line of JSON

Attaching products takes time, so I did the cheap thing first: I changed the destination of the cross-promo banner that ships inside 32 apps. Copy, link and art are fetched from remote JSON, so there's no build and no review.

Checking it, the banner was pointing at the homepage of an app that isn't released yet. My entire internal traffic inventory had been flowing somewhere you can't buy anything, for a week.

I repointed it at the app with proven payment ($2.04 per install). One line of JSON, live in five minutes.

{ "id": "quieta", "enabled": true,
  "url": "https://apps.apple.com/app/id6787811542",
  "exclude": ["quieta"] }

exclude stops an app promoting itself. I didn't delete the old promotion, just set enabled: false — when that app is approved, it comes back with a reorder.

I didn't make new banner art either. The App Store creative header (3840×1646) center-crops to the banner ratio; the icon, name and tagline sit in the middle so the crop is safe. 14KB per locale, five locales, done.

Three things to check right now

  1. How many subscriptions and IAPs do your top 5 apps by impressions have? Two API calls.
  2. Where does your internal cross-promo banner point today? Click it — do you land on something purchasable?
  3. Are you reading revenue from analytics events or from the payout report? If they disagree, discard the first one.

The honest part

It took building 43 apps to reach this conclusion. Only after the 43rd did I confirm numerically that growing impressions can leave revenue flat. And checking whether products exist was two API calls. I didn't look for months. I checked ASO metrics weekly and never once asked "can a user pay in this app?"

There's also no guarantee this post's prescription — attach products to the apps without them — is right. Converting well and being willing to pay are different things. The traffic leader, the map app, turns out to have 40 real users in 28 days by server data, so even an optimistic 5% paid conversion is roughly $30/year. Mixed into "nothing to sell" is a good number of "there was never any scale here."

Apps in this post: tinnitus tracker · map app · nonogram · music quiz · CCTV.

The same window stretched to the full 113 days, with every charge itemised, is in I shipped 42 apps in 113 days. Total revenue: $69.82 — the no-product count settled at 16.

Think of the app whose installs grew most this month. Does a screen exist in it where a user can hand you money?

YouTube

Installs +52% Revenue: $30.10 Before and after

Related