Migrate into existing CRM fields without duplicates

Shuttio now maps a source field into the destination field with the same label, ignoring case, punctuation and spacing, so migrations stop creating duplicates.

Last updated: 26 October 2026

Shuttio now puts a source field into the destination field that has the same label. Case, punctuation and spacing do not count, so "Job title", "job_title" and "JOB-TITLE" are one field. This applies to migrations into Attio and Clarify. Odoo matches only your own custom fields (see the limits below). If your destination already has "Industry", the source's "Industry" lands there instead of creating a second one.

What changed

The match comes first.

Four rules apply:

  • Same label, same field. Shuttio compares labels after dropping case, punctuation and spacing. A match is reused, never duplicated.
  • A type that cannot hold the values is flagged. Say the source field holds text and the destination field of that name holds a number. In Attio and Clarify, the field review warns on that row. Shuttio does not retype the field and does not create a "Industry (2)" beside it.
  • Text goes into a same-named choice field by option label. Into Attio, a text column that matches a choice field's label goes in by option label.
  • Two source columns on one field: the first non-empty value wins. Into Attio, a different value from the second column is kept in a note on the record. It is not lost.

How to use it

  1. Pick your source and destination on the intake screen, connect your CRM accounts, and choose the objects to migrate.
  2. Open the field review at /migrations/[id]/fields. Each source field shows where it goes in your destination. Fields that matched an existing destination field show that field.
  3. Look for rows with a warning. The warning reads "Types don't match", followed by the source type and the destination type. Those rows need a decision.
  4. For each warned row in Attio or Clarify, choose one of three options:
    • pick another field from the dropdown on that row;
    • choose "Create as custom field" and give the new field a name the destination does not already use;
    • switch the row off.
  5. Start the free sample. In Attio and Clarify, a ticked row that still has the type warning blocks the start until it has one of these three answers. A CSV import has no sample: it starts as the full run, and the same block applies.
  6. After the sample, open the Errors tab. It lists each value a field could not take, with a reason.

If the custom-field name you type is one the destination already has, the row tells you to choose another name.

What it does not cover

  • Odoo matches only your own custom fields. Odoo matching looks at fields whose names start with x_, by name or label. Standard Odoo fields are never matched this way.
  • Shuttio never retypes a destination field. If the types differ, you decide. There is no automatic conversion.
  • The type-warning block is a field-review feature for Attio and Clarify. The "start is blocked until you decide" rule is described for those two destinations. For Odoo, the field review has its own section where you pick an existing custom field or skip each one. It offers to create a new field only when the connected key may add fields.
  • Labels must match after normalising, not by meaning. "Company size" and "Employees" are different labels. Pick the destination field yourself on the field review.

FAQ

Why did my source field not go into the destination field I expected? Check the labels. Case, punctuation and spacing are ignored, but different words are not. If the labels differ, choose the destination field from the dropdown on that row.

What happens to the second column when two columns map to one field? The first non-empty value goes in. Into Attio, when the second column holds a different value, that value is kept in a note on the record.

Can I undo a migration that used an existing field? Cancelling deletes what the migration created, in reverse order. A destination field that already existed before the migration is never touched by the rollback.

Start a free sample at https://www.shuttio.com and check the field review before you commit to a full run.