Batch Operations

Batch nodes process multiple items efficiently in a single step. Instead of using a For Each loop (which processes one item at a time), batch nodes handle arrays in bulk with configurable concurrency and error handling.

Batch vs. For Each

FeatureFor EachBatch
ProcessingOne item at a time, sequentialMultiple items in parallel
SpeedSlower (1 by 1)Faster (configurable concurrency)
Error handlingStops on first error (by default)Continue despite errors, report at end
Use whenEach item needs complex multi-node processingEach item needs a single operation
Sub-nodesCan contain multiple nodesSingle operation per batch

Configuration

FieldTypeRequiredDescription
Input arrayFX formulaYesThe array to process, e.g., {{find_all.records}}
OperationSelectYesWhat to do with each item (see operations below)
ConcurrencyNumberNoHow many items to process simultaneously. Default: 5. Max: 50.
On errorSelectNoStop all (default), Skip and continue, or Retry then skip
Retry attemptsNumberNoNumber of retries per failed item (when "Retry then skip" is selected). Default: 3.

Operations

Batch HTTP Request

Send the same HTTP request for each item in the array:

FieldDescription
MethodGET, POST, PUT, PATCH, DELETE
URLURL template with variables: https://api.example.com/users/{{item.id}}
BodyJSON body template with variables
HeadersStatic or variable headers

Batch Create Record

Create multiple database rows at once:

FieldDescription
ConnectionDatabase connection
TableTarget table
Field mappingMap input array fields to table columns

Batch Update Record

Update multiple rows based on a matching key:

FieldDescription
Match onWhich field to match (e.g., email or id)
Fields to updateWhich columns to update with new values

Batch Delete Record

Delete rows matching each item:

FieldDescription
Match onWhich field identifies the row to delete

Output variables

{{batch.results}}          → array of results (one per input item)
{{batch.succeeded}}        → count of successful items
{{batch.failed}}           → count of failed items
{{batch.errors}}           → array of error details for failed items
{{batch.total}}            → total items processed

Error handling modes

Stop all

Stops processing immediately when any item fails. Items already processed stay processed; there's no rollback.

Skip and continue

Skip the failed item and continue with the rest. Failed items are reported in {{batch.errors}} at the end.

Retry then skip

Retry failed items up to N times with exponential backoff. If all retries fail, skip and continue.

Common patterns

Bulk API sync

Find All (contacts updated today) → Batch HTTP Request →
  POST to CRM API for each contact (concurrency: 10) →
  If-Else (any failures?) → Send Email (report failed syncs)

Bulk enrichment

CSV Import → Filter (rows without company data) →
  Batch HTTP Request (enrichment API, concurrency: 5) →
  Batch Update Record (write enrichment data back)

Data cleanup

Manual Trigger → Find All (inactive users, older than 1 year) →
  Batch Delete Record (concurrency: 20) →
  Log (deleted {{batch.succeeded}} inactive users)

Performance tips

TipWhy
Start with low concurrencySet concurrency to 5 during testing, increase after confirming it works
Respect API rate limitsIf the target API allows 50 req/sec, set concurrency to 40 (leave headroom)
Use batch over For EachFor simple single-operation processing, batch is faster
Keep For Each for complex chainsWhen each item needs 3-4 different operations, For Each gives more control
Warning

Batch operations with high concurrency can overwhelm external APIs. Always check the target API's rate limits before setting concurrency above 10. Getting rate-limited (429 errors) wastes credits and time.

Note

Batch Create and Batch Update record operations are atomic per-item, not per-batch. If 3 out of 100 items fail, the other 97 are already saved. There's no batch-level rollback.