Docs / Strand / advanced/concurrency
Max Workflow Concurrency
Strand limits how many workflow runs your account can have going at the same time, to manage resource usage and keep allocation fair between accounts.
The limit counts runs, not workflows. One workflow triggered three times is three runs — so a single busy webhook flow can reach your limit on its own.
Overview#
The concurrency limit is set by your plan tier; it is not configurable. When a run is about to start, Strand counts the workflows your account already has running and compares that against your plan's ceiling.
| Plan | Runs at a time |
|---|---|
| Free | 2 |
| Starter | 3 |
| Standard | 5 |
| Pro | 8 |
See tendrl.com/pricing for current plan details. Your ceiling is shown read-only on your profile page alongside your other limits.
Reaching the limit delays a run; it never cancels one#
When you are at your ceiling, the run goes back on the queue and starts as soon as a slot frees up. Nothing is lost and nothing needs re-triggering.
- Currently running workflows for your account are counted
- Compared against your plan's ceiling
- The run returns to the queue if you are at the limit, and starts when a slot opens
- It fails only if no slot becomes available within 5 minutes
Once a delayed run starts, its detail view shows what the wait cost:
Waited 45s for a free slot — your plan allows 2 runs at a time.
Starter allows 3.
The plan named is always the cheapest one that would have avoided the wait, not the largest — so the suggested upgrade is the smallest one that solves your problem. On Pro the line simply states your ceiling, since there is nothing above it.
In the rare case where nothing frees up for five minutes, the run fails with a message naming the limit and the fix:
Waited 300s for a free slot. Your plan allows 2 runs at a time, and all
of them were busy. Upgrade to run more at once, or stagger your triggers.
Nested workflows do not count twice#
A workflow started by a flow.call node executes inside its parent's slot. A parent and its children together consume one slot, however many steps each contains and however deeply they nest.
Parent Workflow -> Child Workflow -> Grandchild Workflow = 1 concurrent run
Only workflows you trigger independently — manually, on a schedule, from a webhook, or from a Contact device event — consume a slot of their own.
What to watch#
- How often runs report a queue wait, and how long. A wait of a few seconds is normal on a busy account; waits that grow over time mean your trigger rate has outpaced your plan.
- Average workflow completion time, which includes any queue wait.
Troubleshooting#
Runs are starting later than expected#
Symptoms:
- Run details show a queue wait
- Completion times are longer than the workflow's actual execution time
This is the limit doing its job — the work is not lost, only delayed. To reduce the wait:
- Stagger triggers rather than firing them together
- Reduce parallel branches within a workflow
- Upgrade your plan for a higher ceiling
A run failed after waiting#
Symptoms:
- A run failed with a message about waiting for a free slot
Your account stayed at its ceiling for a full five minutes, which usually means triggers are arriving faster than runs complete. Spread the triggers out, shorten the workflows, or upgrade.
Related Topics#
- Performance Optimization - Optimize workflow execution
- Error Handling - Handle workflow errors
- Nested Workflows - Call workflows from workflows
- Plan Limits - All plan-based limits
Tendrl