Subflows
Run another automation from inside this one, wait for it to finish, and read its output like any other Step.
- Use it to
- Reuse a shared automation across multiple workflows without duplicating Steps
- Find it
- Tools → Subflows
- Cost
- Free for the Subflow Step itself (the child automation's Steps use their normal rate)
- Limits
- Same-workspace automations only · Cycle calls are refused
- Output
- {{ N.result }} (the child automation's final output)
- Instead
- AI Agent workflow tools (when an AI Agent decides dynamically whether to call the workflow)
Reach for it when the same job appears in several automations. Build “notify the on-call channel” or “create the ticket” once, then call it from everywhere it is needed.
Call an eligible automation in the same workspace. The child does not need to be Live, but you need permission to run it. Empty automations and calls that would create a cycle cannot be selected.
Why split an automation
- Reuse. One copy of a routine, called from every automation that needs it. Changes to the child’s current configuration affect later calls, so review its callers when changing inputs or outputs.
- Readability. Give each reusable routine a focused canvas and name.
- Separate configuration. Manage the routine’s Steps and connections in its own automation. This is not a substitute for workspace permissions.
Setting it up
Add the Subflow step
Open Subflows in the dock. Choose from the automations available to you in the workspace.
Pick the automation to call
Select the child automation and verify its required inputs, account connections, and side effects. Automations without a trigger or calls that would create a cycle or exceed the 3-level depth limit are greyed out with an explanatory tooltip.
Check what it does
The App drawer shows a small map of the automation you picked, so you can see what it does without leaving the canvas.
Pass the data it needs
Enter the payload in Input data, referencing the calling automation’s steps by number:
{{ 1.email }}
{{ 3.customer_id }}Build these from the data picker rather than typing them. Inside the child automation, the payload arrives as the starting Step’s input and can also be read with {{ $input }}.
Under Output data, tick any internal child Steps whose results you want to expose in downstream data pickers.
Use the result
The called automation’s output is available on this step like any other, referenced by this step’s own number.
What it passes on
| Reference | Returns |
|---|---|
{{ 5.output }} | The child automation’s final result |
{{ 5.steps.3 HTTP Request.ret.id }} | An exposed step inside the child run |
output contains the last completed passing Step’s result. steps contains each exposed child Step’s latest passing result, keyed by its number and name (select it from the data picker or copy it from the Output data list in the Subflow drawer).
Limits
- Three levels deep. An automation can call an automation that calls an automation. Beyond that the step reports a configuration error rather than running.
- An automation cannot call itself, and it cannot call anything that would loop back to it. Glow checks the whole chain before running and refuses a cycle, so a run cannot recurse forever.
- Each embedded child Step result in
stepsis capped at 64 KB. Oversized child Step results are marked truncated insteps; return only the fields the parent automation needs. - Same workspace only. The list offers automations on your own team.
A run’s subflow steps appear in the parent’s Execution log, indented under the step that called them. One log tells the whole story, so you do not have to open the called automation separately to see what it did.
Calling over a webhook instead
A Subflow step suspends the calling run until the child automation finishes and returns its output. Sending an HTTP Request to another automation’s Webhook trigger only waits for the HTTP acknowledgement, so the child runs independently in the background:
| Subflow step | HTTP Request to a webhook | |
|---|---|---|
| Does the caller wait for the child run? | Yes | No; only for the HTTP response |
| Does the caller get the result? | Yes | No |
| Where does it show in the log? | In the caller’s log | In its own run |
If a later step needs the answer, use Subflow.
Examples to copy
Shared lead enrichment routine
A parent automation receives incoming leads from multiple webhooks and needs consistent CRM verification before assigning ownership:
- Build a standalone
Enrich & Verify Leadautomation that acceptsemailandcompanyand finishes with a Step returningenrichment_score. - In the parent automation, add a Subflow step (Step 4) passing
email={{ 1.email }}andcompany={{ 1.company }}. - Read the returned score downstream as
{{ 4.output.enrichment_score }}(or select an exposed internal step via{{ 4.steps }}).
- Run
- Select a target automation, pass a sample JSON payload, and click Run
- You should see
- The parent Step records Completed, links to the child run's executionId, and exposes the child output under {{ N.result }}.
What’s Next?
- Read what a run records in Executions.
- Send data to an outside service with HTTP Request.