CRM migration
Field-level mapping, validation, and rollback between CRM and Deals for Zendesk and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
CRM and Deals for Zendesk
Source
Odoo CRM
Destination
Compatibility
8 of 12
objects map 1:1 between CRM and Deals for Zendesk and Odoo CRM.
Complexity
BStandard
Timeline
3-4 weeks
Overview
Moving from CRM and Deals for Zendesk to Odoo CRM is a structural migration that inverts the data model. Zendesk treats Deals as second-class citizens subordinate to tickets and Organizations; Odoo CRM leads with the Opportunity as the primary record, linked to a Partner (Contact/Company) at the center. We resolve that schema inversion during scoping, pre-create the Odoo CRM stage structure and custom fields before migration, and reconstruct deal stage history from Zendesk Activities because the Zendesk Deals API exposes only the current stage. Tickets migrate to the Odoo Helpdesk module as standalone helpdesk.ticket records, not as CRM opportunities; the customer decides whether converted tickets warrant a manual opportunity link. Odoo uses XML-RPC rather than REST, which changes the API transport layer, batch sizing, and rate-limit behavior. Workflows, sequences, and automations do not migrate; we deliver a written inventory for the customer's admin to rebuild in Odoo Studio or via server actions.
Every standard and custom field arrives verified.
AI proposes the map; you confirm before any record moves.
Parent–child, lookups, and ownership stay linked.
Calls, emails, meetings — with original timestamps.
Documents, uploads, and inline notes move with the record.
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
Each row shows how a CRM and Deals for Zendesk object lands in Odoo CRM, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
CRM and Deals for Zendesk
Contact
Odoo CRM
Partner
1:1Zendesk Contacts map to Odoo CRM res.partner records with partner_type = contact. Email, phone, and address fields migrate 1:1. Custom fields on the Zendesk Contact become custom ir.model.field records pre-created in Odoo before migration. The Zendesk organization_id links the Contact to an Organization; we resolve that as the parent_partner_id on the res.partner record.
CRM and Deals for Zendesk
Organization
Odoo CRM
Company Partner
1:1Zendesk Organizations (companies/accounts) map to Odoo res.partner records with partner_type = company. The organization's domain name populates the website field. Company-level custom fields migrate as Odoo custom fields on res.partner. Parent-child org hierarchies in Zendesk map to parent_id on res.partner in Odoo.
CRM and Deals for Zendesk
Deal
Odoo CRM
Opportunity
1:1Zendesk Deals map to Odoo CRM crm.lead records of type opportunity. The Zendesk dealstage property maps to Odoo stage_id, and pipeline_id maps to the Odoo team_id (sales team). The deal amount, probability, expected close date, and custom fields migrate directly. Note that Zendesk Deal owner_id maps to Odoo's user_id (the sales rep responsible for the opportunity).
CRM and Deals for Zendesk
Pipeline and Pipeline Stage
Odoo CRM
Sales Team + Stage
lossyEach Zendesk pipeline becomes an Odoo CRM Sales Team (crm.team) with its own stage sequence. Zendesk stage names, probabilities, and ordering are replicated as Odoo stage records within the team. Stage probabilities in Zendesk are percentages; Odoo stage probabilities are also percentage-based and migrate directly. We pre-create the stage structure before any Opportunity records are imported.
CRM and Deals for Zendesk
Activity
Odoo CRM
mail.message and crm.phone.call
1:manyZendesk Activities (calls, emails, meetings, notes) are stored as a flat object linked to Contacts or Deals. We split by activity_type: calls map to crm.phone.call; emails and meetings map to mail.message records linked to the res.partner or crm.lead. Odoo does not have a unified activity timeline; we link each activity to the parent record so they appear in the chatter. This is a partial activity timeline migration only; threaded conversation views do not transfer.
CRM and Deals for Zendesk
Ticket
Odoo CRM
helpdesk.ticket
1:1Zendesk Tickets migrate to Odoo Helpdesk tickets (helpdesk.ticket) if the Helpdesk module is activated. Ticket status, priority, requester, assignee, tags, and custom fields migrate. Attachments require separate handling via Odoo's ir.attachment API. Important: Odoo Helpdesk tickets are separate from CRM opportunities and are not automatically linked. We flag this for the customer during scoping and recommend a manual opportunity link or a helpdesk-to-opportunity server action as a post-migration configuration.
CRM and Deals for Zendesk
Custom Object (v2)
Odoo CRM
Custom model or res.partner extension
1:1Zendesk Custom Objects v2 migrate to Odoo custom models (ir.model and ir.model.fields created in developer mode) or as custom fields on existing models depending on the object's intended use. We pre-create the destination schema before migration. Custom Objects with relationship fields to Contacts or Deals become many2one or many2many fields in Odoo. Plan-tier limits on Zendesk Custom Objects (3-50 depending on Suite tier) do not apply in Odoo, removing a pre-migration blocker.
CRM and Deals for Zendesk
User / Agent
Odoo CRM
res.users
1:1Zendesk Users (agents) map to Odoo res.users records. We resolve by email match against the destination Odoo instance. Any Zendesk agent without a matching Odoo user goes to a reconciliation queue for the customer's admin to provision before record import resumes. Group memberships and roles in Zendesk do not map to Odoo access rights; we document them for manual admin reconfiguration.
CRM and Deals for Zendesk
Attachment
Odoo CRM
ir.attachment
1:1Inline images and file attachments on tickets, contacts, and deals are fetched from Zendesk via the attachments API endpoint and re-uploaded to Odoo as ir.attachment records. We preserve the original filename, mimetype, and file content. Inline image positioning in ticket descriptions does not carry over; images appear as standard attachments in Odoo.
CRM and Deals for Zendesk
Tag
Odoo CRM
tag_ids on crm.lead
lossyZendesk tags on contacts and deals migrate to Odoo CRM tags via the tag_ids many2many field on crm.lead. Tags used for ticket categorization migrate to helpdesk.tag on helpdesk.ticket. Tag-based automation rules in Zendesk do not migrate; they must be rebuilt as Odoo server actions or Odoo Studio automations post-migration.
CRM and Deals for Zendesk
Lead (if applicable)
Odoo CRM
crm.lead (type lead)
1:1If the Zendesk account used the Leads feature or a third-party lead-capture tool feeding into Zendesk, those records map to Odoo crm.lead with type = lead (separate from type = opportunity). We preserve the lead source, rating, and any scoring custom fields as Odoo custom fields. Unqualified leads land in Odoo's CRM pipeline as leads for follow-up rather than as active opportunities.
CRM and Deals for Zendesk
Custom Field (Contact, Deal, Ticket)
Odoo CRM
ir.model.field
lossyEvery Zendesk custom field on Contact, Organization, Deal, or Ticket is pre-created in Odoo as an ir.model.field before any data migration begins. Field types are mapped: Zendesk text becomes char, Zendesk dropdown becomes selection, Zendesk checkbox becomes boolean, Zendesk number becomes float or integer, Zendesk date becomes date. This step alone can add one to three days for migrations with more than 20 custom fields per object.
| CRM and Deals for Zendesk | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | Partner1:1 | Fully supported | |
| Organization | Company Partner1:1 | Fully supported | |
| Deal | Opportunity1:1 | Fully supported | |
| Pipeline and Pipeline Stage | Sales Team + Stagelossy | Fully supported | |
| Activity | mail.message and crm.phone.call1:many | Fully supported | |
| Ticket | helpdesk.ticket1:1 | Fully supported | |
| Custom Object (v2) | Custom model or res.partner extension1:1 | Fully supported | |
| User / Agent | res.users1:1 | Fully supported | |
| Attachment | ir.attachment1:1 | Fully supported | |
| Tag | tag_ids on crm.leadlossy | Fully supported | |
| Lead (if applicable) | crm.lead (type lead)1:1 | Fully supported | |
| Custom Field (Contact, Deal, Ticket) | ir.model.fieldlossy | Fully supported |
Gotchas + challenges
Platform-specific issues from each side, plus the pair-specific challenges that don't show up on either platform's page on its own.
CRM and Deals for Zendesk gotchas
Help Center has no native export
Separate API rate limit buckets per plan
Legacy Custom Objects must migrate to v2 first
Deals and pipeline stages lack historical audit trail in API
Custom Objects limits vary by plan tier and are not enforced consistently at import
Odoo CRM gotchas
Odoo.sh version gating blocks assisted migrations from trial
Enterprise modules fail to install on Community after database restore
Custom module view inheritance breaks between Odoo major versions
Custom fields risk losing their application context on Community
API access for Community is gated behind the Custom Plan
Pair-specific challenges
Migration approach
Discovery and Odoo module activation
We audit the Zendesk account across tier (Support Team, Suite Team, Suite Professional, Suite Enterprise Plus), object counts (Contacts, Organizations, Deals, Activities, Tickets, Custom Objects v2), and custom field inventory. We review the Odoo destination instance to confirm which modules are activated (CRM, Helpdesk, Website, Sales) and identify any module dependencies. The discovery output is a written migration scope with record counts per object, a custom field inventory mapped to Odoo field types, and a recommendation on whether Helpdesk module activation is required for ticket migration.
Schema design and custom field pre-creation
We design the destination Odoo schema before any data moves. This includes activating the CRM module and confirming the pipeline and stage structure, pre-creating all custom fields as ir.model.field records via XML-RPC (this can take one to three days for large custom-field inventories), mapping Zendesk pipelines to Odoo Sales Teams with stage names and probabilities, and designing the Lead-versus-Opportunity split strategy for any leads captured in Zendesk. Schema changes deploy to the Odoo staging environment first for validation.
Owner reconciliation and Odoo user provisioning
We extract every distinct Zendesk owner (agent) referenced on Contact, Organization, Deal, Activity, and Ticket records and match by email against the destination Odoo instance's res.users table. Owners without a matching Odoo user go to a reconciliation queue. The customer's Odoo admin provisions any missing users before record import begins. Migration cannot proceed past this step because the user_id field on crm.lead is a required foreign key in Odoo's CRM model.
Sandbox migration and reconciliation
We run a full migration into an Odoo staging database using production-like data volume. The customer reconciles record counts (Contacts in, Organizations in, Opportunities in, Activities in, Tickets in), spot-checks 25-50 records against Zendesk, and validates the stage-probability mapping and custom field content. Any field type mismatches, missing custom fields, or parent-record gaps are corrected before production migration begins. This step is the last opportunity to adjust mapping without touching live data.
Production migration in dependency order
We run production migration in record-dependency order: res.users and res.partner records (parent contacts and companies first), crm.lead records with type opportunity (with user_id, partner_id, team_id, and stage_id resolved), crm.lead records with type lead (for any captured leads), Activities reconstructed from the Zendesk Activity de-normalization query (calls, emails, meetings written as mail.message and crm.phone.call), helpdesk.ticket records (if Helpdesk scope is included), and ir.attachment records (downloaded from Zendesk and re-uploaded to Odoo). Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and automation handoff
We freeze Zendesk writes during the cutover window, run a final delta migration of any records modified during the migration window, then mark Odoo as the system of record. We validate the opportunity pipeline counts and stage distribution against Zendesk Deal reports, confirm attachment coverage, and deliver the automation inventory document with Odoo Studio and server-action replacements documented per Zendesk trigger, automation, and macro. We support a one-week hypercare window for reconciliation issues. We do not rebuild Zendesk automations as Odoo actions inside the migration scope.
Platform deep dives
CRM and Deals for Zendesk
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 2 of 8 objects need a mapping; the rest are 1:1.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across CRM and Deals for Zendesk and Odoo CRM.
Object compatibility
2 of 8 objects need a mapping; the rest are 1:1.
Field mapping clarity
Field mapping is derived from defaults — final spec confirmed during the sample migration.
Timeline complexity
8-object category — typical timelines run 2–7 days end-to-end.
API constraints
CRM and Deals for Zendesk: 200 req/min (Team) to 2,500 req/min (Enterprise Plus) — account-level, shared across all integrations and agents.
Data volume sensitivity
CRM and Deals for Zendesk exposes a bulk API — large-volume migrations stream efficiently.
Estimator
Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.
Step 1
Pick a category, then your source and destination platforms.
Category
FAQ
Answers to the questions buyers ask most during CRM and Deals for Zendesk to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your CRM and Deals for Zendesk to Odoo CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave CRM and Deals for Zendesk
Other ways to arrive at Odoo CRM
Ready when you are
Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.