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.

FreeStudioGrowthEnterprise
Price₹0 for 30 days₹2,499 / month₹4,999 / monthCustom
Apps2410Unlimited
Monthly active users1,00050,000500,000Negotiated
Storage2 GB25 GB250 GBNegotiated
Releases20UnlimitedUnlimitedUnlimited
Rollbacks10UnlimitedUnlimitedUnlimited
Team members355Unlimited
Usage over the MAU allowanceNot charged₹99 per 1,000IncludedNegotiated
Card requiredNoYes, at upgradeYes, at upgradeInvoiced

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

Passing your MAU or storage allowance does not block a release. The release goes out, the usage is counted, and it settles when the billing cycle closes — on Studio as a usage line on the next invoice, on Growth already covered by the plan price, and on Free not charged at all. Your users are unaffected either way: /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:

terminal
$ 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 }
}
CodeMeaning
FREE_PLAN_RELEASE_LIMIT_REACHEDRelease quota used for this period
FREE_PLAN_ROLLBACK_LIMIT_REACHEDRollback quota used
FREE_PLAN_EXPIREDThe 30-day Free window has ended
PLAN_APP_LIMIT_REACHEDApp count would exceed the plan
PLAN_MEMBER_LIMIT_REACHEDSeat count would exceed the plan
SUBSCRIPTION_PAST_DUEAuto-debit failed and the grace period ended
SUBSCRIPTION_LOCKEDSubscription cancelled — re-subscribe to publish

Your users are never affected

Every one of these blocks publishing only. /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.