Affinity to Attio, free.

Persons, organizations, opportunities — and the lists and fields that are where Affinity actually keeps your work.

Connect with
An API key, pasted once and validated against your tenant before anything runs.
Price
Free, at any record count
Moves
8 things, listed below
Doesn’t move
5 things, each with the reason

What moves from Affinity

Each of these is written against the real API rather than a generic model, which is where the depth comes from.

Persons, organizations and opportunities

Straight onto people, companies and deals.

Global fields

Affinity keeps a workspace's own entity-level fields off the record payload and off the list endpoint, so a naive export loses them entirely. They are read separately and arrive as columns on the record.

Lists, with their field values

Each Affinity list becomes an Attio list, and the list's own fields become list attributes carrying each member's value — dropdowns keep their options, numbers and dates keep their types.

Notes and meetings

As Attio notes and meetings, attached to the records they belong to.

And on every migration

Relationships, resolved in a second pass

Records are created first and linked second, so a deal finds its company no matter which order they arrived in. A link whose other end never made it is reported as a skipped row naming what it was waiting for.

Dedup against what is already in Attio

People match on email, companies on domain, custom objects on the unique key you designate. A matched record is updated in place, so running the same migration twice never leaves you two of anything.

A sample run before the real one

Cap the import at the first 50 records, read the result, then promote it to a full run with one click.

Cancel that leaves zero trace

Every record, note, task, meeting, list entry, attribute and select option this migration created is deleted or archived in reverse order. Whatever was in your workspace before is never touched.

5 things that don’t move

Each is a ceiling in an API, not a feature we haven't written yet. You'd find them on day two, so read them now.

Person, organization and location field types

Doesn't move

Affinity lets a list field point at another record; Attio list attributes hold scalars. Those fields are dropped rather than flattened into a name that would look like data.

Custom objects

Doesn't move

Affinity has no such concept — its analogue is lists plus fields, and both migrate in full.

Field history

Doesn't move

Affinity exposes no per-field change log at all, so there is no timeline to read. Current values are what crosses.

Emails

Doesn't move

Attio asks migration tools not to import them — its own inbox sync covers email far better than a one-time copy would, and it keeps working after the migration.

File attachments

Doesn't move

Attio publishes no endpoint for writing files onto a record, so there is nowhere to put them.

Move 50 Affinity records first. Then decide.

Free at any record count. Nothing is written to Attio until you have approved the structure and the field mapping.