Pricing you can size yourself.
No card is required to create an account. Early-access pricing is agreed per merchant against the three starting points below — and the unit we meter, a flow run, is defined on this page precisely enough to count from your own order volume.
| Limit | StarterOne bundle, one storefront, one ERP. | GrowthRecommendedSeveral bundles across a WMS, a 3PL or a marketplace. | EnterpriseEvery connector, custom run volume, a named contact. |
|---|---|---|---|
| Connectorssystems you can connect | 2 | 4 | All |
| Installed bundlesintegration apps from the catalog | 1 | 3 | Unlimited |
| Flow runs per monthincluded — see “What counts as a run” | 10,000 included | 100,000 included | Custom |
| Run record retentionruns and per-step input/output | All runs kept | All runs kept | All runs kept |
| Team membersowner and member roles, invited by link | 3 seats | 10 seats | Unlimited |
| Notificationsin-app: failed runs, offline connections | Included | Included | Included |
| Support | Priority email | Named contact | |
| Priceno card to create an account | Early access — agreed per merchant Talk to us | Early access — agreed per merchant Talk to us | Early access — agreed per merchant Talk to us |
Connector, bundle, seat and run limits are the early-access starting points we agree with each merchant. The platform does not yet meter them automatically, so nothing on this table can be triggered by surprise: a change of plan is a conversation, not a lockout.
The metered unit
What counts as a run
Defined from the engine, not from a rate card. Every clause below names the code it comes from.
One order, three locations
An order whose lines ship from three locations is split once. The parent run ends at the split; each fulfillment order becomes a child run with its own record.
apps/api/src/engine/executor.ts
One run = one trigger firing through one flow
When a trigger fires — a webhook arrives or a poll finds a new record — the engine walks that flow's steps once and writes one run record with a step record per action. That is one run, however many steps the flow has.
apps/api/src/engine/executor.ts
A split fans out into child runs, and each child is a run
A split step takes an array from the payload — say, one Shopify order's three fulfillment orders — and enqueues one child run per item, each carrying its parent run's id. The parent run ends at the split. So an order split across three locations is four runs: the parent plus three children, and each child has its own run record you can open.
apps/api/src/engine/executor.ts · flowRunQueue.addBulk
A split is capped at 10,000 children per run
If a split resolves more than 10,000 records the engine refuses the step, records the failure with the count, and enqueues nothing — rather than processing the first 10,000 and reporting success. The parent run counts as one run; no children are created.
apps/api/src/engine/executor.ts · MAX_SPLIT_FAN_OUT
Retries are not runs
A step that retries on 429 or 5xx retries inside the same run — the step record's attempt counter goes up, the run count does not. Five retries on a rate-limited ERP call are still one run.
apps/api/src/engine/executor.ts · runActionStep
Failed and partial runs count
A run counts when it starts, whatever its final status. A failed run still consumed a trigger, a worker slot and a run record; that record is what you debug from. What does not count: a webhook rejected before a run exists, and a disabled flow's trigger.
apps/api/src/engine/executor.ts
Questions
Frequently asked
What merchants ask before the first invoice.
Is there a free tier?
What happens if I exceed the included runs?
Can I add a connector to my tier?
Do failed runs count?
How is billing agreed?
Size it with us in thirty minutes.
Bring last month's order count and how many locations you ship from. We will count the runs together and put a figure in writing.
