New to Attio?Get 10% off when you sign up through Craftt.Try Attio free →
← All case studies

Every record count matched on the first pass. The migration was still missing 48 fields.

A European company whose software runs day-to-day administration for schools moved its sales CRM from Pipedrive to Attio. The team wanted AI agents to read and write the CRM, and they wanted proof that nothing was lost. We migrated the whole account history over one weekend, then kept checking until every Pipedrive field with data had a home in Attio.

Migration

Engagement

Pipedrive

Migrated from

5

Pipelines kept

134

Fields migrated

0 of 1,174

Sample check failures

The problem.

The company sells mostly to schools that already use its product: upgrades, new packages and partner products, each with its own Pipedrive pipeline. Pricing is a minimum monthly fee plus a per-student licence, so every deal depends on data held in the company's own admin dashboard, not in the CRM.

Price was not why they wanted to leave Pipedrive. The setup had grown messy, reporting was weak, and integrations existed on paper but did not work in practice. Above all they wanted AI and MCP access, on the view that agents, not people, would soon be doing most of the reading and writing in the CRM.

They set three conditions. The school ID from their own platform had to be the matching key. Their dashboard stayed the source of truth for school and contract data. And all five Pipedrive pipelines, with their full history, had to stay traceable after the move.

The data was messier than it looked. A third of organisations had no platform ID at all. The government school register code, which the team first thought could be the key, turned out to have duplicates and free text in it. Some records held several IDs from past merges in one box.

Objectives.

  • Move every organisation, person, deal, note, task and activity out of Pipedrive in one weekend, with Monday go-live.
  • Keep each Pipedrive pipeline as its own board with its exact stages, so nobody has to relearn where a deal sits.
  • Match schools on the platform's own ID, and never let a duplicate ID point at two schools.
  • Prove the migration, field by field, before calling it done.
  • Keep the company's own sync from its dashboard into Attio switched off until the migration was validated.

The data model.

The team chose Attio's Plus plan, which has no custom objects. So the whole model runs on the three standard objects, with packages, contract terms and the dashboard agreement reference held as attributes instead of separate records.

Companies

Schools and other organisations, keyed on the platform's school ID. Current package, contract term, minimum monthly fee and a link to the school in the company's own dashboard.

People

Head teachers, administrators and other contacts. A second multi-school link keeps people who work at more than one school attached to all of them.

Deals

One Deals object across five boards, one per Pipedrive pipeline, each with that pipeline's exact stage names. A deal type attribute routes new deals to the right board.

The weekend migration.

History, not just records

About 3,500 notes and 12,000 completed activities came across as backdated notes, and 12,000 tasks with their original due dates. Attio will not backdate a record's creation date, so the original Pipedrive dates live on their own fields.

Five boards, stage for stage

Our first build merged three pipelines into one board. The stage sets were different, so that lost information. We rebuilt it as five boards, one per Pipedrive pipeline, and checked every list and stage pair against Pipedrive's own counts: 0 mismatches.

One ID, one school

Eleven organisations held several school IDs in one field, which made nine IDs belong to two schools at once. We moved the combined values to a legacy field and flagged those records, so the platform ID is now unique on every school that has one.

How we proved it.

A 1,174-record sample, 0 failures

The contract set a 98% bar on a random sample. We checked 1,174 records across companies, people, deals, notes and activities against the frozen export, plus a full census on board entries and activities. Everything matched.

Then the field census

Counts and samples only test the mapping you wrote. When we compared every Pipedrive field against Attio, 48 fields with data had never been mapped: addresses, registration codes, contract numbers, recurring revenue values. We added 89 attributes over two passes and finished with 134 fields migrated and none excluded.

Traps we removed

Loading people made Attio create 339 empty companies from email domains. We deleted them and turned the setting off. Dozens of schools shared a municipal website host, and Attio treats a domain as unique, so we moved those hosts to their own field.

A backup people can read

The first export was complete but full of raw option IDs. We rebuilt it with real labels, names and stage names, and delivered it with ID maps in both directions.

Why the sync waited.

The company's own workflow syncs schools from its dashboard into Attio. We reviewed it before go-live and it was not safe to switch on: it would have written website hosts into Attio's unique domain field, created duplicates for schools with no ID, and stopped silently on the first error. It stayed off until those were fixed.

Results.

  • The whole account history out of Pipedrive over one weekend, with every board and stage matching the source exactly.
  • 134 fields migrated, 0 excluded, and every remaining count difference explained by 32 duplicate people merged on email.
  • A school ID that is unique on every record, ready for the company's own sync to match on.
  • 34 saved views, boards that open on open deals only, and a day-one runbook for the sales team.
  • A readable backup and full ID maps, so any record can be traced back to where it came from in Pipedrive.

Ready when you are.

Book a call and we will tell you honestly whether this is worth doing, or start with the free 48-hour audit and decide afterwards.