콘텐츠로 건너뛰기

Revenue Playbook

이 콘텐츠는 아직 귀하의 언어로 제공되지 않습니다.

Revenue playbook for in-app purchases

The purchase SDK is only one part of making money from an app. Revenue comes from a clear problem, a small product that users can try, reliable store billing, and a paywall that teaches you what people are willing to buy.

Use this playbook when you are adding subscriptions or premium unlocks with @capgo/native-purchases.

Make the first target concrete. For example:

Monthly priceActive subscribers needed for about $1K MRR
$4.99201
$7.99126
$9.99101
$29.99 yearlyAbout 400 annual subscribers, depending on timing

These numbers are before store fees, taxes, refunds, and currency differences. They are still useful because they keep the launch plan practical: you need a few hundred motivated users, not a huge audience.

  1. Pick one painful use case

    Build around one outcome users already search for. Examples: a workout plan for new parents, a budget tracker for couples, a receipt scanner for freelancers, or a language drill app for one exam.

  2. Check demand in the stores

    Search App Store and Google Play for the core keyword. Read low and mid-score reviews of competing apps to find missing features, confusing onboarding, pricing complaints, and UI friction.

  3. Ship a narrow MVP

    The first version should include onboarding, one useful core action, basic error handling, and enough analytics to see whether users reach the value moment.

  4. Add purchases early

    Do not wait until the app feels complete. A basic paywall helps you learn whether users understand the value and whether your pricing is plausible.

Track these events before you start changing prices or screens:

EventWhy it matters
install or first openBaseline traffic
onboarding_completedWhether users understand the setup
core_action_completedWhether the product delivers value
paywall_viewedWhether users reach monetization
trial_startedWhether the offer is compelling
purchase_completedPaid conversion
restore_started and restore_completedPurchase recovery and review compliance
subscription_status_checkedEntitlement reliability
cancel_feedback_submittedChurn reason

If many users do not see the paywall, fix onboarding before changing the paywall. If users see the paywall but do not start a trial, improve the offer, proof, or price presentation.

Start with one model so the data is readable.

ModelGood fitFirst version
FreemiumDaily utilities, trackers, tools with repeat useFree core action, paid limits or premium features
Paywall plus free trialApps that deliver quick value after onboardingPaywall after onboarding with 3- to 14-day trial
One-time unlockSmall tools with limited recurring valueLifetime product plus optional future subscription later

Avoid shipping three tiers, many bundles, and complex upgrade paths on day one. Use one monthly plan and one annual plan when you need subscriptions. Add localized pricing after you see meaningful traffic from a country.

Keep product identifiers stable and readable:

com.example.app.premium.monthly
com.example.app.premium.yearly
com.example.app.premium.lifetime

Use store product names that reinforce the value users are searching for, such as “Meal Planner Pro Monthly” instead of only “Monthly”. Store metadata and in-app purchase names can help discovery and clarity.

Load product data from the stores so pricing, currency, and introductory offers are always accurate:

import { NativePurchases, PURCHASE_TYPE } from '@capgo/native-purchases';
const { products } = await NativePurchases.getProducts({
productIdentifiers: [
'com.example.app.premium.monthly',
'com.example.app.premium.yearly',
],
productType: PURCHASE_TYPE.SUBS,
});
const monthly = products.find((product) => product.identifier.endsWith('.monthly'));
const yearly = products.find((product) => product.identifier.endsWith('.yearly'));

Never hardcode store pricing in the UI. Render product.priceString, localized product title, billing period, and trial terms from store data whenever possible.

A first paywall should be clear, not clever:

  • Headline: the paid outcome, such as “Unlock unlimited workout plans”.
  • Benefits: 3 to 5 concrete improvements, not a long feature list.
  • Plans: monthly and annual, with real annual savings if offered.
  • Trial: exact trial length and what happens after it ends.
  • CTA: “Start free trial” or “Upgrade now”.
  • Links: terms, privacy policy, restore purchases, and manage subscriptions.

Place the first paywall after onboarding, once the user understands what the app does. Later, test additional triggers such as usage limits, premium feature taps, or completed core actions.

import { NativePurchases, PURCHASE_TYPE } from '@capgo/native-purchases';
export async function buyYearly(appAccountToken: string) {
const transaction = await NativePurchases.purchaseProduct({
productIdentifier: 'com.example.app.premium.yearly',
planIdentifier: 'yearly-plan',
productType: PURCHASE_TYPE.SUBS,
appAccountToken,
});
await fetch('/api/purchases/validate', {
method: 'POST',
headers: { 'content-type': 'application/json' },
body: JSON.stringify({
transactionId: transaction.transactionId,
receipt: transaction.receipt,
purchaseToken: transaction.purchaseToken,
productIdentifier: transaction.productIdentifier,
}),
});
return transaction;
}
export async function restorePurchases() {
await NativePurchases.restorePurchases();
return NativePurchases.getPurchases({
productType: PURCHASE_TYPE.SUBS,
});
}

Always validate purchases on your backend before granting durable entitlements. Keep a local entitlement cache for fast UI, but treat the store and your backend as the source of truth.

Revenue needs traffic. Start with channels that can work before you have a brand:

  • ASO: title, subtitle, keywords, screenshots, app description, icon, ratings, and in-app purchase names.
  • Short-form video: post quick demos, problem/solution clips, and before/after examples for the target country.
  • Reddit and communities: join the conversation first, then share what you built as a useful story instead of an ad.
  • Beta groups: TestFlight, Google Play internal testing, Discord, and niche forums.

Each channel should send users into the same measured funnel so you can compare retention, paywall views, trials, and purchases.

Some churn means users tried the app and decided it was not for them. That is normal. What matters is the pattern:

  • Cancels during trial: unclear value, poor onboarding, or wrong traffic.
  • Cancels after one cycle: not enough repeat value or weak habit loop.
  • Refunds: pricing mismatch, accidental purchase risk, or unclear terms.
  • No restores: broken entitlement handling or missing restore UI.

Add a one-question cancellation survey when possible. Use the answers to improve onboarding, feature scope, store screenshots, and paywall copy.

  • Product solves one clear paid problem.
  • Store products are active and tested on iOS and Android.
  • Paywall displays store-loaded prices and terms.
  • Purchase, restore, manage subscription, and backend validation are implemented.
  • Funnel events are tracked from first open to purchase.
  • App store metadata explains the value in the first screenshots.
  • At least one acquisition channel is active before launch.
  • Churn feedback is collected from the first subscribers.