> ## Documentation Index
> Fetch the complete documentation index at: https://80x.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Update record

> The Update record block writes new attribute values to a record that already exists in an Attio object.

The **Update record** block writes new attribute values to a record that already exists in an Attio object. You point it at one record and list the attributes you want to change. The block changes only those attributes and leaves every other attribute untouched. The main hazard is updating the same object that triggered the workflow. That write can re-fire the trigger and start a loop.

| | |
| - | - |
| **Category** | Records |
| **Credit cost** | 1 credit |
| **Engine** | New Workflows engine (June 2026+) |
| **Plan availability** | All paid plans |
| **Limits** | None documented. |

## Inputs

| Input | Type | Required | Default | Notes |
| - | - | - | - | - |
| Object | Object reference | Yes | None | The object the record belongs to, such as `Companies` or `Deals`. |
| Record | Record reference | Yes | None | The specific record to update. This is usually a variable from an earlier block, such as the trigger record or a [Find records](/reference/records/find-records) result. |
| Attributes to set | Attribute–value pairs | Yes | None | The attributes to write and their new values. Attributes you leave out are not changed. |
| Replace existing values | Boolean | No | Off | For multi-select attributes, this controls whether the new values replace the existing ones or are added to them. |

## Outputs

| Output | Type | Example | Notes |
| - | - | - | - |
| Updated record | Record | `Acme Corp` | The full record after the write, including attributes you did not change. |

Use the updated record in later blocks as `{{ steps.update_record.record }}`. To read one attribute from it, use dot notation. For example, `{{ steps.update_record.record.stage }}` reads the `stage` attribute.

## Behavior

The block does a partial update. It writes only the attributes you list under **Attributes to set** and keeps every other attribute on the record. Leaving an attribute out is not the same as clearing it. To clear a value, include the attribute and give it an empty value.

For single-value attributes, the new value always replaces the old one. For multi-select attributes (attributes that hold more than one value at once), the **Replace existing values** toggle decides what happens. With the toggle off, the block adds the new values to whatever is already on the record. With the toggle on, the block removes the existing values and writes only the new set.

The block writes using the workflow's own access, not the access of the person who triggered the run. If a workflow has read-only access to the object, it fails at this block instead of writing silently. See [Permissions & workflow access](/explanation/permissions-and-access) for how to grant write access.

## Gotchas

* **The workflow loops on itself.** Updating an attribute on the same object that triggered the workflow can re-fire the trigger. That runs the workflow again, which writes again. Filter the trigger so it ignores changes the workflow itself made. You can also use a trigger that does not react to your own writes. See [Infinite loops and safety](/explanation/infinite-loops-and-safety) for the standard guard.
* **Multi-select values pile up unexpectedly.** With **Replace existing values** off, every run adds to a multi-select attribute. A tag or category list then grows on each pass. Turn the toggle on when you want to set the attribute to an exact list rather than add to it.
* **The block fails on read-only access.** A new workflow has no write access to an object until you grant it. Grant **Read and write** access to the object before you publish. Otherwise the block fails when it runs. See [Permissions & workflow access](/explanation/permissions-and-access).
* **Stale trigger data overwrites a fresh value.** The trigger captures values when it fires. Writing one of those captured values later can overwrite a change made between the trigger and this block. When timing matters, read the current value first with [Find records](/reference/records/find-records).

## Examples

### Assigning a lead to the picked owner

A [Round robin](/reference/workspace/round-robin) block picks the next sales rep. This block then writes that rep onto the lead's `Owner` attribute.

| Field | Value |
| - | - |
| Object | `People` |
| Record | `{{ trigger.record }}` |
| Attributes to set | `Owner` = `{{ steps.round_robin.assignee }}` |
| Replace existing values | Off |

The lead's `Owner` attribute is set to the chosen rep, for example Priya Sharma. The run then continues to a [Create task](/reference/tasks/create-task) block for that owner.

### Replacing a deal's tags with a single status

A deal moves to a new stage. The workflow resets its `Tags` multi-select to one canonical value instead of adding to the existing tags.

| Field | Value |
| - | - |
| Object | `Deals` |
| Record | `{{ trigger.record }}` |
| Attributes to set | `Tags` = `Closed won` |
| Replace existing values | On |

The deal's `Tags` attribute now contains only `Closed won`. Any earlier tags are removed because **Replace existing values** is on.

### Clearing a follow-up date after a reply

A reply arrives. The workflow clears the `Next follow-up` date so the record drops out of a follow-up view.

```json theme={null}
{
  "object": "People",
  "record": "{{ trigger.record }}",
  "attributes": {
    "next_follow_up": null
  },
  "replace_existing_values": false
}
```

The person's `Next follow-up` attribute is emptied. Their `Owner`, `Email`, and every other attribute stay exactly as they were.

## Credit cost worked example

Each run of this block costs 1 credit. Say a workflow updates an owner on every inbound lead, at 600 leads a month. That spends 600 credits on this block alone. The logic and lookup blocks earlier in the same workflow, such as [Round robin](/reference/workspace/round-robin) and [If](/reference/conditions/if), are free, so they add nothing to the total. Compare that 600-credit monthly draw against your plan's allowance on [Credits & pricing explained](/reference/credits-and-pricing).

## Source

[Attio Workflows block library](https://attio.com/help/reference/automations/workflows/workflows-block-library).

Last reviewed against the Attio Help Center, June 2026.

## See also

* [Create or update record](/reference/records/create-or-update-record)
* [Update list entry](/reference/lists/update-list-entry)
* [Find records](/reference/records/find-records)
* [Infinite loops and safety](/explanation/infinite-loops-and-safety)
* [Round-robin lead routing](/guides/route-and-sequence/round-robin-routing)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.