HubSpot to Attio, free.
Contacts, companies, deals, products, tickets and your portal's own objects — with the associations intact.
- Connect with
- OAuth. Pick the portal, approve the scopes, disconnect whenever you like.
- Price
- Free, at any record count
- Moves
- 11 things, listed below
- Doesn’t move
- 5 things, each with the reason
What moves from HubSpot
Each of these is written against the real API rather than a generic model, which is where the depth comes from.
Contacts, companies and deals
Every property the portal reports, mirrored into Attio with the fields you kept. Contacts land as people.
Products, line items, tickets, quotes and leads
Each lands in an Attio object with a fixed shape, or in the one you already have when its name matches. Products stand alone, line items link to their deal and product, tickets to their companies, contacts and deals, and quotes to their deals and companies. Leads go where you choose: people, deals at the stage Lead, or their own object.
Your portal's own custom objects
Discovered from the portal schema, not from a list we maintain. The property HubSpot enforces uniqueness on becomes the dedup key, so re-running updates rather than duplicates.
Associations, in full
Read through the v4 batch association API with paging. The inline association parameter on a record read silently truncates a contact with hundreds of associations; this does not.
Notes, tasks and meetings
As Attio notes, tasks and meetings. Note bodies re-sync on a later run, and a note you moved in HubSpot moves in Attio.
Lists, static and dynamic
Members become Attio list membership. A dynamic list crosses as a snapshot of who was in it at the moment of the run, and its filter conditions ride along as text.
Property history
Optional. Each property's past values arrive as Attio value history, so a stage change from March still reads as March. Requested on the batch read the import already makes.
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
A connected CRM imports the first 50 records of each object, you read the result, then one click runs the rest. A CSV imports in full, free, and rolls back if it is wrong.
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.
A dynamic list's filter itself
Doesn't moveAttio has no filtered-membership API and no list description field, so the rule cannot be recreated. You get the members and the conditions in writing.
History on a property the portal will not report
Doesn't moveSome portals lower or refuse the history batch. The import falls back to current values and tells you in the summary rather than reporting a silent zero.
Emails
Doesn't moveAttio 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 moveAttio publishes no endpoint for writing files onto a record, so there is nowhere to put them.
Goals, invoices, payments, carts and other commerce or admin records
Doesn't moveThey track billing and internal targets rather than customer relationships, and Attio has no object shaped for them. Pipelines and stages already arrive as each deal's status.
Moving from somewhere else
Pipedrive
Persons, organizations, deals, products and projects, and the activities you have been tracking as both meetings and tasks.
Affinity
Persons, organizations, opportunities — and the lists and fields that are where Affinity actually keeps your work.
Salesforce
Accounts, contacts, leads, opportunities, cases and campaigns, your __c objects, and both kinds of note.
CSV
A spreadsheet from anywhere, including the CRM that has no API worth using.
Move 50 HubSpot records first. Then decide.
Free at any record count. Nothing is written to Attio until you have reviewed the objects and fields, and every run starts as a free 50-record sample.