How it works
- You provide an array as input (e.g., a list of contacts, domains, or any collection)
- The Group node unpacks the array and runs its child actions for each item in parallel
- Each iteration has access to the current item via
nodes.start - Results are collected and returned as an array
Unlike a traditional loop, Group processes all items simultaneously. This
makes it much faster but means you cannot depend on one item’s result to
process another.
Configuration
| Property | Description |
|---|---|
| Items | The array to iterate over. Use an expression like {{nodes.search.results}} or {{nodes.start.list}} |
| Fail on item failure | If enabled, the entire Group fails when any single item fails. If disabled, failed items return null and the Group continues. |
Accessing data inside the Group
Inside the Group node, you have access to the current item and can reference parent data:Current item
| Variable | Description | Example value |
|---|---|---|
nodes.start | The current item being processed | { name: "Acme" } |
nodes.start.field | Access a specific field on the item | "acme.com" |
Parent data with parentNodes
When you need to reference data from nodes outside the Group (parent context), use parentNodes:
| Expression | Description |
|---|---|
nodes.start | The current item in the Group |
parentNodes.{node_name} | Access nodes outside the current Group |
parentNodes.start | Access the original tool/play input |
Common use cases
Company to contact workflows
The most common pattern is starting with company data and expanding to contact-level operations: Find and enrich stakeholders:- Start → Receive company domain
- Find Contacts → Get list of contacts at the company
- Group → Iterates over contacts in parallel
- Enrich Contact → Enrich
{{nodes.start.email}} - Score Lead → Calculate fit score
- Use
parentNodes.enrich.company_namefor company context
- Enrich Contact → Enrich
- Start → Receive company with matched ICP
- Find Decision Makers → Get relevant stakeholders
- Group → Process each contact
- Personalize Message → Generate outreach using
parentNodesfor company context - Add to Campaign → Enroll in sequence
- Create CRM Contact → Push to HubSpot/Salesforce
- Personalize Message → Generate outreach using
Batch enrichment
Enrich multiple records from a search:- Model Search → Returns array of companies
- Group → Processes all companies in parallel
- Clearbit Enrich → Enriches
{{nodes.start.domain}} - Model Custom Column → Saves enrichment data
- Clearbit Enrich → Enriches
Aggregate data from multiple sources
Fetch data from multiple APIs simultaneously:- Variables → Define array of API endpoints
- Group → Calls all endpoints in parallel
- HTTP Request → Calls
{{nodes.start.url}}
- HTTP Request → Calls
- JavaScript → Combines all results
Output and results
The Group returns an array containing the output of the last node executed for each item.| Scenario | Result |
|---|---|
| Item processed successfully | The output of the last node in the Group |
| Item failed | null (if “Fail on item failure” is disabled) |
| All items failed | Array of null values |
| Expression | Returns |
|---|---|
{{nodes.group}} | Full array of results |
{{nodes.group[0]}} | First item’s result |
{{nodes.group.length}} | Number of items processed |
Replace
group with the actual name of your Group node if you’ve renamed it.Error handling
Control how the Group behaves when individual items fail:| Setting | Behavior |
|---|---|
| Fail on item failure: On | Entire Group fails immediately when any item errors |
| Fail on item failure: Off | Group continues; failed items return null in results |
Rate limiting
Cargo automatically handles rate limits when calling external APIs within Groups. If an API returns a rate limit error, Cargo will:- Pause the affected request
- Wait for the appropriate cooldown period
- Retry automatically
Testing Groups
When testing a workflow that contains a Group, only a single test item is selected from the array—not all items. This allows you to verify your logic works correctly without processing the entire items.During testing, the Group runs with one sample item to validate your workflow.
In production, it processes all items in the array.
Best practices
Filter before grouping
Filter before grouping
Use a Filter or JavaScript action to remove unwanted items before the Group.
Processing fewer items is always faster and cheaper than filtering inside
the Group.
Keep Group bodies lightweight
Keep Group bodies lightweight
Minimize the number of actions inside a Group. If you need complex logic,
consider creating a separate tool and calling it from within the Group.
Use parentNodes for context
Use parentNodes for context
When processing contacts for a company, use
parentNodes to access
company-level data like name, industry, or enrichment results.Handle null results
Handle null results
When “Fail on item failure” is disabled, always check for
null values in
results. Use a JavaScript action to filter and handle failures
appropriately.Example: Stakeholder enrichment and outreach
A complete workflow that finds contacts at a company, enriches them, and adds to a campaign:-
Start — Receives
{ company_domain: "acme.com", company_name: "Acme Inc" } - Find Contacts — Returns array of contacts at the company
-
Group — Processes each contact in parallel
-
Enrich Contact — Enriches
{{nodes.start.email}} -
JavaScript — Builds personalized message using:
- Add to Campaign — Enrolls contact with personalized content
-
Enrich Contact — Enriches
- JavaScript — Summarizes results

