Every time someone taps Generate My Look in HairOver, it costs me money. At the time I did this analysis, it cost about NPR 15 per generated image, roughly $0.10.
That one number shapes the whole business. This post is how I worked out what it means for pricing, including the mistakes in my first model.
The original model
This is what I started with:
| Item | Value |
|---|---|
| Cost per generated image | NPR 15 (โ $0.10) |
| Currency | ๐ diamonds, 5 ๐ per generation |
| Pack A | $7 โ 125 ๐ โ 25 generations |
| Pack B | $55 โ 200 generations |
| Subscriptions | None |
| Assumed margin on the $7 pack | 64% |
It looked fine on paper. It had two problems.
Mistake 1: I forgot the app store commission
Google and Apple take a cut of every in-app purchase before you see any money. For developers under $1M a year in proceeds, both offer a 15% rate (Google automatically on the first $1M; Apple through its Small Business Program). Above that, the standard rate is 30%.
My 64% margin didn't include any of this. Using NPR 150 = $1:
| Line (the $7 pack) | Original | With 15% cut | With 30% cut |
|---|---|---|---|
| Gross revenue | NPR 1,050 | NPR 1,050 | NPR 1,050 |
| Store commission | โ | โ158 | โ315 |
| Net revenue | 1,050 | 893 | 735 |
| Cost (25 ร NPR 15) | โ375 | โ375 | โ375 |
| Gross profit | 675 | 518 | 360 |
| Margin | 64% | 58% | 49% |
58% is still a workable business. But I had been planning around a number that was about six points too high, and it would have been fifteen points too high at the 30% rate.
The lesson: model the platform's cut before you model anything else. It's the largest cost line I'd left out entirely.
Mistake 2: the $55 pack was a bad deal for users
Per generation:
- $7 รท 25 = $0.28
- $55 รท 200 = $0.275
That's about a 2% discount for spending eight times as much. Nobody rational picks that, and the few who do might feel tricked later. On top of that, $55 in one tap is far more than people usually spend on impulse in a photo app.
If a bigger pack doesn't come with a clearly better price per image, it isn't a better deal. It's just a bigger charge.
The rule that came out of this
The most useful idea from the whole exercise:
Every tier has to be profitable even if the user spends 100% of their credits.
A pricing plan that only works because most people don't use what they paid for loses money on your best users, the ones who love the product most.
So instead of choosing a credit allowance and hoping, I worked backwards from the price:
Max monthly credits = (monthly net revenue in NPR ร 0.60) รท 15
The 0.60 keeps a 40% gross margin even when every credit is used. Applied to a $59.99 yearly plan:
$59.99 ร 0.85 (store cut) = $50.99 net $50.99 ร 150 = NPR 7,649 / year รท 12 = NPR 637 / month ร 0.60 = NPR 382 credit budget รท 15 = 25 generations / month, maximum
That result surprised me. At NPR 15 per image, a $60/year subscription can't safely include more than about 25 images a month. This isn't a pricing problem I can fix with a better paywall. It comes straight from the cost of each image.
The rebuilt model (a plan, not a result)
Here's the structure the analysis pointed to:
Subscriptions
| Tier | Price | Credits | Margin if 100% used |
|---|---|---|---|
| Weekly | $4.99 | 20 / week | 53% |
| Monthly | $14.99 | 50 / month | 61% |
| Yearly | $59.99 | 25 / month | 41% |
Diamond packs (never expire, for users who want more generations)
| Pack | Price | Generations | Per generation |
|---|---|---|---|
| Starter | $2.99 | 10 | $0.30 |
| Popular | $6.99 | 25 | $0.28 |
| Best Value | $19.99 | 80 | $0.25 |
The $55 pack goes. Now each bigger pack costs less per image ($0.30 โ $0.28 โ $0.25), and the top one stays under $20.
A few rules came with it, and I think they matter more than the prices:
- Refund the credit automatically when a generation fails. Charging someone for a broken result is the fastest way to get a one-star review.
- Charge per output image, not per tap. If one tap produces four variations, that tap costs four times as much. If I leave this vague, every margin number in this post is off by a factor of four.
- Purchased diamonds never expire. Subscription credits reset monthly.
What I'm deliberately not claiming
The analysis I worked from included a lot of "category benchmarks": typical conversion rates, what cost per image competitors supposedly run at, how much a reveal-then-paywall is supposed to lift conversion. I'm not repeating those numbers here as facts, because I haven't verified any of them against HairOver's own users. They're hypotheses I'll test, not results I've seen.
The real lever isn't price, it's cost
The biggest thing I took away: cutting the cost per image is worth more than any pricing change. At NPR 15, every tier has to be stingy. If the cost dropped to around NPR 6, I could give roughly twice as many generations at the same margin, and the product would feel much more generous without changing the price.
The ideas I'm looking at, none of them shipped yet:
- A cheaper, faster model for previews, and the expensive model only for the final saved image
- Caching repeat results (same face + same style)
- Generating previews at low resolution and upscaling only when the user saves
What I'm testing next
- What people actually do at the paywall. I don't have a clean conversion number to share yet.
- How much of their credits people actually use. All of the math above assumes the worst case of 100%.
- Whether showing the result first and asking for payment second beats asking for payment up front, for HairOver specifically.
I don't know yet which of these will matter most. The one thing I'm confident about is that pricing an AI product without knowing your per-generation cost is guessing.
Key takeaways
- My original model left out the 15โ30% app store commission. Margin went from 64% to 58% at the 15% rate.
- The $55 / 200-generation pack was only ~2% cheaper per image than the $7 pack.
- Size every tier so it's profitable when users spend all their credits.
- At NPR 15/image, a ~$60/year plan can't safely include more than ~25 images/month.
- Reducing cost per image beats any pricing tweak. The rebuilt model is still a plan, not a result.