Migrate HubSpot lists to Attio: list creation fixed
HubSpot lists migrate into Attio again. Shuttio now sends a list's parent object as a string, and Lists and Files keep their own row on the run page.
Last updated: 4 November 2026
HubSpot lists migrate into Attio again. Shuttio now sends the object a list holds as a single string when it creates a list in Attio. If a migration into Attio failed on a list, start it again and tick Lists on the Objects step. Migrations into Attio are free.
What changed
List creation. To create a list, Shuttio tells Attio which object the list holds records of: people, companies or deals. Shuttio now sends that value, the parent_object field of the create-list request, as a single string.
The run page. Lists and Files used to appear in the footer line "Not migrated, no records in HubSpot". That line is for objects whose source count is 0. Shuttio never counts lists or files in advance, so their count is 0 by design, and the line said nothing about your data. Lists and Files now keep their own row, with the number imported and the number failed.
The list-creation fix applies to migrations into Attio.
How to use it
- Start at https://www.shuttio.com/intake. Pick HubSpot as the source and Attio as the destination.
- Connect both accounts.
- On the Objects step, tick Lists. Tick the objects whose records your lists hold as well, such as Companies, Contacts or Deals. A list member whose record did not migrate is skipped, and the skip is shown.
- Review the fields and start the sample. The sample does not include lists or files. Shuttio marks the Lists row done with nothing imported, and the full migration runs it.
- Press "Run full migration". Shuttio writes records first and lists last.
- Open the run page. The Lists row shows how many entries landed. Open the Errors tab for anything that failed, with the reason for each.
If a list has a name that turns into the same Attio slug as a list already in your workspace, Shuttio reuses that list. If the existing list holds a different kind of record than the HubSpot list does, that list fails and the others carry on. The error names the slug and both kinds of record.
What it does not cover
- Dynamic lists arrive as a snapshot. Attio receives the members the list had at the time of the run, not the filter. The filter conditions travel as text. The run page lists each affected list and tells you to run again to refresh, or to rebuild the filter in Attio.
- Rollback leaves the lists. Shuttio cannot remove a list from Attio. When you cancel, it removes the entries it added and renames each list it created to "
(rolled back, safe to delete)". Delete those lists in Attio yourself. - Not every destination takes lists. The Odoo writer has no place for a CRM list or saved filter, so Shuttio writes none there.
- Earlier runs are not repaired. A migration that failed on a list before the fix does not fix itself. Start it again.
FAQ
Why are my lists missing from the free sample? The sample takes records, not lists or files. The Lists row shows as done with nothing imported. The full migration, which is free into Attio, writes them.
A list shows fewer entries than it has in HubSpot. Why? Entries need a migrated record to attach to. If a member's company, contact or deal was not ticked, or failed, that member is skipped and appears on the Errors tab. Tick the missing object and run the migration again.
Did the Lists row show 0 before the fix? It could be hidden. A Lists or Files row with nothing imported yet was counted in the "no records in HubSpot" footer line, because Shuttio never counts lists or files in advance. They now keep their own row.