Every change to Shuttio that you can use today, newest first. A change appears here once it is live in production.
Last updated: 28 October 2026
Week of 26 October
Connect Twenty by signing in, with an API key as the fallback#
The Connect step for Twenty now has a "Connect Twenty" button. Customers sign in to Twenty and approve access instead of pasting an API key. "Use an API key instead" stays under it. For a self-hosted Twenty, enter the server address first; it must be https and not a private host. If the server does not allow a one-click connection, Shuttio says so and points to the API key. Shuttio renews the access token while a run is going. If Twenty refuses the renewal, the run pauses with "Reconnect Twenty to continue". The credentials are deleted 14 days after the run. Limit: Twenty Cloud shows the sign-in button only once Shuttio's Twenty client id is set. Until then Cloud shows the API key form alone.
Standard fields and object names now follow the destination you pick#
· Attio, Odoo, Clarify
On the field review, a source's standard fields (Name, Email, Phone, Job title) now start on the destination's own field, not on "New field". The automatic field is always one of the picker options. Standard objects now use the destination's own word, for example Contacts and Opportunities when the destination is Odoo. The messages for Roll back, Restart sample, Run full retry, Change mapping, kept records, filters and plan limits now name the destination instead of saying Attio. This applies to Attio, Clarify and Odoo.
The Stripe Checkout page for a paid migration now has a field for a promotion code. Stripe applies the discount and checks whether the code has expired. The Product Hunt code PH50 (50% off, valid until 2027-02-03) can be entered there. It applies to migrations that are priced by record count: CRM migrations into Clarify or Odoo, from $249. Moves into Attio and CSV imports are free and never reach Checkout. Payment is still confirmed by Stripe's payment status, so the price shown at Checkout is the price paid.
Odoo moves keep custom activity types like 'Lunch' on tasks#
· Pipedrive, Odoo
When a Pipedrive activity has a custom type such as 'Lunch', Shuttio now matches it by name to an existing Odoo activity type. If none exists, Shuttio creates one and files the to-do under it. Before, the type only appeared as a 'Type: Lunch' line in the task text. Activity types Shuttio creates are removed on rollback unless Odoo records already use them. Calls, meetings and emails keep their usual handling.
HubSpot destination: a property that clashes is left out, not added as a _2 copy#
· HubSpot
When you move data into HubSpot, Shuttio no longer creates a second property with a numbered name such as score_2. If HubSpot already has a property with the same label or internal name that cannot take the values (a different type, computed, read-only or HubSpot-defined), nothing is created. The field is left out of the move and the field review shows a warning. From there you can remap it, create a custom property under your own name, or switch the field off. If a property with a different label already uses the internal name, the new property keeps your label and only its internal name gets a number. Applies to moves into HubSpot.
Activities now land as calls, emails, meetings and tasks, not merged into notes#
· HubSpot, Pipedrive, Odoo, Clarify
Each source activity type now goes into the matching type in the destination. HubSpot gets calls and emails (calls used to arrive as notes, emails were not written). Odoo gets calls as Call-type entries (they were dropped before). Pipedrive receives emails as Email-type activities instead of tasks. Calls from SugarCRM, SuiteCRM, Salesflare, Vtiger, Nutshell and Teamleader Focus into Clarify are now calls, not notes. Pipedrive's Activities stay one object, and each row is routed by its type (call, meeting, email, task) into HubSpot, Odoo or Clarify. Limit: where a destination has no matching type, the Objects step names the fallback. For example, Clarify takes meetings, calls and emails as comments.
Odoo: link user columns from HubSpot or Pipedrive to Odoo users#
· HubSpot, Pipedrive, Odoo
When you migrate into Odoo with an API key, a source column that holds a user (an owner, creator or assignee) can now be linked to an Odoo user instead of being copied as plain email text. On the field review you can pick an existing Odoo field that links to users, or create a new one ('link to an Odoo user'). Each user is matched to an Odoo user by email or login. If no Odoo user matches, the field stays empty, the run summary counts it, and the email is kept in the record's internal note. Limit: the Odoo import package and the Odoo app do not write this field, so it applies to the API-key write only.
Attio moves now create pipeline lists and link Owner fields to Attio users#
· Attio
Fixed: creating a pipeline list in Attio was refused with "Body payload validation error". Each pipeline then fell back to a stage field on Deals. Pipelines now come in as Attio lists. Also new for moves into Attio: source columns that point at a user (owner, creator and similar) become user attributes. The field review shows them as "Create as user" with "Linked to users (matched by email)". A deal's owner column fills Attio's built-in Owner. Emails are matched case-insensitively against your workspace members. Limit: a person with no matching Attio user leaves the field empty. Their name is kept in a note on the record, and unmatched people are listed once in the object's run summary. For other destinations, a user column now carries the user's email as text instead of the source user id.
Moving a Pipedrive account into HubSpot now handles three things that failed in the first live run. HubSpot portals with GDPR on refuse new contacts that have no legal basis. You now pick one from your portal's own options, on the Options step or later on the migration's legal-basis page. Shuttio never picks one for you, and a value mapped from your source wins. A start or retry is blocked while contacts have failed for this reason and no choice has been made, and the Errors tab links to the legal-basis page. HubSpot errors on a write now name the missing property and what to do, and say what HubSpot refused. "Reconnect" advice shows only for 401 and 403 errors. A source field named like an existing HubSpot property (any case) is now mapped into that property by default, in the field review and in the run, instead of creating a duplicate. Picklist values match by label. If a HubSpot-defined list lacks a value, the record still imports and the run summary lists the missing values per field. Link and name columns no longer show up as fields left out. Limit: when two source fields map to one property, the first non-empty value is written, and the summary counts the rows where the second differs.
Source fields now map into existing destination fields of the same name#
· Attio, Odoo, Clarify
When you migrate into Attio, Clarify or Odoo, a source field now goes into the destination field with the same label, ignoring case, punctuation and spacing, so it no longer creates a duplicate. If that field's type cannot hold the values, the field review warns on the row, and for Attio and Clarify you remap it, create it as a custom field, or switch it off before the sample can start. Text values go into a same-named choice field by option label; a value with no matching option is left out and shown in the Errors tab, one row per field. When two source columns map to one field, the first non-empty value wins.
Site copy now describes the pick, connect, sample flow#
· Attio
The home page and the Attio page now describe the three steps: pick your apps, connect both, and run a free sample of 50 records per object. Fields are mapped automatically, and changing the mapping is optional. The home FAQ gains a "What does the free sample do?" answer, and the pricing page says fields the automatic mapping could not place are listed before the full run. The /vs/import2 page no longer shows a price row or plan-tier claims, and the footer now links to this changelog.
Pipedrive objects your plan lacks now show as unavailable, not as errors#
· Pipedrive
When your Pipedrive plan does not include an add-on such as Projects, the Objects step now shows that object greyed out as "not on this Pipedrive plan" instead of a red "Could not read" error. That object stays unavailable and cannot be migrated. If a match key you picked on the Fields step is no longer offered, the start stops with a message to open the Fields step and choose again. If the stale key was never picked by you, the start uses the default key and goes ahead.
Quick start: pick two apps, connect them and run a sample#
A migration between two connected CRMs is now three steps: pick the source and the destination, connect both, and press Run sample migration. Shuttio maps the fields automatically and writes 50 records per object. Fields the automatic mapping could not place are listed, and you mark them reviewed before the full run. Customize before running still opens the Objects and Fields steps.
Every change a customer can use now gets an entry here, with a link to its guide or help page and a screencast when there is one.
Help articles for "A value was left empty" and "A required value is missing"#
Two more help articles explain messages on the Errors tab. One covers a value left empty while the record imported, the other a record that failed because the destination requires a field the source row does not have.
A new guide compares three ways to move HubSpot to Attio: Attio's Import2 flow, a CSV import and Shuttio. It lists what moves, what stays behind and how to check the result.
Long-form guides now live at /guides/<name>. The first one covers what moves from Pipedrive to Odoo, what needs a separate export, field types, links and rollback. It was updated on 21 October.
Shuttio can write into Breakcold. The writer was checked on a real Breakcold workspace, and the checks fixed the Website and stage fields, deal names, duplicate answers and runs that pause when Breakcold reports insufficient tokens.
Each CRM Shuttio supports now has a help article with a table of its objects: what Shuttio exports, what it imports, and notes per object. The tables are computed from the product's registry, so they match what the product does.
Pipedrive projects and project tasks into Odoo's Project app#
· Pipedrive, Odoo
Pipedrive projects and their tasks now move into Odoo's Project app, with the customer, the manager matched by email, dates, tags and task stages. If the Project app is not installed in Odoo, the Objects step says so and hides both objects.
Help articles for rejected email addresses and phone numbers#
Two help articles explain the messages "Email address rejected" and "Phone number rejected: missing country code": why the destination refuses the value and how to fix it before a re-run.
Run page fixes: percent, open Pipedrive deals, required values#
· Pipedrive
The run percent no longer goes over 100. Open Pipedrive deals without a deal stage now migrate. The Errors tab names the field behind a required-value refusal.
Calls, logged emails and activity types land as Attio activities#
· Attio, HubSpot, Pipedrive
Calls from HubSpot, Affinity and Pipedrive arrive in Attio's Phone calls, and logged emails arrive as a Logged emails activity, unticked by default. Other done Pipedrive activity types become an activity of their own. If a workspace has no activity scope or plan, Shuttio falls back to notes and tasks and counts them in the run summary.
Every pair a customer can finish today has its own page, such as HubSpot to Attio, Pipedrive to Attio and Pipedrive to Odoo. Each page lists the objects that move for the pair and links its guide.
HubSpot emails can be read with an optional scope#
· HubSpot
A HubSpot connection can ask for the optional sales-email-read scope. With it, Shuttio reads the emails logged in HubSpot, so they can migrate with the records they belong to. Without the scope, the connection works as before.
The free sample keeps linked parents, and new records move at the price of the first run#
The 50-record sample now includes the companies and contacts that its deals point to, so links in the sample are real. After a full run, "Move new records" is free while the records done plus the new ones fit the price band of the first run. Beyond that band, Shuttio sends you to Checkout for the band you need.
The pricing page lists the price for each destination: free into Attio at any record count, and from $249 into Clarify or Odoo, set once per migration by record count. It also states the rollback and refund terms.
Attio to Attio: move records between two workspaces#
· Attio
Shuttio copies records, lists, meetings, files, options and statuses from one Attio workspace to another, and matches workspace members by email. It refuses a pair where both sides are the same workspace.
One From and To card, saved field edits and Retry all errors#
Starting a migration is now one card with searchable lists for the source and the destination. Field edits are saved on the server and restored on every visit. The Errors tab has a Retry all errors button, and the run page keeps its other actions in a More menu.
Help center at /help, and help@shuttio.com for support#
The help center answers questions about each source and destination, with a support matrix computed from the product's own registry and a search that runs in the browser. Support email is help@shuttio.com.
Odoo as a destination: connect with an API key or install the Shuttio Migration app#
· Odoo
The From and To card now offers Odoo as a destination. You can connect with an API key, or download the Shuttio Migration app from the app step and import through it.
Change mapping: fix a mapping after a run without starting over#
· Attio
After a migration into Attio you can change the field mapping and run again. Shuttio removes what it imported, except records you edited in Attio, and writes the records with the new mapping.
An Attachments switch on the Options step moves HubSpot files into Attio and into Odoo, with the file count and an estimate shown before the run. Files run as their own job after the records, and cancelling deletes the files first. Failed files are listed as rows with a reason.
Record filters: migrate only the records that match#
· Attio, HubSpot, Pipedrive
A Filters step lets you narrow each object by field values or dates before the run, and shows a live match count under the filter. HubSpot, Pipedrive and Attio apply the filter at the source, so records that do not match are not read. The run page shows how many records are in the source and how many were filtered out, and filters never lower the price.
Retry on an Odoo migration re-runs the failed records and the failed notes, tasks and meetings by id, and does not touch the records that already landed. A record that failed to link is counted as failed once, and the failure row carries its cause.
Retry on an Attio migration re-runs only the records that failed#
· Attio, Odoo
Retry on a done, failed or paused Attio migration marks only the objects with failures and queues those records again. A field that Attio cannot find now costs that one value, not the whole record. A field that is empty in every sampled record starts unticked on the Fields step, for Attio as for Odoo.
Faster schema setup and clearer refusals when writing into Attio#
· Attio
Shuttio now reads the live Attio state in parallel and writes fields and options eight at a time, in dependency order. An object that Attio refuses over the plan limit is skipped, and the plan continues. The rollback confirmation now says that custom objects the migration created are deleted too.