Plans and Limits
What each plan includes: apps, monthly active users, releases, rollbacks and team members.
Every organization starts on the Free plan the moment it registers — no card, no payment step. Limits are enforced by the API, so the CLI and dashboard see identical behaviour.
| Free | Studio | Growth | Enterprise | |
|---|---|---|---|---|
| Price | ₹0 for 30 days | ₹2,499 / month | ₹4,999 / month | Custom |
| Apps | 2 | 4 | 10 | Unlimited |
| Monthly active users | 1,000 | 50,000 | 500,000 | Negotiated |
| Storage | 2 GB | 25 GB | 250 GB | Negotiated |
| Releases | 20 | Unlimited | Unlimited | Unlimited |
| Rollbacks | 10 | Unlimited | Unlimited | Unlimited |
| Team members | 3 | 5 | 5 | Unlimited |
| Usage over the MAU allowance | Not charged | ₹99 per 1,000 | Included | Negotiated |
| Card required | No | Yes, at upgrade | Yes, at upgrade | Invoiced |
The pricing page reads these numbers live from the API, so it is the authority if this table ever drifts. Limits can also be set per organization — if yours was given a custom allowance, the Usage tab shows the numbers that actually apply to you.
How monthly active users are counted
A monthly active user is one device, counted once per billing cycle no matter how often it checks in. Three details change the number materially, so they are worth stating plainly:
- Counted on the update check, not the download. A device that polls and is told “no update available” still used the platform, and still counts. This is the single biggest difference from a download-based count.
- Deduplicated across your whole organization. A phone running two of your apps is one active user on your bill. The per-project rows in the Usage tab each count it, so those rows add up to more than the organization total — deliberately.
- A reinstall is a new device. The identifier lives in the app’s own storage, so deleting and reinstalling the app produces a second count. We do not try to correct for it, because the alternatives all involve tracking people across installs.
Cycles follow your subscription’s anchor date, not the calendar month — subscribe on the 12th and your cycle runs the 12th to the 11th. Days are bucketed in a single fixed timezone (IST) so the same dashboard reads the same everywhere. The Usage tab shows the live figure, the allowance, and the estimated charge, and exports the per-day, per-project rows as CSV — those are the same numbers the invoice is computed from.
Going over never stops you shipping
/updateCheckkeeps serving.The release and rollback counts on the Free plan are a separate thing, and those are still enforced — see the error codes below. The difference is deliberate: a release count is something you can see coming and control, while your MAU is decided by how many people open your app, which is not a reason to stop you shipping a fix to them.
What a limit looks like
A blocked action returns 403 with a stable code and the URL that resolves it. CI can branch on the code:
$ ota release --channel production --format json
{
"error": "You've used all 20 releases on the Free plan. Upgrade to Studio for unlimited releases.",
"code": "FREE_PLAN_RELEASE_LIMIT_REACHED",
"details": { "upgradeUrl": "https://…/billing?upgrade=studio", "used": 20, "limit": 20 }
}| Code | Meaning |
|---|---|
FREE_PLAN_RELEASE_LIMIT_REACHED | Release quota used for this period |
FREE_PLAN_ROLLBACK_LIMIT_REACHED | Rollback quota used |
FREE_PLAN_EXPIRED | The 30-day Free window has ended |
PLAN_APP_LIMIT_REACHED | App count would exceed the plan |
PLAN_MEMBER_LIMIT_REACHED | Seat count would exceed the plan |
SUBSCRIPTION_PAST_DUE | Auto-debit failed and the grace period ended |
SUBSCRIPTION_LOCKED | Subscription cancelled — re-subscribe to publish |
Your users are never affected
/updateCheck keeps serving the last release you published, so installed apps carry on working normally.If a payment fails
Razorpay retries the auto-debit automatically for a few days. Publishing keeps working for a grace period (7 days by default) so a temporary card problem does not stop your release train. If the card is still failing when the grace period ends, publishing pauses until it is fixed — and a cancelled subscription locks the organization rather than dropping it back to Free.
You can turn auto-renew off yourself from Billing. You keep full access until the end of the period you already paid for, and you can turn it back on before then.