Pipedrive to Odoo: what moves and what doesn't

Pipedrive organizations, persons and deals can move to Odoo. Leads, notes, activities and files need separate exports. Field types, links, rollback.

Last updated: 20 October 2026

A Pipedrive to Odoo migration moves organizations, persons and deals. Leads, activities, notes and files come out through separate exports, and raw email content needs the Pipedrive Mail API. Odoo imports cannot be undone, so test on a small batch first. The hard part is not the export. It is keeping each deal linked to its company and contact, and getting money, date range and dropdown fields to land in the right Odoo field types.

What moves and what does not

Pipedrive's Export data section covers Leads, Deals, Organizations, People, Products, Activities, Projects, Notes and Files. Only global admins can export by data type in this section. Exports come as Excel or CSV files and stay available for 28 days (Pipedrive support).

Pipedrive data In the standard export What to know
Organizations, people, deals Yes Links export as names in CSV, as IDs in the API
Leads Yes, in the Leads export Unconverted leads do not appear in the Deals export (ClonePartner)
Activities, notes, files Yes, but separately Export them apart from deals and contacts. Google Drive files are not in the global export (Pipedrive support)
Email content No Raw email content needs the Mail API (ClonePartner)

If a vendor says "everything moves", ask which object they mean. Activities, notes and files are separate jobs with their own files.

Keeping deals linked to organizations and persons

Three rules decide whether the links between organizations, persons and deals survive:

  1. Import the parent first. Odoo's docs say related records must exist before the records that point to them (Odoo documentation). So the order is organizations, then persons, then deals.
  2. Give every row an External ID. Use the Pipedrive ID, prefixed by object so an organization 17 and a person 17 do not collide.
  3. Link by External ID, not by name. A related field can be matched by name, by database ID (Field/Database ID) or by External ID (Field/External ID) (Odoo documentation).

Field types that break

Custom fields change shape between exports. In a Pipedrive CSV (ClonePartner):

  • A monetary custom field splits into a value column and a currency column.
  • A date range splits into a start column and an end column.
  • Enum (dropdown) fields export as labels.
  • Person and organization links export as names.

The API returns something different: enums as numeric IDs, links as IDs, and custom fields under 40-character hex keys (ClonePartner). The same field looks different depending on the route you pulled it by, so decide on one route before you map columns.

Odoo adds its own traps. A date in an ambiguous format can be misread, so use ISO 8601 (YYYY-MM-DD). A currency symbol Odoo does not recognize can stop the import from reading the number (Odoo documentation). Strip symbols from amounts and keep the currency in its own column.

The Odoo import wizard

The wizard accepts .xlsx and .csv. CSV defaults to comma separators and quotation-mark delimiters, and tab-separated files are not detected. The Test button validates the data before import. Imports cannot be undone, and the "created on" and "last modified" filters help you find the records an import touched (Odoo documentation).

External IDs also protect you from duplicates. Odoo's update imports let you import the same file several times without creating duplicates (Odoo documentation).

Split large files by object, and keep the parent files whole so the links resolve.

Rate limits if you pull from the API

The API route avoids hand-made CSVs, but Pipedrive meters it. The daily token budget is 30,000 × plan multiplier × seats. Multipliers are Lite 1, Growth 2, Premium 5 and Ultimate 7. Example costs: get single entity 2, get list 20, update 10, search 40. The budget resets at midnight in the server's time zone. The Search API allows 10 requests per 2 seconds on every plan (Pipedrive API docs).

Pages return at most 500 items. The v2 API uses cursors. The v1 API uses start/limit offsets, which can skip or duplicate records if data changes during extraction (ClonePartner).

Example: a Growth plan with 5 seats has 30,000 × 2 × 5 = 300,000 tokens a day.

Two ways to do it

Route You do Cost and time Gap
CSV by hand Export, clean, map, import in three passes Free, your hours No undo in Odoo
Migration tool Connect both CRMs, review fields, run Priced by record count Shuttio does not carry deal products or Pipedrive filters

Ask any vendor to show a run on your own data before you pay.

A worked example

Take a team with 8,000 organizations, 22,000 persons and 6,000 deals: 36,000 records. By hand, that is three files, three External ID columns and three Test runs. Each deal row carries the External ID of its organization and its person. One wrong prefix and a deal lands unlinked.

The cheapest check is a small slice: 50 deals, with the organizations and persons those deals point to. If the links hold and the amounts and dates read correctly in Odoo, scale up. If a person lands without a company, fix the mapping while the damage is 50 rows, not 36,000.

Where Shuttio fits

Shuttio is a self-serve CRM data migration tool built by Craftt, an Attio implementation partner. It reads Pipedrive through the API and writes to Odoo. The details below describe a connection with an Odoo API key; the Odoo app and the import package handle some objects differently. It moves organizations, persons, deals, leads, products, projects and project tasks (the last two need Odoo's Project app), plus notes, activities, meetings and emails. Notes and emails land in the chatter of their record, open activities become To-Do activities, and meetings become calendar events. Emails need the mail:read permission on the Pipedrive connection. Files attached to records move only when you connect Odoo with an API key, not through the Odoo app or the import package. Pipedrive filters and deal products stay behind.

A free sample (5% of your companies, contacts or deals, 10 to 1,000 records, picked at random, with their linked records) runs first and keeps the parents of the sampled deals. The price is shown before the full run: a CRM migration into Odoo costs $249 for up to 50,000 records, so the 36,000 organizations, persons and deals fall in the first band as long as the counted total stays under 50,000. A CSV import is free. Rollback deletes the records, notes, tasks, meetings and files the migration created. A record that already existed in Odoo and was matched stays. Credentials are encrypted and deleted 14 days after the run, and no AI model writes your data. Odoo companies match on website domain and contacts on email, so a second contact with the same email is matched to the first, not created again.

Limits: Shuttio does not carry deal products or Pipedrive filters, and it moves files only when Odoo is connected with an API key.

Checklist before you start

  • A global admin runs the exports; download within 28 days.
  • Leads, activities, notes and files exported separately.
  • Decision on emails: skipped, or pulled through the Mail API.
  • Duplicate organizations and persons merged in Pipedrive.
  • One External ID per row, prefixed by object.
  • Money split into value and currency; dates in YYYY-MM-DD.
  • Import order: organizations, persons, deals.
  • Test button used, then a 50-row slice checked in Odoo.

FAQ

Can I keep the link between a deal, its company and its contact? Yes, if the deal row references the External ID of each parent and the parents are imported first. Odoo matches a related field by name, database ID or External ID.

Why are my leads missing from the Deals export? Unconverted leads live in the Leads export, not in Deals (ClonePartner). Export both.

Can I undo an Odoo import? No. Odoo's docs state imports cannot be undone. Use the Test button, import a small slice, and use the "created on" filter to find affected records (Odoo documentation).

How do I avoid duplicates if I run the import twice? Fill the External ID column. Odoo documents External IDs as the way to import the same file several times without creating duplicates.