Affinity

What Shuttio reads from Affinity, where it lands in Attio, Clarify, Odoo, HubSpot, Pipedrive, Breakcold, Twenty, Capsule, HighLevel, ActiveCampaign, Zendesk Sell, folk, which permissions it needs and why, and what does not move.

Last updated: 7 Nov 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 OdooIn HubSpotIn PipedriveIn BreakcoldIn TwentyIn CapsuleIn HighLevelIn ActiveCampaignIn Zendesk SellIn folk
PersonsPeoplePeoplePartners (contacts)ContactsPersonsPeoplePeoplePeopleContacts (put into their business)ContactsContacts (put into their organization)People
OrganizationsCompaniesCompaniesPartners (companies)CompaniesOrganizationsCompaniesCompaniesOrganisationsBusinessesAccounts (matched by name, or created with a contact that works there)Organizations (matched by name, else created)Companies
OpportunitiesDealsDealsCRM opportunitiesDealsDealsDealsOpportunitiesOpportunitiesOpportunities (pipeline and stage matched by name)Deals (pipelines and stages created when missing)Deals (pipeline and stage matched by name; the contact is required)Deals (an object in the group Shuttio import)

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 Odoo

FromObjectsNotesTasksMeetingsCallsEmailsFilesOwnersLists
AffinityPersons, Organizations, OpportunitiesYesYesYesYesNoWith an API keyNoNo

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

Into Capsule

FromObjectsNotesTasksMeetingsCallsEmailsFilesOwnersLists
AffinityPersons, Organizations, OpportunitiesYesYesYesYesNoYesNoNo

Into HighLevel

FromObjectsNotesTasksMeetingsCallsEmailsFilesOwnersLists
AffinityPersons, Organizations, OpportunitiesYesYesYesYesNoNoNoNo

Into ActiveCampaign

FromObjectsNotesTasksMeetingsCallsEmailsFilesOwnersLists
AffinityPersons, Organizations, OpportunitiesYesAs notesAs notesAs notesNoNoNoNo

Into Zendesk Sell

FromObjectsNotesTasksMeetingsCallsEmailsFilesOwnersLists
AffinityPersons, Organizations, OpportunitiesYesYesAs notesAs notesNoNoNoNo

Into folk

FromObjectsNotesTasksMeetingsCallsEmailsFilesOwnersLists
AffinityPersons, Organizations, OpportunitiesYesYesYesYesNoNoNoNo

Each destination's own article says how its data is written: Attio, Clarify, Odoo, HubSpot, Pipedrive, Breakcold, Twenty, Capsule, HighLevel, ActiveCampaign, Zendesk Sell, folk.

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.

Affinity into Odoo

  • Organizations and persons: into Odoo partners (res.partner), a person linked to their first organization in a second pass. A partner is matched by domain or email and updated, not duplicated.
  • Opportunities: into CRM opportunities. Each Affinity opportunity list becomes a sales team with its Status values as stages, in Affinity's order; a Status named like won or lost is kept as such (lost ones are archived with a lost reason). An opportunity's organization and first person are linked in a second pass.
  • Notes, reminders and meetings: notes become internal notes in the chatter of the opportunity, person or organization; an open reminder a scheduled To-Do, a completed one a Done entry; a meeting a Calendar event when the Calendar app is installed.
  • Other fields: each of your Affinity fields with no Odoo counterpart goes to an existing writable x_ field you pick, or to a new x_ field when your key has the rights. A field named Deal Size, Amount or Close Date fills the opportunity's revenue and deadline.
  • Files: with the Attachments checkbox ticked, files are copied to the record's attachments through the Odoo API.
  • Lists: Odoo has no place for an Affinity list, so only the opportunity lists move, as sales teams. Other lists and their field values stay in Affinity.
  • Owners and authors: Affinity's API gives no user email for a note or a reminder, so they are written by the connected Odoo user and arrive unassigned.

Not answered here? Email help@shuttio.com.