TL;DR
The records are the easy part of moving from Attio. What needs a plan is the structure around them: two-way relationships, lists that carry their own fields on every entry, and custom attributes whose types HubSpot names differently.
Choose a HubSpot home for each list before you export, because a segment cannot hold entry-level data. Load companies before contacts so the primary company is right, keep the Attio ID on every record, and settle early that emails are not part of the export.
Attio to HubSpot Migration: What Happens to Relationships Lists and Custom Attributes?
Attio and HubSpot both store people, companies and deals, so an Attio to HubSpot migration can look like a simple export and import. It rarely is. Attio's data model is built around flexible objects, two-way relationship attributes and lists that carry their own fields on each entry. HubSpot models the same ideas with objects, properties, associations and segments. The records move easily. The structure around them is what needs a plan.
This guide explains why teams move from Attio to HubSpot, what data can be migrated, how Attio relationships map to HubSpot objects and associations, how to handle lists and custom attributes, the common challenges, and how to validate the result once the data has landed.
Why Migrate from Attio to HubSpot?
Most teams that leave Attio are not unhappy with it as a database. They move because the CRM has to do more than hold records. Marketing wants email, forms and lead scoring in the same system as sales. Service wants tickets attached to the same companies. Leadership wants one set of reports across the funnel rather than exports stitched together in a spreadsheet.
HubSpot puts marketing, sales, service and reporting on one shared CRM, so a contact's form submissions, deals, tickets and emails sit on the same record. For a growing team, that removes integrations that were only there to move data between tools.
Common triggers for an Attio CRM migration include:
- Consolidation: The team already uses HubSpot for marketing and wants sales data in the same place.
- Process maturity: Sales has grown to the point where it needs structured pipelines, sequences, approval steps and forecasting.
- Reporting: Leadership wants cross-object reports, such as revenue by campaign source, without manual joins.
- Service: Customer support needs tickets linked to the same company and contact records that sales uses.
It also helps to be clear about what is staying the same. The records, the relationships between them and the fields your team relies on all have a home in HubSpot. What changes is the shape: lists become segments, properties or pipelines, relationship attributes become associations, and some flexibility in how Attio lets users build their own views gives way to a more structured model that marketing, sales and service can all share.
None of these reasons require you to give up what made Attio useful. They do require you to translate Attio's structure into HubSpot's, which is what the rest of this guide covers.
What Data Can Be Migrated from Attio to HubSpot?
To migrate Attio data to HubSpot, start with what Attio lets you take out. Attio's help center explains that workspace admins can export workspace data from Workspace settings, and that the export arrives as a zip file of CSV files. Attio lists the contents as including companies, people, deals, users, workspaces, custom objects, lists, list attributes, attribute options, notes, tasks, comments and files. Attio states that the workspace export is available on all plans but restricted to admins.
There are gaps. Attio notes that emails cannot be exported, and that meetings and call recordings can only be exported through its API. If email history matters, plan to rely on HubSpot's own inbox connection going forward, or decide that historical emails stay archived outside the CRM.
|
Attio data |
HubSpot destination |
Notes |
|---|---|---|
|
People |
Contacts |
Email is HubSpot's main deduplication key for contacts |
|
Companies |
Companies |
Domain is HubSpot's deduplication key for companies |
|
Deals |
Deals |
Map Attio deal stages to a HubSpot pipeline first |
|
Custom objects |
Custom objects, or a standard object |
HubSpot custom objects need an Enterprise subscription |
|
Lists and list entries |
Segments, properties, or pipelines |
See the section on lists below |
|
Notes, tasks, comments |
Notes and tasks on the matching records |
Plan how comments are represented |
|
Files |
Files attached to records |
Check file size and count limits |
|
Emails |
Not available in the Attio export |
Reconnect inboxes in HubSpot instead |
|
Workspace members |
HubSpot users |
Create users before importing owners |
Two decisions shape everything after this table. First, which Attio custom objects need a HubSpot custom object and which can live as a company, deal or ticket. Second, how each Attio list will be represented, because HubSpot has no direct equivalent of a list entry with its own fields.
How Attio Relationships Map to HubSpot Objects
Attio links records in two ways. Its help center describes a relationship attribute as one that establishes a bidirectional relationship between records and updates both sides, and notes that relationship attributes can only be created at the object level. A record attribute, by contrast, references another record as a value and can allow multiple values.
HubSpot handles links between records with associations. HubSpot's knowledge base states that associations are always two-way: if record A is associated to record B, record B is also associated to record A. That makes Attio relationship attributes a natural fit for HubSpot associations. Attio record references, which are one-way in Attio, also become associations in HubSpot, and gain a reverse side they did not have before.
|
Attio structure |
HubSpot equivalent |
What to check |
|---|---|---|
|
Person to company relationship |
Contact to company association |
Which company becomes the primary company |
|
Deal to person or company |
Deal to contact and company associations |
All participants are carried over |
|
Relationship attribute between custom objects |
Association between custom objects |
Association is defined before import |
|
Record reference with multiple values |
Multiple associations |
Optional association labels to name the role |
|
Relationship with a role (e.g. "Champion") |
Association label |
Labels need Professional or Enterprise |
Primary company. HubSpot gives each contact a primary company, and by default the first company associated becomes the primary one. HubSpot uses the primary company for activity logging, lifecycle stage syncing and some reports. If a person in Attio is linked to several companies, decide in advance which one should be primary, and import that association first.
Association labels. Where an Attio relationship carries meaning beyond the link itself, such as a champion, a billing contact or an advisor, use HubSpot association labels. HubSpot notes that labels are available on Professional and Enterprise subscriptions.
Custom objects. Attio lets teams create their own objects alongside people, companies and deals, and many workspaces use them for things like investors, partners or subscriptions. HubSpot's data model guidance recommends checking each entity against the standard objects first and creating custom objects only for what they cannot handle. HubSpot also states that an Enterprise subscription is required to create custom objects. In practice, an Attio "Partners" object often fits as a company with a label or a property, while an object with its own lifecycle and its own one-to-many links to other records is a better candidate for a HubSpot custom object. Make this call per object before the mapping sheet is written, because it changes every association that touches that object.
Import order. Load companies first, then contacts, then deals and custom objects, then associations. Keep the Attio record ID on every HubSpot record as a unique property so each association can be matched to the right record, and so later reimports update rather than duplicate.
Migrating Lists and Custom Attributes
Lists are where Attio and HubSpot differ most. Attio's help center describes a list entry as an instance of a record within a list, where list-specific attribute values are stored. Object attributes live on the record. List attributes live on the entry. Attio also notes that each list works with a single object type and that the same record can appear more than once in a single list.
HubSpot segments (formerly called lists) do not hold their own fields. HubSpot describes them as a way to group records based on property values and other characteristics, either as active segments that update automatically or static segments with fixed membership. So an Attio list with list attributes cannot simply become a HubSpot segment without losing the entry-level data.
Choose one of three patterns for each Attio list:
- Segment: For lists that are simple groupings with no list attributes, such as "Q3 conference contacts". Recreate them as static segments, or as active segments if the membership can be expressed as criteria.
- Properties on the record: For lists where each record appears once and the list attributes describe the record, such as a fit score. Create the list attributes as properties on the HubSpot object and add a property that flags membership.
- Pipeline or custom object: For lists that track a process with stages, such as a fundraising or hiring pipeline, or where the same record appears more than once. Use a deal pipeline, or a custom object associated to the record, so each entry keeps its own stage and values.
For Attio custom attributes on objects, map each attribute type to a HubSpot property type before any data moves:
- Text, Number, Checkbox, Date: Single-line text, number, single checkbox and date picker properties.
- Timestamp: Date and time picker. Check the time zone of the export.
- Currency: A number property formatted as currency, with the currency confirmed against HubSpot's account settings.
- Select and multi-select: Dropdown select and multiple checkboxes. Create every option in HubSpot before the import, because HubSpot's import tool requires values to match existing options.
- Status: A dropdown property, or a pipeline stage if the status drives a process.
- Rating: A number or dropdown property holding 1 to 5.
- User: A HubSpot user or owner property. Every Attio workspace member referenced must exist as a HubSpot user first.
- Location: Separate address properties for street, city, state, postcode and country.
- Record and relationship: Associations, not properties (see the section above).
Common Attio Migration Challenges
The same issues appear in most projects:
- Losing list entry data. Importing an Attio list as a HubSpot segment drops every list attribute. Decide the pattern for each list before export.
- Duplicate entries in one list. Because Attio allows the same record more than once in a list, a property based approach will overwrite values. Use a pipeline or custom object instead.
- Missing email history. Attio does not include emails in its export. Agree on this with stakeholders early rather than discovering it at cutover.
- Wrong primary company. People linked to several companies can end up with the wrong primary company if associations are imported in the wrong order.
- Select options that do not exist. Values that do not match a HubSpot dropdown option fail at import or land blank.
- Owner mismatches. Attio user attributes need a matching HubSpot user. Create and verify users before importing owner fields.
- Expecting a live sync. Some teams look for an Attio HubSpot integration to keep both systems running. For a one-time move, a clean export, mapping and import is easier to validate than a sync that keeps writing data in both directions.
- Custom objects without the right subscription. If HubSpot custom objects are not available on your plan, map Attio custom objects to standard objects or plan the upgrade before the build starts.
If your team would rather not manage these decisions in-house, our Attio to HubSpot migration services cover the mapping, import and validation steps end to end.
H2: How to Validate Data After Migration
Validation proves that the data in HubSpot matches the data that left Attio. It should be based on counts and comparisons, not on scrolling through a few records that look right.
|
Check |
How to run it |
Pass condition |
|---|---|---|
|
Record counts |
Compare rows per Attio CSV to records per HubSpot object |
Counts match, minus records excluded on purpose |
|
Duplicates |
Search for duplicates on email, domain and the stored Attio ID |
No unexpected duplicates |
|
Associations |
Compare relationship counts in Attio to association counts in HubSpot |
Counts match per object pair |
|
Primary company |
Sample contacts linked to several companies |
Correct primary company on each |
|
List outcomes |
Compare each Attio list's entry count to its HubSpot segment, pipeline or flag |
Counts match |
|
Custom attributes |
Compare value distributions for select, status and number fields |
Distributions match |
|
Owners |
Count records per owner in both systems |
Counts match |
|
Notes and tasks |
Sample records with activity in Attio |
Notes and tasks attached to the right record |
Assign an owner to each check. The person who built the mapping should not be the only person signing it off: ask a sales manager to review a sample of their own team's deals, and a marketing lead to confirm that the segments they rely on have the right membership. Users know their data in ways a count cannot show, such as a deal that should be linked to two companies or a contact who changed jobs last month.
Run validation in two passes. First on a small test import that includes records with every attribute type, every list pattern and people with several companies. Fix the mapping, not the records, and repeat until the test passes. Then run the full migration and repeat every check above.
HubSpot's import tool also produces an error file for rows that failed. Fix the cause in the mapping or source file, then reimport only those rows using the Attio ID as the unique identifier so they update instead of creating duplicates.
Once the counts match, freeze Attio as read-only for a short overlap period so users can confirm nothing is missing before it is retired. If you want help planning the move, from the data model to cutover, OneMetric's HubSpot data migration services can support each step.
Need confidence in your numbers after a CRM move?
About the author
Himanshi Gaur Himanshi is a CS - Engineer, working across business operations, Revenue Operations, CRM strategy, and growth systems. She writes about HubSpot, Salesforce, CRM migrations, marketing operations, and the processes that help businesses streamline workflows and scale efficiently. Read more articles by Himanshi Gaur.
