RevenueCat Codelabs
Why RevenueCat? A storybook

A storybook for one maker or a whole team

Why
RevenueCat?

Shippy flying a little orange rocket

A tale about the work hiding under one button, and the friend who carries it

Starring Shippy, Tama, Suna, Gavi & Coda

Shippy floating in space, typing on a laptop Tama with hearts in their eyes

2:07 a.m., somewhere on the internet

Chapter 1 · The Little App

Once upon a time, Shippy built a little app.

It began late at night, in a small room lit only by a laptop. By morning the app had made one person smile. Then ten. Then a few thousand.

Tama opened it every day before breakfast. "I love this," said Tama, with hearts for eyes.

Shippy had made something people loved. That is the hardest part, everyone says. Nobody mentions what comes next.

1
How hard can one button be?
Subscribe
Shippy standing proudly Rent due!

One button. What could go wrong?

Chapter 1 · The Little App

Love is wonderful. Rent is due.

Shippy wanted to work on the app full time, and that meant the app had to earn its keep.

"I'll add a subscription," said Shippy. "It's just one button. How hard can one button be?"

In real life

Shippy is not alone. In January 2022, about 2,000 new subscription apps launched in a month. By January 2026, more than 14,700 did. Only 4.6% of newly launched apps reach $10K in monthly revenue within two years. Source: State of Subscription Apps 2026

2
Subscribe
Receipt validation Store notifications Renewals Grace periods Billing retries Refunds, weeks later Upgrades & downgrades Price changes Restores Fraud Access on a new phone

Chapter 2 · The Iceberg Under the Button

The button was only the tip of the iceberg.

Under the water, out of sight, the real work was waiting.

Receipts to check with every store. Notifications to catch. Refunds that arrive weeks later. Upgrades, downgrades, price changes, and restores on a brand new phone.

The button took an afternoon. Everything under it would need looking after for as long as the app lived.

3
App Store Google Play The Web signedTransactionInfo purchaseToken invoice.paid Shippy standing between three kingdoms

Chapter 2 · The Iceberg Under the Button

Two kingdoms, two languages. Then three.

The App Store kingdom spoke one language of receipts. The Google Play kingdom spoke another. When Shippy opened a web checkout, a third kingdom arrived with rules of its own.

Each one had its own subscription states, its own dashboard, its own payout calendar, and its own way of counting currencies, taxes, and fees.

Shippy translated between them by hand, and the numbers never quite matched.

4
Active Renewed Billing issue Grace period Paused Expired Came back Upgraded New phone
Tama, a subscriber whose plan keeps changing

It breathes. It changes. It never stops.

Chapter 2 · The Iceberg Under the Button

A subscription is alive.

A purchase happens once. A subscription keeps changing. It renews. A card fails. It waits in a grace period, tries again, comes back, upgrades, and moves to a new phone.

Someone has to know its true state, for every person, across every store, for as long as the app lives.

That someone was Shippy. Every single night.

5
Suna crashing headfirst, seeing stars
ProPlease subscribe$4.99
Tama, already a subscriber, being asked to pay again Churn +1

Chapter 2 · The Iceberg Under the Button

The night it broke.

One night a card quietly failed, and nobody noticed. A loyal subscriber got a new phone and was asked to pay again. Suna, who ran growth, crashed straight into the numbers.

The dashboard did not say access bug. It just said churn.

In real life

On Google Play, nearly a third of all subscription cancellations are involuntary billing failures, more than double the rate on the App Store. Source: State of Subscription Apps 2026

6
2023 2024 2025 2026 New store API New billing library Payment link rules Old receipt checks deprecated Shippy tumbling through a whirlwind of calendars

Chapter 2 · The Iceberg Under the Button

And every year, the rules change.

New store APIs. New billing libraries. New laws about payment links. Old ways of checking receipts, deprecated.

Shippy spent spring migrating and summer patching. The app Tama loved got almost no new features.

The plumbing was eating the product. Shippy had set out to build an app, and had become a plumber.

7
RevenueCat, a cheerful little machine with RC on its screen Shippy looking up in wonder

Knock, knock.

Chapter 3 · A Friend Called RevenueCat

Then a friend knocked.

"I'm RevenueCat," said a cheerful little machine. "Let me carry the receipts. You carry the app."

Shippy added the SDK, configured it once, and from then on asked a single question: does this person have Pro?

Purchases.configure(withAPIKey: "your_api_key")

let info = try await Purchases.shared.customerInfo()
if info.entitlements["pro"]?.isActive == true {
    unlockPro() // that's the whole question
}

Swift shown. The open source SDKs also cover Android, Flutter, React Native, Kotlin Multiplatform, Unity, Capacitor, the web, and more.

8
pro
iOS
Android
Web
Tama, happily subscribed on every device

Chapter 3 · A Friend Called RevenueCat

One key opens every door.

Shippy made one entitlement called pro and attached the products from every store to it: monthly and yearly, on iOS, Android, and the web.

Tama subscribed on a phone, signed in on a tablet, then opened the web app. Every door was already open.

Access followed the person, not the device.

9
RevenueCat working through the night
  • Receipts checked with the stores
  • Store notifications caught
  • Webhooks sent, and retried
  • Answers signed
  • Paywall cached, just in case

Chapter 3 · A Friend Called RevenueCat

While Shippy slept.

RevenueCat stayed up. It checked every receipt with the stores, caught every store notification, and turned them all into one tidy stream of events.

When Shippy's server missed a webhook, RevenueCat tried again. It could sign its answers so the app could spot a forged one, and it kept paywalls cached in the app, so the paywall still showed up on a bad night.

In real life

Failed webhooks are retried up to 5 times with exponential backoff, and RevenueCat targets 99.99% uptime. Sources: Webhooks docs, Reliability, Trusted Entitlements

10
# most years, just this - purchases = "previous" + purchases = "latest"
Shippy's rocket climbing into the morning sky Release notes: read Back to building

Good morning, new store rules.

Chapter 3 · A Friend Called RevenueCat

When the rules change, Shippy bumps a version.

Apple and Google still change things every year. Now RevenueCat's engineers do the migrating, in the SDKs and on the servers.

Shippy reads the release notes, follows the migration guide when a major version has one, and gets back to building.

And when new rules let apps link out to a web checkout, the same pro key opened that door too.

11
$2,500 a month Below the line: free Past it: 1% of all tracked Shippy watching the app grow

Chapter 3 · A Friend Called RevenueCat

A friend who waits for you to grow.

"How much does a friend like you cost?" asked Shippy.

"Nothing, until your app tracks $2,500 in a month," said RevenueCat. "Then 1% of what I track. When you grow, I grow. In months you don't reach it, you don't pay."

The fine print, word for word

"Pay nothing for up to $2,500 in monthly tracked revenue. Then pay 1% of what you track once you hit $2,500 in MTR." Source: RevenueCat pricing

12
Go ProUnlimited projectsSync everywhereThemes & widgetsMonthlyYearly, save 40%Start free trial
a new release Publish! Shippy peeking out of a flowering bush

Chapter 4 · Growing Up

The paywall garden.

Now Shippy had time to grow things. With Paywalls, Shippy designed the purchase screen in the RevenueCat dashboard, or imported it from Figma, and the app drew it natively.

Changing a headline used to mean a new build, a store review, and a long wait. Now it meant pressing Publish.

In real life

RedKiwi cut the turnaround time for new promotions from weeks to just a few days. Source: RedKiwi case study

13
A B
Gavi the scientist holding a bubbling beaker

Hypothesis: yearly wins. Let's find out.

Chapter 4 · Growing Up

Gavi's laboratory.

Gavi loved questions. Monthly or yearly? A three-day trial or a week? Which paywall wins?

With Experiments, Gavi split new customers into groups, showed each group a different offering, and followed what happened to revenue over time, not just on day one. No app release required.

In real life

dub tested its pricing with RevenueCat and shifted toward annual plans, which increased LTV by 207%. Source: dub case study

14
Weekly Annual + trial Monthly Country App version Custom attributes Suna rollerskating down the road

Chapter 4 · Growing Up

The right offer for every traveler.

Not every traveler wants the same thing. With Targeting, Suna showed different offerings by country, app version, or custom attributes, all from the dashboard.

Students got one deal, longtime fans another, and nobody had to ship an update to make it happen.

In real life

Pixelcut's Experiments found that a weekly offer brought 16% more paying customers than a monthly one, then Targeting showed the winner to the right people. Source: Pixelcut case study

15
Trials Churn Revenue MRR LTV Tama as a ringed planet, floating among the stars

Every store, one sky.

Chapter 4 · Growing Up

The stargazing tower.

From the top of the tower, Shippy could finally see everything at once: revenue, MRR, churn, trial conversion, refunds, and lifetime value, for every store, in one sky.

No more spreadsheets stitched together at midnight. When the team asked "How are we doing?" everyone looked at the same stars.

In real life

RevenueCat Charts track 40+ KPIs, and Scheduled Data Exports can send the raw data to your own cloud storage. Sources: Charts, Scheduled Data Exports

16
RevenueCat sending paper planes to the team's tools Amplitude Braze AppsFlyer Mixpanel Adjust Segment and many more

Chapter 4 · Growing Up

Paper planes.

Every purchase, renewal, refund, and cancellation flew straight to the tools the team already used, so marketing and analytics finally saw real revenue instead of guesses.

In real life

Photoroom with Amplitude: a 2 to 3x increase in trial sign-up rates in Japan. VSCO with Braze: membership churn down almost 5%. Runna with AppsFlyer: CAC down 8%. Sources: Photoroom, VSCO, Runna

17
ManageChange planRequest a refundContact supportCancel subscriptionBefore you go: a thank-you offer
Tama, waving, deciding to stay after all Refund Control

Chapter 4 · Growing Up

Keeping friends close.

One day Tama reached for the cancel button. Instead of a dead end, the Customer Center opened inside the app: get help, manage the plan, or say why and receive a thank-you offer before leaving.

Tama stayed. And when someone asked a store for a refund, Refund Control sent along Shippy's preference. The store still made the final call.

In real life

Customer Center can prevent churn with pre-emptive promotional offers and capture exit feedback, without any help from your support team. Plan changes and refund requests inside it are iOS only. Sources: Customer Center, Refund Control

18
Engineering Growth One source of truth Data Finance Support

Chapter 5 · The Kingdom

The little app became a kingdom.

Years passed. One app became several, and Shippy's little room became a company with towers for Engineering, Growth, Data, Finance, and Support.

In many kingdoms, every tower keeps its own map. Here, every tower read from the same one: every customer, every purchase, every dollar.

Finance saw every store's revenue in one place. Support saw each customer's whole history.

In real life

KRNL made RevenueCat the monetization source of truth across all 7 of its apps. Source: KRNL case study

19
Weekend
MTWTFSS
Coda lifting Suna high in celebration Less plumbing

Chapter 5 · The Kingdom

Coda got the weekends back.

Coda led Engineering. Coda's favorite feature was the one nobody had to maintain anymore: no receipt servers to babysit, no new store APIs to wire up by hand.

The engineers built product instead of plumbing, and every new app launched with monetization on day one.

In real life

Ladder estimates it saved 30 to 45% of its lines of code, mostly on the backend. The Tapping Solution cut its backend engineering hours by 50%. Sources: Ladder, The Tapping Solution

20
Coda in a sturdy helmet, unbothered by the storm Built for 99.99% uptime

Chapter 5 · The Kingdom

Built for big storms.

Launch days bring storms: a viral video, millions of new people at once. The kingdom's lights stayed on.

When ChatGPT launched on iOS, it hit #1 in the U.S. App Store within 24 hours, with RevenueCat underneath. ElevenLabs' mobile app reached $1M ARR in just 16 days.

155K+apps supported
$18B+revenue processed
6B+API requests daily
99.99%uptime target

Sources: revenuecat.com, Reliability, OpenAI and ElevenLabs case studies.

21
Shippy the solo maker, floating happily Coda lifting Suna high, a team celebrating together One person A whole team

Chapter 6 · Happily Ever After

Two happy endings.

If you are one person with a big idea

  • Build the button. Skip the iceberg.
  • Every feature here is included, free until you track $2,500 a month.
  • Quit the day job sooner: the CardPointers founder did within a year of shipping.

If you are a team with a big app

  • One source of truth for every team.
  • Paywalls and experiments without app releases.
  • Engineers on product. SOC 2 Type II, built for 99.99% uptime.
  • Enterprise adds volume discounts and custom SLAs.

Sources: Pricing, Reliability

22
Shippy's rocket launching into the night sky

Liftoff.

Chapter 6 · Happily Ever After

The end. Or rather, your beginning.

Shippy's app is still growing. The receipts are still being carried. And somewhere tonight, someone is building a little app that people will love.

Maybe it's you. Let RevenueCat carry the receipts. You carry the app.

23

The End

A story about the work hiding under one button, and the friend who carries it, so you can carry the app.

Tama waving goodbye

RevenueCat Codelabs · revenuecat.github.io