Changelog

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.

Checkout now has a promotion code field#

· Attio, Odoo, Clarify

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.

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.

Week of 19 October

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.

This changelog#

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.

Guide: migrate HubSpot to Attio#

· Attio, HubSpot

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.

Guides section, first guide: Pipedrive to Odoo#

· Pipedrive, Odoo

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.

Breakcold as a destination#

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.

A supported-objects article for each CRM#

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.

Week of 12 October

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.

Comparison: Shuttio vs MigrateMyCRM (formerly Trujay)#

· Attio, Odoo, Clarify

A comparison page sets Shuttio next to MigrateMyCRM by destination: Attio, Clarify and Odoo, and what to use when your pair is not covered.

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.

Attio as a source of calls and other activities#

· Attio

When Attio is the source, Shuttio reads calls and other activities through Attio's Activities API, including the workspace's own call notes field.

HubSpot SMS, WhatsApp and LinkedIn messages move to Attio#

· Attio, HubSpot

HubSpot messages sent over SMS, WhatsApp and LinkedIn now arrive in Attio as activities.

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.

A page for each source and destination pair#

· Attio, HubSpot, Pipedrive, Odoo

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.

Data Processing Addendum#

The DPA is published at /dpa. Its Annex III is the subprocessors list, and it carries the legal text a security review asks for.

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.

Pricing page with the price per destination#

· Attio, Odoo, Clarify

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.

Week of 5 October

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.

Attachments: files move with their records#

· Attio, HubSpot, Odoo

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.

Failed-only Retry for Odoo migrations#

· Odoo

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.

Week of 28 September

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.