IntegrationsCRM
Attio
Mirror Kaiten customers and instances into Attio — connect with an API token, choose a sync policy, map fields onto attributes of your workspace, and follow each record's sync state.
The Attio connector mirrors Kaiten into Attio, in one direction: a Customer becomes an Attio Company, and an Instance an Attio Workspace record linked to that company. Kaiten is the source of truth for both; Attio follows, so sales and customer-success teams read the customer base where they already work.
The connector ships inside Kaiten, on Kaiten Cloud and on the Community Edition alike, and runs on the event stream. It is inert for your organization until you connect it: nothing is sent to Attio before that.
What it syncs
| In Kaiten | In Attio |
|---|---|
| A Customer is created | A Company record is created, and linked to the Customer |
| A Customer is updated | Its Company record is updated |
| An Instance is created | A Workspace record is created, linked to the Company of its customer |
| An Instance is updated | Its Workspace record is updated |
The connector reacts to four events — CUSTOMER_CREATED, CUSTOMER_UPDATED, INSTANCE_CREATED, INSTANCE_UPDATED — from the moment it is connected. Three limits follow from that:
- No backfill. A customer or an instance that existed before the connection is mirrored at its next update, when the sync policy allows it.
- No deletion. Deleting a customer or an instance in Kaiten leaves its Attio record in place.
- Nothing flows back. A change made in Attio changes nothing in Kaiten.
Fields
Five fields are always synced:
| Kaiten field | Attio object | Attio attribute |
|---|---|---|
| Customer name | Company | name |
| Customer domain | Company | domains |
| Instance ID | Workspace | workspace_id |
| Instance name | Workspace | name |
| The Company record of the customer | Workspace | company |
Eight more can be mapped, each onto an attribute that already exists in your Attio workspace — Kaiten creates no attribute, and writes every mapped value as text:
| Kaiten field | Attio object |
|---|---|
| Customer ID | Company |
| Instance slug | Workspace |
| License type, License name | Workspace |
License start and end dates, as YYYY-MM-DD | Workspace |
| Deployment zone | Workspace |
| Lifecycle stage | Workspace |
Connect Attio
You need an API token of your Attio workspace. The Attio connector names no entitlement: it is included in every License — the editions page shows where native connectors sit — so no License check refuses the connection, on Kaiten Cloud or on a self-hosted stack.
Open the connector
Open Integrations → Connectors. The Attio tile reads Available: click Connect.
Give the token and choose a sync policy
On the wizard's Connect step, paste the Attio API token and choose a Sync policy — what an update does when the Kaiten record has no Attio counterpart yet:
- Create & bind (recommended) creates the missing record and links it. It is what brings in the customers and instances created before the connection.
- Fail & retry creates nothing on an update and asks for the event again, for a team that wants a missing counterpart looked at rather than created.
Click Continue.
Map the fields
On the Schema step, the five default mappings are listed under Always synced (defaults). Under Optional field mappings, click Add field mapping to pair a Kaiten source field with the slug of an Attio attribute — lowercase snake_case, and created in Attio beforehand. A source field is mapped once, and two fields of the same Attio object cannot target the same attribute.
Finish
Click Finish. Saving the settings also activates the connector for your organization, and the console opens the connector's page. The token is kept in the secret store — Vault, or its local stand-in on a Community Edition stack — never in the database, and no read returns it: the console does not show it again, and the API answers ***.
Follow the sync
On Integrations → Connectors, the Attio tile now reads Connected: click Manage. The connector's page shows the Sync policy, the number of Field mappings — the pencil beside it edits them, for future syncs — and Synced records: every customer and instance linked to an Attio record, with the Attio object, the record id, the time of the last sync, and a status, Synced or Error. A row in error opens the message Attio returned.
The same state follows each record through the console. On the Customers and Instances lists, the CRM Sync column marks the records linked to Attio; the page of a linked customer or instance carries an Attio Synchronization card with its sync status, its last sync, and View in CRM, which opens the record in Attio.
Over the API, the link is the customer's or the instance's integration link for the adapter — GET /customers/{customerSlug}/integrations/kaiten.integration.crm.attio — with the Attio record ID as external_id, a web_url, synced_at, and last_error when a sync failed for good.
Disconnect
Disconnect, on the connector's page, asks for confirmation, then deletes the stored token, sync policy and field mappings, and deactivates the connector. Future changes are no longer sent; the records already created in Attio are kept.
Coming soon
Two extensions of the connector are on the roadmap Coming soon, and neither is available today:
- Attio → Kaiten. A deal won in Attio creating the Customer and its Instance in Kaiten, for teams whose CRM owns the customer record.
- Usage and renewal signals. Usage against the grants and threshold crossings written onto the Company record.
Until then, webhooks on Kaiten Cloud and the event stream on a self-hosted stack carry every domain event, enough to build either one yourself.