Plans and usage
One Apps plan per team: Free, Pro or Scale. Allowances are pooled across every app's production environment, development is never counted, and everything is charged to the team's balance next to its gateway and Auditor spend.
The plans
| Free | Pro | Scale | |
|---|---|---|---|
| Price | $0 | $35 a month | $299 a month |
| Runs | 50,000 | 500,000 | 5,000,000 |
| Requests | 100,000 | 1,000,000 | 10,000,000 |
| Storage | 0.5 GB-month | 5 GB-months | 50 GB-months |
| Bandwidth | 5 GB | 50 GB | 500 GB |
| Production apps | 1 | Unlimited | Unlimited |
| Production store installs | 5 | Unlimited | Unlimited |
| Custom domains | None | 5 | 25 |
| Logs kept | 1 day | 14 days | 30 days |
| Restore records back | 1 day | 7 days | 30 days |
| Past an allowance | The apps pause until the month ends or the team upgrades | Overage, charged daily | Overage, charged daily |
| At the team's budget | No charges to cap | A 72-hour grace period, then the apps pause | A 72-hour grace period, then the apps pause |
Every plan has unlimited members and apps, a development environment per app, hosted Next.js pages, the Shopify sync and webhooks, models, actions and vector fields, the API, the MCP server and ib-apps. A team without a plan is on Free.
What is metered
Only production is counted. The Usage page shows development too, so you can see what an app will use before it ships.
| Meter | Counts | Overage on Pro and Scale |
|---|---|---|
| Runs | Action runs (not the writes they make), Shopify webhooks (not those from stores without the app installed), background jobs (each attempt of a queued action, and bulk metafield edits), and sync passes | $20 per million |
| Requests | Pages and API calls through the app's hostname, app proxy requests, MCP tool calls and Admin GraphQL calls. Static assets aren't requests | $15 per million |
| Storage | Records, vectors, files, the event log and record history (for restores), measured once a day. Each day's size counts for its share of the month, so 3 GB kept all month is 3 GB-months | $1 per GB-month |
| Bandwidth | Bytes the app's hostname sends (pages, API calls and assets) and app proxy responses | $0.40 per GB |
- Embeddings for vector fields aren't part of the plan. They are ordinary embedding requests, in both environments, at the gateway's price: billed to the caller's key, or to the team's Apps key.
- Development servers are included within fair use, about 100 awake hours per app a month. They aren't billed; the Usage and Plan and usage pages show the hours against that figure.
- Not billed: development environments, builds and deploys, file syncs on their own, and installed stores.
Usage is rolled up every hour, so the pages run up to an hour behind.
Free's limits
- One production app. The first app to deploy holds it; deploying that app again is always allowed. Deploying a second app is refused until the first is archived or the team upgrades.
- Five stores in production. Production apps can be installed on five stores in all. A sixth store's install is refused before Shopify shows its approval page. Reinstalls, new scopes on a store already counted, and development installs are never refused. Uninstalling the app from a store frees its place.
- Allowances pause, they don't charge. Past any of Free's allowances, the team's apps pause: production shows a paused page, and actions and app proxy requests are refused. They resume when the next month starts, or as soon as the team upgrades.
How it is charged
Billing periods are UTC calendar months. Everything comes out of the team's balance, like gateway requests, and counts toward the team's monthly budget.
- The plan's fee is charged on the first of each month.
- Overage is charged once a day for the day before: the month so far past the allowances, less what has already been charged for it. Usage that arrives late lands in the next day's charge.
- Each charge is a line on the team's Billing page under Apps, with each app's share. An app's share of the fee and overage follows its share of the team's runs and requests, plus its own embeddings.
Changing plans
Change the plan on Apps → Plans. Owners, admins and billing admins can change it; other members see the comparison only.
- An upgrade starts at once. It charges the new fee for the rest of the month, less what the current fee already paid for it. A Free team paused at its allowances resumes with it. If the balance can't pay, the plan stays as it was.
- A downgrade starts on the first of next month; until then the team keeps its current plan and allowances. Choosing the current plan again cancels it.
- Moving to Free is refused while the team has more than one production app or production installs on more than five stores. Archive apps or uninstall them from stores first.
Budget and grace period
Apps has no budget of its own: the cap is the team's monthly budget in Directives, shared with gateway and Auditor spend. On Pro and Scale, the team's apps enter a 72-hour grace period when the team goes over that budget (whichever product takes it there), or when the balance can't pay an Apps charge.
| During the grace period | After it: paused | |
|---|---|---|
| Production pages, actions and app proxy | Keep running, charged as usual | Refused. Pages show a paused page |
| Shopify webhooks | Accepted and synced | Still accepted and synced, so the store's copy stays current |
| Development servers | Don't start | Don't start |
| Deploys | Refused | Refused |
| Backfills and the hourly reconcile | Wait | Wait |
During the grace period the balance may go below zero for Apps charges only, down to a floor of about what the grace period will use (the last week's daily Apps charges for 72 hours, plus anything that couldn't be paid, and at least $5). The next top-up settles it first. Gateway requests are still refused once the available balance is zero.
Raise the budget, add credit or change the plan and the apps return to normal within a minute. The team's owners, admins and billing members get an email when the grace period starts, when less than a day of it is left, when the apps pause (on Free too, at its allowance) and when they run again. Plan and usage and the team's Billing page show when the grace period ends and what to do.
Production keeps serving through the grace period so merchants don't notice a budget alert. Set the team budget with room for the apps' usage, and turn on auto reload so a charge never finds an empty balance.
Log retention
Each environment's event log keeps events for the plan's days (1, 14 or 30) and older ones are deleted every hour. Export in Logs to keep events for longer.
Record history, what lets an environment's records be restored, is kept for the plan's restore window (1, 7 or 30 days) and pruned every hour; after a downgrade the shorter window applies at once. It counts toward storage as Record history.
In the dashboard
Under Apps in the team sidebar:
| Page | Shows | Who |
|---|---|---|
| Usage | One card per meter for a billing period: its total, a bar per day, and what makes it up (for runs: actions, webhooks, background jobs and sync passes). By trigger lists runs by what caused them: an action, a model's sync, a webhook topic. Filter by environment (production by default) and by app; step back through earlier months. | Every member |
| Plan and usage | The plan with this month's spend so far, where it's heading and the days left; the balance it's charged to and the team budget split into Apps and everything else; a Breakdown of each meter against its allowance with extra units and cost; and By app: stores, runs, requests, storage, development server hours, spend and spend per store, to bill clients by. | Owners, admins and billing admins |
| Plans | Free, Pro and Scale side by side, with Upgrade and Downgrade. | Every member; billing roles change it |
What a limit looks like
| When | The answer |
|---|---|
| A deploy past Free's one production app | 400 invalid_request: "The Free plan has 1 production app. Upgrade to deploy another." ib-apps deploy prints the message. |
| A deploy during the grace period or while paused | 400 invalid_request, saying why and what to do. |
| A sixth store installs production on Free | The install stops before Shopify's approval page with the reason, and Logs show a failed install. |
| An action, app proxy request or record write that runs an action while paused (or in development, during the grace period) | 503 dependency_unavailable, saying the team's apps are paused and how to resume them. |