Shape
What happened during each period
Chart · Churn and refunds
Churn rate is the share of paid subscriptions active at the start of a period that ended during it. RevenueDot divides subscriptions that lost access, including product-change replacements and net of billing recoveries, by the paid subscriptions active when the period began. It can be negative or above 100 percent.
Formula
Churn rate = paid subscriptions that ended in the period (net of billing recoveries) / paid subscriptions active at the start of the period
Shape
What happened during each period
API name
churn
Measures
Churn Rate (Percent)
Filter and segment by
App, Store, Product, Product duration, Offering, Country, Platform, App version
Definition
At the start of each period RevenueDot counts the paid subscriptions with access. Then it counts the subscriptions that ended in the period: expirations, refunds that ended access, and the old subscription in a product change. It subtracts billing recoveries, where a renewal succeeded after a billing issue and the subscription continued. The result is churned actives.
Both numbers count subscriptions, not customers. A customer who resubscribes starts a new subscription, which does not reduce churn already counted. A customer who moves from a monthly to an annual plan counts as churn on the old plan, because the old subscription ended, while the Active Subscriptions Movement chart treats a paid-to-paid change as neither.
Because the denominator is the count at the start, a period that adds many new subscribers and loses a few can still show a high rate. The value can be negative when recoveries exceed losses and can pass 100 percent in an unusual period. Trials do not count, and the sandbox is excluded. Filters and segments: app, store, product, product duration, offering, country, platform and app version. You can open it in the dashboard under Charts or fetch it with GET /v2/projects/{project_id}/charts/churn. The response has the same shape as RevenueCat's Charts API, so scripts written for that API keep working. The secret key needs the charts_metrics:charts:read permission. The Charts guide lists every parameter.
Worked example
One month for an app with monthly plans.
| Measure | Subscriptions |
|---|---|
| Paid subscriptions active at the start | 1,000 |
| Ended in the month (expired, refunded, replaced) | 60 |
| Billing recoveries (renewed after a billing issue) | 10 |
| Churned actives, net | 50 |
Churn rate is 50 / 1,000 = 5.0% for the month.
Why it matters
Churn sets the ceiling on your growth. At 5 percent monthly churn, a subscriber stays about 20 months on average. At 10 percent, about 10 months. Every point you remove from churn is worth more than the same relative lift in new subscribers, because it compounds on the whole base.
Segment by product duration and by store before you act. Monthly and annual plans have different churn rhythms: an annual plan has one decision point a year and a monthly plan has twelve. A single blended rate hides which plan or market is leaking.
API
Same path and response shape as RevenueCat's Charts API, so existing scripts keep working.
curl "https://api.revenuedot.app/v2/projects/$PROJECT_ID/charts/churn?resolution=day" \
-H "Authorization: Bearer $SECRET_KEY" # sk_... with charts_metrics:charts:read Reference: Charts guide · REST API v2
FAQ
Divide the paid subscriptions that ended in the period by the paid subscriptions active at its start. RevenueDot subtracts billing recoveries and counts product changes as churn on the old subscription.
No. Only paid subscriptions count. Use Trial Conversion Rate and Trial Cancellation Rate for trials.
By subscription. A customer who comes back after their subscription ended starts a new subscription.
If more subscriptions recover from billing issues in a period than end in it, the net churned count is below zero.
RevenueDot nets billing recoveries against churn. Use Subscription Status to see how many subscriptions have a billing issue right now.
Get started
Connect your app to RevenueDot Cloud, free up to $10,000 a month in tracked revenue, and all 43 charts fill from your store history after import.
Already have an account? Sign in · Prefer your own servers? Self-host free