Plans and usage
Apps/Assistant and plans/Plans and usage

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

FreeProScale
Price$0$35 a month$299 a month
Runs50,000500,0005,000,000
Requests100,0001,000,00010,000,000
Storage0.5 GB-month5 GB-months50 GB-months
Bandwidth5 GB50 GB500 GB
Production apps1UnlimitedUnlimited
Production store installs5UnlimitedUnlimited
Custom domainsNone525
Logs kept1 day14 days30 days
Restore records back1 day7 days30 days
Past an allowanceThe apps pause until the month ends or the team upgradesOverage, charged dailyOverage, charged daily
At the team's budgetNo charges to capA 72-hour grace period, then the apps pauseA 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.

MeterCountsOverage on Pro and Scale
RunsAction 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
RequestsPages 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
StorageRecords, 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
BandwidthBytes 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 periodAfter it: paused
Production pages, actions and app proxyKeep running, charged as usualRefused. Pages show a paused page
Shopify webhooksAccepted and syncedStill accepted and synced, so the store's copy stays current
Development serversDon't startDon't start
DeploysRefusedRefused
Backfills and the hourly reconcileWaitWait

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:

PageShowsWho
UsageOne 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 usageThe 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
PlansFree, Pro and Scale side by side, with Upgrade and Downgrade.Every member; billing roles change it

What a limit looks like

WhenThe answer
A deploy past Free's one production app400 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 paused400 invalid_request, saying why and what to do.
A sixth store installs production on FreeThe 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.