New Capability: Workflows with 1K Serial Loops

Description

We are excited to announce a new set of Serial Loop operators in Workflows that support up to 1,000 iterations per loop. With these operators, you can process large lists one item at a time and repeat steps until a condition is met without hitting the 250-item limit of today’s Parallel Loop operator.

What you need to know

  • The new loop operators run in serial (one iteration after another). They do not replace the existing parallel Loop operator (250-item cap) - both will be available.
  • Serial loops support up to 1,000 iterations per loop.
  • This release includes the following new features:
    • For Loop: iterates once for each item in a data set.
    • While Loop: iterates while a user-defined condition is met.
    • Break Operator: exits a loop early (for example, on first success or first failure).
  • Existing parallel Loop operators in your workflows keep working and are not converted.

Problem

Today, Workflows only supports parallel loops with a 250-item cap. Customers building bulk identity updates, paginated API consumption, and retry-style flows have told us they need:

  • Higher iteration counts than 250 items.
  • Serial (one-at-a-time) execution instead of parallel, to reduce memory/load and to keep ordering predictable.
  • A way to repeat until a condition is met (e.g., “retry create until it succeeds,” “loop while there is a next page”).

Without these, customers either split work across multiple workflows, build custom retry logic outside Workflows, or simply can’t automate the use case at all.

Solution

This release delivers four main value drivers:

  1. Process larger lists, in order: Use a For Loop to iterate over up to 1,000 items in serial. This can be used for things like bulk identity updates and other use cases that exceed today’s 250-item parallel Loop.
  2. Repeat until a condition is met. Use a While Loop with a defined condition to iterate until success, loop while there is more data, or stop as soon as something changes. Combine with Break to exit early on a success or first failure.

Who is affected

Workflows customers.

Important Dates:

Sandbox Availability: ​May 11, 2026

Production Rollout: ​May 18, 2026 - June 15, 2026

15 Likes

Takato,

Love this new functionality - I assume the documentation won’t be updated until the production rollout date? I was hoping to find out whether the serial loops have this same behavior as the existing parallel loop:

“Later actions and operators in the workflow can begin before the loop step has finished iterating over all objects in the list. However, the workflow itself can’t end until the loop has finished executing. For this reason, adding additional steps outside of the loop between the Loop operator and the end step is not recommended.”

Will a serial loop hold up steps that are outside of the loop between the loop and the end step, or will the rest of the workflow still process while the serial loop is still iterating?

Matt

Hey @MattUribe You are correct. We’ll be publishing documentation when we roll out to production.

Will a serial loop hold up steps that are outside of the loop between the loop and the end step, or will the rest of the workflow still process while the serial loop is still iterating?

For Serial Loops, the workflow will pause/wait for the loops to complete before processing the rest of the workflow

1 Like

Hi, has this been rolled out to Sandbox tenants yet please or when is it scheduled to? I can see May 11th it was meant to roll out but can’t see it in my tenants as of yet. Thanks

Hi @NLS1 as of today, all Sandbox/Staging tenants should have the functionality available. Please let me know if you’re tenant is still missing it.

1 Like

Hi Takato, thank you for this I can see it. Is the Break Operator not included as of yet as I can see on that one you can do first success or first failure but this looks to be not currently available.

@NLS1 Break Operator is enabled together with loops. The operator name in the Workflow Builder is called “Break Loop”

Its really a great improvement. 1000 limit is much better than 250

Hi, just checking the differences between Parallel Loops and Serial Loops

Will Loop Context be a part of Serial Loops as well?

Hi @Takato,

This may be out of your scope, but do you happen to know when this will be rolled out to all tenants, like the devrel-ga tenants that ambassadors have? I was looking to test out this functionality there, but not seeing the option there like I do in my clients sandbox tenants. This may be a question for @tyler_mairose.

This is a great improvement for iterations over 250

Tested the serial loop in sandbox environment and noticed a bug when fetching from loop input, $.serialLoop.loopInput is not giving any value.

Hi @trettkowski from my understanding, it will be devrel tenents will be enabled when all production tenants are enabled.

Hi @yuyanglee there’s a bug fix in sbx coming soon, but use $.loop.loopinput

1 Like

Hi @JakeCrossin Yes, we will also be publishing updated docs that you’ll be able to reference for more details.

1 Like

Hi @Takato,

Is there an ETA or date that we know this change will be added in production?

We currently have the workaround using $.loop.loopInput and want to be sure our workflows in production don’t stop working or producing incorrect results due to this update. Will $.loop.loopInput continue to work after this bug fix is updated or will we need to make a change when this is pushed?

@trettkowski @yuyanglee I apologize, I was incorrect. The expression should follow the activity name. ($.<Loop_Name>.loopInput). In your examples if would follow $.serialLoop.loopInput if your activity name was serial loop
The bug fix was deployed so please let us know if you’re still seeing issues.

Thank you @Takato for the clarification.

Hi @Takato

Sorry for bugging you again!

I noticed some behavior that I wanted to be sure is intended. If possible, I would love an explanation of how this works in the backend.

In my workflow I’m using a Serial For Loop, but when I perform a Get Identity inside, it seems to work and provide the correct output, but if I try to use the data from the output ($.getIdentity.managerRef.id), it always takes the data from the first execution. I would expect to see my Define Variable update with the output from Get Identity in execution 2. Is this correct?

Execution 1:


Execution 2:


I noticed that when running a test workflow with a serial loop, it seems to limit the execution to 50 iterations. Has anyone else encountered this? I couldn’t find any mention of this specific limitation in the documentation, so I wanted to see if this is intended behavior.