The For Each Loop task lets you make repeated calls to a sub-integration from
your current (main) integration. The task iterates over the configured array variable and calls
the sub-integration for each element in the array. The number of times
the sub-integration is called is equal to the size of the array variable.
The API Trigger ID and the Integration name identifies the sub-integration you
want to run.
The task also lets you collect the response from each sub-integration run and store the value in your
current integration for use in downstream tasks. You can use any of the following approach to collect the responses:
Collate the response of each run in an array variable, where each element of the array has the
response from one particular run. To collate the responses, configure
the Collect values from sub-integration output(s) property.
Aggregate the responses of all the runs in a single variable. To aggregate the responses, configure
the Response parameter override mapping property.
Before you begin
Ensure that you have attached a user-managed service account to your integration. If your integration does not have user-managed service account configured, then by default the default service account (service-PROJECT_NUMBER@gcp-sa-integrations.iam.gserviceaccount.com) is used for authentication.
Ensure that your service account has the Application Integration Invoker IAM role. For information about granting roles to a service account, see Manage access to service accounts.
Configuration properties
The following table describes the configuration properties of the For Each Loop task.
Property
Data type
Description
API Trigger ID
String
Trigger ID of the sub-integration to run.
This value is available in the Trigger ID field of the API Trigger
in the sub-integration.
Integration name
String
Name of the sub-integration to run.
List to iterate
An array of type Boolean, String, Integer, Double, or JSON.
List of values for which the sub-integration should run. The
sub-integration runs for each value in the list, one after the other.
You can pass the iterated value to the sub-integration by setting the
Iteration element sub-integration mapping property. In this property, specify
the variable in the sub-integration to which the iterated value must be mapped.
Iteration element sub-integration mapping
N/A
Variable in the sub-integration for which the current iterated element must be assigned.
Map to additional sub-integration input(s)
N/A
Additional values to pass from the current integration to the sub-integration.
The values of this property are in the form of key-value pairs, where the key is a variable
in the current integration, and the value is the corresponding input variable in the
sub-integration. For example, suppose
your main integration has the productID variable, which you want to map to the
subIntProductID sub-integration variable; you would
select productID from the Integration variable to map from
drop-down and select subIntProductID in the Subintegration input
to map to drop-down.
Collect values from sub-integration output(s)
N/A
Collate the results of the sub-integration runs.
Every time the sub-integration runs,
you can store the output of the sub-integration in an array variable of the current integration.
Select the sub-integration's output variable from the Sub-integration output to collect from
drop-down and the array variable in current integration from the
Integration variable to collect into drop-down. Each element of the array has the response from a
particular sub-integration run. For example, if the array variable is resultsArray,
resultsArray[0] has the response from the first run and resultsArray[1] has
the response from the second run.
Response parameter override mapping
N/A
Read the output variable of a sub-integration run and store it in a variable of
the current integration.
Select the sub-integration's output variable from the Sub-integration output to map from
drop-down, and select the corresponding variable in the current integration from the
Integration variable to override drop-down. You can send the overridden variable in the current integration
to the next sub-integration run by mapping the variable in the Map to additional sub-integration
input(s) property. As a result, you can cumulatively aggregate the responses from the
sub-integration runs.
Loop metadata
JSON array
The output variable that has the execution details of the sub-integrations like sub-integration
execution ID, errors messages, and variable values passed during execution. Loop metadata contains variables including the following output variables: current_iteration_count, sub_integration_execution_ids, failure_location, current_element, iteration_element, and failure_message.
Best practices
For information about the usage limits that apply to the For Each Loop task, see Usage limits.
Error handling strategy
An error handling strategy for a task specifies the action to take if the task fails due to a temporary error. For information about how to use an error handling strategy, and to know about the different types of error handling strategies, see Error handling strategies.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-26 UTC."],[[["\u003cp\u003eThe For Each Loop task allows repeated execution of a sub-integration for each element within an array variable, where the number of iterations equals the array's size.\u003c/p\u003e\n"],["\u003cp\u003eSub-integrations are identified by their API Trigger ID and Integration name, and the task provides mechanisms to collect and utilize responses from each sub-integration run, including collating into an array or aggregating into a single variable.\u003c/p\u003e\n"],["\u003cp\u003eThe For Each Loop task has limits, including a maximum of 8000 iterations and a cumulative data collection size limit of 50 MB across all sub-integration runs.\u003c/p\u003e\n"],["\u003cp\u003eFailure of any sub-integration run within the For Each Loop task results in the failure of the entire task, though this can be mitigated through the use of an Execution strategy in the Join configuration.\u003c/p\u003e\n"],["\u003cp\u003eProper setup requires ensuring a user-managed service account is attached to the integration, with the service account having the necessary Application Integration Invoker IAM role.\u003c/p\u003e\n"]]],[],null,["# For Each Loop task\n\nSee the [supported connectors](/integration-connectors/docs/connector-reference-overview) for Application Integration.\n\nFor Each Loop task\n==================\n\nThe **For Each Loop** task lets you make repeated calls to a sub-integration from\nyour current (main) integration. The task iterates over the configured array variable and calls\nthe sub-integration for each element in the array. The number of times\nthe sub-integration is called is equal to the size of the array variable.\n\nThe **API Trigger ID** and the **Integration name** identifies the sub-integration you\nwant to run.\n\nThe task also lets you collect the response from each sub-integration run and store the value in your\ncurrent integration for use in downstream tasks. You can use any of the following approach to collect the responses:\n\n- Collate the response of each run in an array variable, where each element of the array has the response from one particular run. To collate the responses, configure the `Collect values from sub-integration output(s)` property.\n- Aggregate the responses of all the runs in a single variable. To aggregate the responses, configure the `Response parameter override mapping` property.\n\n| **Note** :\n|\n| - A **For Each Loop** task can run a maximum of 8000 iterations.\n| - The cumulative size of the data collected from each sub-integration run cannot exceed `50 MB`. If the size exceeds `50 MB`, the integration fails, and the downstream tasks are not run.\n| - If an integration in the **For Each Loop** task fails, then the entire task fails, and the downstream tasks are not run. To prevent failure of the entire integration you can specify an **Execution strategy** for the task in its *Join configuration pane* . See [Join](/application-integration/docs/forks-joins#join) for more details.\n\nBefore you begin\n----------------\n\n- Ensure that you have [attached a user-managed service account](/application-integration/docs/access-control#add-service-account) to your integration. If your integration does not have user-managed service account configured, then by default the [default service account](/application-integration/docs/access-control#default-service-account) (`service-`\u003cvar translate=\"no\"\u003ePROJECT_NUMBER\u003c/var\u003e`@gcp-sa-integrations.iam.gserviceaccount.com`) is used for authentication.\n- Ensure that your service account has the **Application Integration Invoker** IAM role. For information about granting roles to a service account, see [Manage access to service accounts](/iam/docs/manage-access-service-accounts).\n\nConfiguration properties\n------------------------\n\n\nThe following table describes the configuration properties of the **For Each Loop** task.\n\nBest practices\n--------------\n\nFor information about the usage limits that apply to the **For Each Loop** task, see [Usage limits](/application-integration/docs/quotas#usage-limits).\n\nError handling strategy\n-----------------------\n\n\nAn error handling strategy for a task specifies the action to take if the task fails due to a [temporary error](/application-integration/docs/error-handling). For information about how to use an error handling strategy, and to know about the different types of error handling strategies, see [Error handling strategies](/application-integration/docs/error-handling-strategy).\n\nQuotas and limits\n-----------------\n\nFor information about quotas and limits, see [Quotas and limits](/application-integration/docs/quotas).\n\nWhat's next\n-----------\n\n- Learn about [all tasks and triggers](/application-integration/docs/all-triggers-tasks).\n- Learn how to [test and publish an integration](/application-integration/docs/test-publish-integrations).\n\n- Learn about [error handling](/application-integration/docs/error-handling-strategy).\n- Learn about [integration execution logs](/application-integration/docs/introduction-logs)."]]