Affinity

What Shuttio reads from Affinity, where it lands in Attio, Clarify, HubSpot, Pipedrive, Breakcold, Twenty, which permissions it needs and why, and what does not move.

Last updated: 28 October 2026

An API key, pasted once and validated against your tenant before anything runs.

Object by object: What objects are supported for Affinity migrations.

What Shuttio reads and moves

The list below describes the move into Attio. Where Clarify or Odoo differ, the destination's own article says so.

  • 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.
  • Reminders and calls: Reminders become tasks. A logged call lands in Attio's Phone calls (a note when the workspace has not allowed activities). Both attach to the records they belong to. Finding calls takes one request per person, so that step is slow in a large workspace.

Where each thing lands

Affinity objectIn AttioIn ClarifyIn HubSpotIn PipedriveIn BreakcoldIn Twenty
PersonsPeoplePeopleContactsPersonsPeoplePeople
OrganizationsCompaniesCompaniesCompaniesOrganizationsCompaniesCompanies
OpportunitiesDealsDealsDealsDealsDealsOpportunities

Notes, tasks, meetings, calls, files, owners and lists depend on the destination. This is the row for Affinity, generated from the same tables the runner uses:

Into Attio

FromObjectsNotesTasksMeetingsCallsEmailsFilesOwnersLists
AffinityPersons, Organizations, OpportunitiesYesYesYesYesNoYesNoYes

Into Clarify

FromObjectsNotesTasksMeetingsCallsEmailsFilesOwnersLists
AffinityPersons, Organizations, OpportunitiesYesYesAs commentsAs commentsNoYesNoAs fields

Into HubSpot

FromObjectsNotesTasksMeetingsCallsEmailsFilesOwnersLists
AffinityPersons, Organizations, OpportunitiesYesYesYesYesNoYesNoYes

Into Pipedrive

FromObjectsNotesTasksMeetingsCallsEmailsFilesOwnersLists
AffinityPersons, Organizations, OpportunitiesYesYesYesYesNoYesNoNo

Into Breakcold

FromObjectsNotesTasksMeetingsCallsEmailsFilesOwnersLists
AffinityPersons, Organizations, OpportunitiesYesYesYesYesNoNoNoNo

Into Twenty

FromObjectsNotesTasksMeetingsCallsEmailsFilesOwnersLists
AffinityPersons, Organizations, OpportunitiesYesYesAs notesAs notesNoYesNoNo

Each destination's own article says how its data is written: Attio, Clarify, HubSpot, Pipedrive, Breakcold, Twenty.

Permissions and why

WhatWhy Shuttio needs it
An API keyAffinity has no OAuth. Shuttio checks the key against your tenant before it saves anything. Get it in Affinity under Settings → API.

Known limits

  • Person, organization and location field types: 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: Affinity has no such concept — its analogue is lists plus fields, and both migrate in full.
  • Field history: Affinity exposes no per-field change log at all, so there is no timeline to read. Current values are what crosses.
  • Emails: Affinity's API returns an email's subject and recipients but never its body, so Shuttio imports none.
  • Large and linked files: a file over 50 MB, and an entry that is only a link, is listed as a failed row and not copied.

Not answered here? Email help@shuttio.com.