Unify Logo Footer.svg
Unify Automations
Logo
Bulk Upsert

Bulk Upsert

Logo

2 mins READ

Bulk Upsert writes a batch of records to a UnifyApps Storage object in one step, updating each record that already exists by its ID and creating any that do not — reporting per-record results so failures are visible without stopping the rest of the batch.

Overview

The Bulk Upsert action applies upsert logic to many records at once. Each record in the input list is matched by its ID: existing records are updated, records with no matching ID are created. The action processes each record independently and reports back detailed results — how many records succeeded, how many failed, and a per-record error for each failure. A few bad rows do not silently sink the whole batch; successful records are written regardless of which others failed. Like single Upsert Record, the same per-field blank and null handling options apply across the batch.

BulkUpsert-1 1.png
BulkUpsert-1 1.png

Input

Field

Description

Required

Object

The Storage object (table) to write the batch of records into.

*

Records

A list of records to upsert. Each record should include an ID (used for matching) and the field values to write. An empty ID forces a create with a system-generated ID.

*

Skip if blank

Per-field option applied across all records in the batch. When enabled for a field, the field is skipped if its value is empty or null.

Unset if null

Per-field option applied across all records in the batch. When enabled and a field value is genuinely null, the field is removed rather than stored as null.

BulkUpsert-2 1.png
BulkUpsert-2 1.png

Output

Per-record results for the entire batch: the number of records that succeeded, the number that failed, and a specific error for each failed record. Successful records are written to the Storage object regardless of which other records in the batch failed.

BulkUpsert-3 1.png
BulkUpsert-3 1.png

Notes

Keep the following in mind when using Bulk Upsert.

  • A few bad rows do not stop the whole batch — each record is processed independently, and failures are reported without blocking the records that succeeded.

  • The output includes a succeeded count, a failed count, and per-record error details for any failures; map these to a downstream step when reliability matters.

  • Like single Upsert Record, matching is by record ID: an empty ID forces a create with a system-generated ID, and a matching ID forces an update.

  • An empty string in any field is stored as-is across all records — it is not treated as null.

  • Bulk Upsert is the recommended approach when persisting many records in a single automation step rather than looping over individual Upsert Record calls.

Inspect the per-record error details in a downstream step — for example, log failures to a separate Storage object or trigger an alert — rather than assuming all records succeeded because the step itself completed without a top-level error.

FAQs

Does a single failed record cancel the whole batch?

No. Each record is processed independently. Failures are reported in the output alongside the records that succeeded; they do not roll back or block the rest of the batch.

How do I find out which records failed?

The output includes a failed count and per-record error details for each failure. Map the output to a downstream step — for example, log the errors to another Storage object or send an alert — to handle failures programmatically.

When should I use Bulk Upsert instead of looping over single Upsert Record steps?

Use Bulk Upsert when you have a list of records to persist in one step — it is more efficient than iterating and produces a single structured output with per-record results. Loop over single Upsert Record only when each record requires its own conditional logic or branching between upserts.