Back to Blog
Insights

What $918 of Ads Bought: A Distribution Post-Mortem

This blog has spent a year making one argument from several directions: that building is the easy part, that solo developers can out-ship funded teams, and that the thing which actually separates outcomes is distribution. It's a comfortable argument to make in the abstract. So here is the uncomfortable version: our own ledger. We ran paid ads for all seven of our marketplace apps, tracked every dollar, and closed the books on the channel last week. This is the whole record, published because we would have paid real money to read someone else's before we started.

The Ledger

Every figure below comes from the ad platform's own dashboard, read at three points over the campaign's life:

DateCumulative spendCumulative installsPaying customers from ads
July 3$228.0050
July 27$821.50170
August 1$918.50170

$918.50 in, 17 installs out, zero paying customers, zero revenue. The dashboard has columns for Customers, Revenue, and ROAS, and every keyword of every ad reads the same way: 0, $0.00, 0. Note the last row against the one above it — the final ~$97 of spend bought no additional installs at all. The channel didn't taper. It stopped.

Three details from inside that total are worth more than the total:

Two keywords carried the entire account. Of everything we bid on across seven apps, one broad keyword on an age-verification app produced nine of the seventeen installs, and one broad keyword on a payments app produced two more from exactly two clicks. Everything else — dozens of keywords, months of runtime — produced the remaining handful or nothing.

Search was the only placement that ever converted. Category-page ads, across every app and every month, produced zero installs. Browse-intent traffic clicked and never installed.

One app spent $0.00 lifetime. Not because we paused it — because its ads never won a single auction. There is a version of this post-mortem where that's a punchline, but it's actually the thesis arriving early: in a thin market, you can show up with a budget and simply not be needed.

The Experiment That Explained It

The reflexive diagnosis for a campaign like this is “bid more” or “spend more.” We tested that properly before shutting anything down, on our single best keyword — the one with nine installs — using the platform's own date-range isolation:

BidWindowImpressionsShare of available impressions
$113 days8554.5%
$93 days9854.7%

Read that twice, because it's the whole article. A 22% bid increase on our best-performing keyword changed our share of impressions by a rounding error — visibility was identical at both bids. The keyword was serving roughly 33 impressions a day, total, to everyone. Our second-best keyword served about five a day. Meanwhile the platform's suggested bid on that first keyword climbed to $18–30 while we were lowering ours — the suggestion tracks what other bidders pay, and other bidders were escalating over the same 33 daily impressions.

That reframes the entire campaign. Neither the bid nor the budget was ever the binding constraint. Impression supply was. There were only so many people searching, the auction was for their attention, and past a modest bid we were already reaching our share of all of them. Every additional dollar was competing for impressions that did not exist. You cannot buy views that nobody is generating — you can only pay more per view for the same views.

Meanwhile, Off the Ledger

During the same stretch, the portfolio got its first paying customer. Not from an ad. They found the app through ordinary marketplace search, hit a problem, opened a support thread — and the fixes shipped the same day. About a week later they upgraded to the paid plan. Ad spend involved: zero dollars and zero impressions.

We want to be precise about what that is and isn't. It is one customer — n=1, and we label it that way deliberately, because a sample of one converts into a philosophy faster than anything else in business. What it demonstrates is not “support is the growth channel.” It's narrower: the entire causal chain that produced our only revenue — discovery, trial, problem, fast fix, upgrade — ran through surfaces we don't pay for and mostly can't. The ads were a parallel universe. They generated installs that never became anyone, while the person who became someone never saw an ad.

The Narrow Lesson (Which Is the Useful One)

The tempting conclusion is “paid acquisition is dead,” and we're not drawing it, because our data doesn't support anything that big. Plenty of markets have deep impression supply, real purchase intent, and ad channels that print money. The defensible claim is narrower, and more useful for being narrow:

In a marketplace niche where your best keyword serves ~33 impressions a day, paid ads cannot buy you a real test of your product — and money spent there is not distribution. Seventeen installs over two months is not a funnel; it's a trickle wearing a funnel's dashboard. No install volume means no review volume, no ranking momentum, no statistically meaningful read on activation or pricing — none of the things the spend was supposed to purchase. The $918 didn't fail to be profitable. It failed to be informative, which is the more expensive failure.

If we could send one paragraph back to ourselves in June, it wouldn't be about bids or keywords. It would be: audit impression supply before spending anything. Run the cheapest possible campaign for a week and read the impressions column — not clicks, not installs, impressions. That number is the ceiling on everything downstream, it costs almost nothing to learn, and no amount of budget, bid strategy, or creative changes it. If the ceiling is 33 a day, your distribution problem is real, but it is not a problem money can be pointed at — which, at our scale, is the difference between an expensive lesson and a cheap one.

The One-Sentence Version

Spend is not distribution: before a single dollar goes into a marketplace ad channel, find out how many impressions exist to buy — because when supply is the constraint, every bid and budget decision downstream of it is rearranging a rounding error.

What Happens to the $918 Argument Now

The honest accounting is that the money bought us the number 33, and the number 33 changed how we operate. The channel is closed; the effort moves to the surfaces the customer actually arrived through — the organic listing, the product itself, and support that fixes things the same day, which we were doing anyway because it's the job. The maintenance-tax essay argued that software's real costs arrive after shipping; consider this the marketing corollary. The real cost of a distribution channel isn't the spend. It's the months you believe it's working the problem while the problem sits somewhere else entirely.

The Shelf the Ads Were For

Seven marketplace apps, built and maintained solo — the portfolio this ledger belongs to, limits and all.

The Other Shelf
BW

Brandon Wigley

Founder of Wigley Studios. Building developer tools since 2018.

Previous: AccessGuard vs Accessibility Overlays All Articles