---
title: Attio
description: "Log the person or company you're viewing to Attio CRM — create or update records and attach the page as a note."
---

Add or update people and companies in Attio CRM, search them by name, and log notes from the page you are on.

Pick a saved connection in the **Credential** field, or create one from there. It signs in with a Bearer Token.

## What it does

The Attio node works on three kinds of things (**Resource**):

* **Person**: **Create or update** a person, keyed by email, or **Search** people by name.
* **Company**: **Create or update** a company, keyed by domain, or **Search** companies by name.
* **Note**: **Create** a note on a person or company record.

**Create or update** first looks for a record with the same email (people) or domain (companies). If one exists, it is updated; otherwise a new record is created. The result says which happened. Fields you leave empty are not sent, so an update never blanks a value already in Attio.

A **Note** is plain text: your **Note** text, then the **Selection** in quotes, then `Source:` and the **Source URL**, each separated by a blank line. Without a **Title**, the note is called `Note`.

## When to use it

* Log the LinkedIn profile or company site you are viewing as a CRM contact.
* Keep a lead up to date each time you visit their page, without creating duplicates.
* Save a quote from a page as a note on the right person or company.
* Use [HubSpot](/nodes/builtin/integration/hubspot/) or [Pipedrive](/nodes/builtin/integration/pipedrive/) instead if your CRM is there.

## Inputs and settings

Call the Attio API yourself with the HTTP Request node, and pick the same connection in its **Credential** field.

* **Domain** is the bare domain, for example `acme.com`, not a full URL.
* **Search** matches records whose name contains **Query**. Without **Limit**, it returns up to 10 results.
* **Record ID** for a note is the record's id from a previous Attio step, for example `{{ $('Attio').id.record_id }}`.

## Outputs

* **Create or update** returns the record: `id.record_id`, `values` (each attribute as a list of Attio values) and `created`, which is `true` for a new record and `false` for an update. Branch on it with [IF](/nodes/builtin/flow/if/).
* **Search** returns `data`, a list of matching records.
* **Note → Create** returns the note, with its id in `id.note_id`.

## Dependencies and credentials

* **Credential** (connection, Bearer Token): required. See [Connect Attio](/app/connections/attio/).

Use an Attio API key, created in Attio under **Workspace settings → Developers → Access tokens**. It can read and write everything your workspace allows, so keep it secret. Save it as a Bearer Token credential: see [Create a credential](/app/connections/create/).

## Example workflow

1. A [Context Menu](/nodes/builtin/trigger/contextmenu/) trigger runs when you right-click a profile page.
2. [Get All Text](/nodes/extension/getalltext/) reads the page.
3. [Information Extractor](/nodes/builtin/ai/aiagents/informationextractornode/) pulls out `email`, `firstName`, `lastName` and `jobTitle`.
4. Attio, **Person → Create or update**, with **Email** `{{ $input.email }}`, **First name** `{{ $input.firstName }}` and so on.
5. Attio, **Note → Create**, **Attach to** `Person`, **Record ID** `{{ $input.id.record_id }}`, **Note** `Seen on the web`, **Source URL** set to the page URL.

## Common issues

* **"Attio API Error: 401 Unauthorized — the API key is missing or invalid".** The key is wrong or was revoked. Create a new one in Attio and update the credential.
* **A duplicate record was created.** Two **Create or update** steps for the same email or domain ran back to back, before Attio could find the first record. Space them out, or run them one at a time.
* **The run is blocked in the web app.** Attio runs through the browser extension. Install the extension and allow Attio for this workflow when asked, or run the workflow from the extension.

## Related nodes

* [Information Extractor](/nodes/builtin/ai/aiagents/informationextractornode/): turn page text into contact fields.
* [HubSpot](/nodes/builtin/integration/hubspot/) and [Pipedrive](/nodes/builtin/integration/pipedrive/): other CRMs.
* [Http Request](/nodes/builtin/core/http-request/): call Attio API endpoints this node does not cover.