I Spent $5,674 on App Ads. Here's Why I Stopped.

Real numbers on $5,674 of paid ad spend, why the unit economics never worked, and how going back to organic TikTok and SEO grew MRR from stuck to $787.

By ·

Line-art illustration of a megaphone spilling coins on one side and an upward chart growing from a phone on the other, representing paid ads versus organic growth

A few months ago I wrote about launching GainFrame, my second iOS app. At the time I had spent almost nothing on ads. I had run $115 of Reddit ads, $20 on Apple Search Ads, and burned $200 on a single TikTok promotion. I ended that post saying I planned to put $500 into Reddit plus a promo credit and figure out which ads were actually driving installs.

So I did the obvious thing. I started spending real money. This is what happened.


Giving Paid Ads a Fair Shot

I did not want to write paid ads off after one bad week, so I gave them a real budget across the channels that made sense for a fitness app. Over about three months I spent $5,674 total.

Bar chart of ad spend by channel: Apple Search Ads $2,498, TikTok $1,881, Reddit $1,295, totaling $5,674
$5,674 across three channels over roughly three months.

Apple Search Ads took the biggest share at $2,498. TikTok ads were $1,881 and Reddit ads were $1,295. Most of the money went out the door in a short window in early May. There was a TikTok burst of around $987 one week and an Apple Search Ads burst of around $1,185 the following week.

For a couple of weeks the dashboards looked great. Downloads spiked. New trials climbed. App Store impressions went up several times over. It felt like I had finally found the lever.


The Numbers Didn't Work

It took me a while to see the problem, and that is partly on me. I wanted to give the ads a fair chance, so I kept them running while I built out better tracking. Once I could actually tie spend to revenue and calculate my real lifetime value, the picture was bad.

A paying customer was costing me around $114 to acquire. The lifetime value of that customer was around $18.

Bar chart comparing the cost to acquire a paying customer at $114 against a lifetime value of $18, roughly six times underwater
Paying $114 to earn back $18 is not a business. It is a way to set money on fire.

There is no clever optimization that fixes a 6x gap. And it got worse the closer I looked. The users I got from ads were the most likely to cancel. They came in for the cheap install, poked at the app, and left before they ever built a habit.

The ads were also hiding how the rest of my funnel was doing. While they ran, my App Store conversion rate looked like about 1.6 percent. Within a week of turning them off it jumped to around 7.5 percent. The ads had been pumping a flood of low intent impressions into the top of the funnel, which dragged the whole number down and made my real, organic traffic look worse than it was.

The spike was rented. When I stopped paying, downloads fell straight back to where they had been before.


Turning the Ads Off

I know the playbook says to push through, test more creative, tighten the targeting. But the costs were climbing and the math was not close. I could not keep sinking money into a channel that lost about six dollars for every one it brought back, so I shut all of it off in the middle of May and put my time back into the two free channels I already had: the blog and TikTok.

That decision was right. The timing was terrible.


Then Both My Free Channels Tanked

About a month ago I hit a rough stretch. Right after I went all in on organic, both of my main traffic sources fell off a cliff at the same time. I am fairly sure I got shadow banned on TikTok, and a Google algorithm change hit my blog around the same week. You can actually see the Google side of it in my Search Console data.

Line chart of daily organic search clicks from Google Search Console showing a climb through April and May, a dip in mid-May during a Google update, and a recovery to record highs in late June
Organic search clicks per day. The dip in mid-May lines up with a Google update. My average position slipped from around 8 to the high teens for about a week.

At the same time my churn jumped to around 9 percent a week when it normally sits at 3 to 4 percent. MRR stopped growing and flatlined around $650 for a few weeks. Losing both free channels right after killing paid, with churn spiking, was about as demoralizing as it has felt since launch.


Getting More Deliberate

I regrouped and got more focused with both channels instead of just posting more.

On TikTok I stopped throwing things at the wall. Instead of random clips I started posting deliberately, leaning into the formats that actually got watched. On the blog I went back through my posts and rewrote them to actually answer the questions people type into Google, rather than the questions I assumed they were asking.

Both started climbing again. By late June my organic search clicks hit record highs, around 50 to 68 a day, up from roughly 6 a day when I first wrote about GainFrame. ChatGPT also quietly became one of my biggest referral sources, which tells me the work I am putting into clear, genuinely useful posts is paying off in places I cannot even buy ads.

The blog and TikTok are both doing better than ever now, and churn has come back down to about 3.5 percent a week.


Where Things Stand Now

MRR went from stuck at $650 to $787, with zero paid spend behind any of it.

Line chart of monthly recurring revenue rising from near zero in late March to $787 in late June, with paid ads turned off in mid-May and a brief stall around $650
MRR since launch. Everything to the right of the dashed line is organic.

Here is the current snapshot, verified through RevenueCat so nobody thinks I am making it up:

You can check the live numbers here: RevenueCat verified — GainFrame.

It is not a huge business. But it is growing again, it is growing on channels I own, and it is not bleeding money to do it.


A Few Other Things I Learned

I shipped the app before it felt ready. I kept fixing things as people complained. If I had waited until I was happy with it, it would still be sitting on my laptop.

The AI bills are real. GainFrame uses AI to analyze your photos and run the Coach, and those API calls cost money on every use. At one point the Coach feature alone was eating something like 90 percent of my costs. I had to go through every call and cut the input size down before the numbers made sense.

Nobody reports bugs. I had a crash I did not even know about until someone left a one star review about it. The people who hit a bug do not email you. They quietly disappear from your numbers. Now I check my crash reports and analytics every single day.


The thing I keep coming back to is that paid ads gave me a spike I had to keep paying for, and the second I stopped, it vanished. The blog posts I wrote two months ago are still bringing in readers today. They compound. Slower, but mine.

If you are building something and wrestling with any of this, I would genuinely like to hear from you. And if you are into fitness and want to try the app, you can grab GainFrame below.

Track your progress with GainFrame

Take or import a gym photo and get an AI body fat estimate, physique score, FFMI, and muscle breakdown, plus a Coach that explains what actually changed using your photos, weight, and workouts.

Download GainFrame Free

Related Articles