CRM migration
Field-level mapping, validation, and rollback between Zendesk Sell and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Zendesk Sell
Source
Odoo CRM
Destination
Compatibility
10 of 13
objects map 1:1 between Zendesk Sell and Odoo CRM.
Complexity
BStandard
Timeline
4-6 weeks
Overview
Moving from Zendesk Sell to Odoo CRM is a migration driven by Sell's August 31, 2027 sunset deadline combined with Odoo's appeal as an open-source all-in-one business suite. The structural difference that shapes the entire migration is Odoo's Partner model: Sell maintains separate Contact and Company objects while Odoo collapses both into a single Partner record with a Contact Type field distinguishing internal contacts (company employees) from individual customers and suppliers. We resolve that schema split at scoping, map Sell's Pipeline and Stage hierarchy to Odoo's crm.team and stage configuration, and write all records through Odoo's XMLRPC API with batch chunking and exponential backoff on 429 responses. Sequences, workflows, and automation state do not migrate; we deliver a written inventory of every active Sell automation for the customer's team to rebuild in Odoo's Studio or Action rules framework. Custom fields migrate as Odoo custom fields on the equivalent model, and we flag any field types that require Odoo schema changes before import.
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 Zendesk Sell 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.
Zendesk Sell
Lead
Odoo CRM
Lead (crm.lead)
1:1Sell Leads migrate 1:1 to Odoo CRM Lead (crm.lead model). The sell lead_source property maps to Odoo's source_id (crm.lost_reason is for losses, not sources). We preserve all custom Lead fields as Odoo custom fields on crm.lead via Studio or a data migration script. The lead's owner maps to Odoo user_id by email match. Unqualified leads that were never converted in Sell remain as Odoo Leads for the sales team to work through in Odoo's Kanban pipeline view.
Zendesk Sell
Contact
Odoo CRM
Partner (res.partner)
1:manySell Contacts require a schema split in Odoo. Each Sell Contact becomes an Odoo res.partner record with type='contact' linked to a parent Partner (type='contact' or 'invoice') representing the company. If the Sell Contact has an associated Company, we create that company as a res.partner with type='company' first, then create the Contact as a child Partner linked via parent_id. For contacts without a company, we create a standalone Partner record. Email, phone, address, and custom Contact fields map directly; Odoo's partner fields (street, city, country, website) accept the Sell Contact address payload.
Zendesk Sell
Company
Odoo CRM
Partner (res.partner) type=company
1:1Sell Companies map to Odoo res.partner records with type='company'. The company name becomes the Partner display name; the company domain maps to the website field for deduplication. We create the company Partner before any child Contact Partners so that the parent_id reference resolves at insert time. Industry, employee count, and custom Company fields migrate as custom fields on res.partner.
Zendesk Sell
Deal
Odoo CRM
Opportunity (crm.lead)
1:1Sell Deals map to Odoo CRM Opportunity (crm.lead with type='opportunity'). The deal name becomes the Opportunity name, amount maps to planned_revenue, probability maps to Odoo's probability field, and stage maps to crm.stage via the pipeline's stage sequence. Loss reasons from Sell custom properties map to crm.lost_reason records created during schema setup.
Zendesk Sell
Pipeline
Odoo CRM
Team (crm.team)
lossySell Pipelines are custom workflow containers that map to Odoo crm.team records. Each Sell Pipeline becomes a crm.team, and the pipeline's name becomes the team name. Team members (Sell Users) map to crm.team.member records by email match against res.users. If Odoo is self-hosted, team assignment uses crm.team member relations; on Odoo Online, the team field on crm.lead serves the same scoping.
Zendesk Sell
Stage
Odoo CRM
Stage (crm.stage)
lossySell Stages are children of Pipelines and map to Odoo crm.stage records scoped to the corresponding crm.team. Stage ordinal position and win/loss flags migrate from Sell: stage.sequence sets Odoo stage order, and is_won maps to Odoo's onchange logic that advances to the Won stage. We configure stage names to match Sell naming conventions unless the customer requests renaming during scoping.
Zendesk Sell
Task
Odoo CRM
Activity (mail.activity)
1:1Sell Tasks migrate to Odoo mail.activity records linked to the target crm.lead (Opportunity) or res.partner (Contact/Company). Task fields map as follows: name becomes activity's summary, date_deadline carries the due date, completed_at maps to date_done, and status maps to Odoo's activity state (planned, today, overdue, done). Owner mapping uses email match to res.users for the user_id on the activity. Attachments on Tasks migrate as mail.message attachments via Odoo's ir.attachment model.
Zendesk Sell
Note
Odoo CRM
Note (mail.message)
1:1Sell Notes attached to Contacts, Deals, Leads, or Companies migrate as Odoo mail.message records with message_type='notification' linked to the target record via res_model and res_id. We preserve note body as HTML content in the message body. Parent record references resolve after both the parent record and its Odoo ID are known, so Notes import last in the activity phase. Tags on Notes migrate to Odoo message.main attachment_tags if the customer activates the Discuss module.
Zendesk Sell
Line Item
Odoo CRM
Sale Order Line or custom Opportunity fields
1:1Sell Line Items attach to Deals and contain product name, quantity, unit price, and discount. Odoo treats Line Items as Sale Order Lines only when the Sale app is active and the Opportunity is converted to a Sale Order. We map Line Items to Odoo custom fields on crm.lead (line_item_product, line_item_qty, line_item_price) during the migration, and flag that if the customer activates Odoo Sale, these fields can be converted to Sale Order Lines via Odoo's Convert to Quotation action post-migration.
Zendesk Sell
User
Odoo CRM
User (res.users)
1:1Sell Users (sales reps and admins) export with email, role, and territory. We match Sell Users to Odoo res.users by email. Any Sell User without a matching Odoo res.users account enters a reconciliation queue for the customer's admin to provision before Contact and Deal import resumes, because Owner fields on Opportunities and Contacts require a valid user_id in Odoo.
Zendesk Sell
Custom Fields
Odoo CRM
Custom Fields (ir.model.fields)
1:1Sell custom fields on Leads, Contacts, Deals, and other objects map to Odoo custom fields created via Settings > Technical > Database Structure > Fields or via a data migration module. Custom field type resolution happens during scoping: text fields map to char or text, picklist fields map to selection, date fields map to date, numeric fields map to float or integer. We resolve Sell's numeric custom field IDs against their field keys before creating Odoo fields, and build a lookup table to apply values during the import phase.
Zendesk Sell
Tag
Odoo CRM
Tag (crm.tag)
1:1Sell Tags applied to Contacts, Deals, and Leads map to Odoo crm.tag records. Each unique tag value creates a crm.tag record, and the tag association migrates as crm.lead.tag_rel entries linked to the Opportunity or Lead. Odoo tags are shared across Leads and Opportunities, matching Sell's tag model.
Zendesk Sell
Call Record
Odoo CRM
Activity (mail.activity) + Attachment (ir.attachment)
1:1Sell call logs, call outcomes, and call duration migrate as Odoo mail.activity with activity_type_id set to phone. Call recording URLs (if stored as external links in Sell) migrate as ir.attachment records pointing to the original recording URL, attached to the same crm.lead or res.partner. Call disposition and outcome text map to custom fields on the activity if the customer has Odoo Studio active.
| Zendesk Sell | Odoo CRM | Compatibility | |
|---|---|---|---|
| Lead | Lead (crm.lead)1:1 | Fully supported | |
| Contact | Partner (res.partner)1:many | Fully supported | |
| Company | Partner (res.partner) type=company1:1 | Fully supported | |
| Deal | Opportunity (crm.lead)1:1 | Fully supported | |
| Pipeline | Team (crm.team)lossy | Fully supported | |
| Stage | Stage (crm.stage)lossy | Fully supported | |
| Task | Activity (mail.activity)1:1 | Fully supported | |
| Note | Note (mail.message)1:1 | Fully supported | |
| Line Item | Sale Order Line or custom Opportunity fields1:1 | Fully supported | |
| User | User (res.users)1:1 | Fully supported | |
| Custom Fields | Custom Fields (ir.model.fields)1:1 | Mapping required | |
| Tag | Tag (crm.tag)1:1 | Fully supported | |
| Call Record | Activity (mail.activity) + Attachment (ir.attachment)1:1 | 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.
Zendesk Sell gotchas
Sell sunset creates a hard deadline for data migration
Sell API rate limits are low for large-volume exports
Custom field IDs differ from field keys in API calls
Sequences and cadence state cannot be migrated
Job queue limit of 30 concurrent background jobs
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 Sell sunset timeline assessment
We audit the Zendesk Sell account across tier (Team or Professional), custom fields, pipeline count, active Sequences, active Workflows, and engagement volume. We pair this with Odoo deployment type identification: Online (SaaS),.sh (PaaS), or self-hosted on-premise. The discovery output is a written migration scope with a Sell sunset gap analysis: if the migration start date is less than nine months from August 31 2027, we flag the account as urgent and compress the staging window.
Odoo schema design and Partner split rule definition
We design the Odoo destination schema before any data moves. This includes creating crm.team records for each Sell Pipeline, crm.stage records with correct sequence for each Sell Pipeline's stages, crm.tag records for existing Sell tags, and custom fields on crm.lead and res.partner to accommodate all Sell custom field values. The Contact-Company split rule is defined here: we document whether Contacts without a Company in Sell create standalone Partners or are merged into existing company Partners by domain match.
Sandbox migration and data quality audit
We run a full migration into an Odoo staging environment (copy of the destination database) using production data volume. The customer audits record counts (Leads in, Opportunities in, Partners in, Activities in), spot-checks 25-50 records against Sell source, and validates that Contact-Company hierarchy resolves correctly. Data quality issues (duplicates, blank required fields, malformed emails) are documented and corrected in Sell before the production migration phase. This stage can take one to two weeks depending on data cleanliness.
Owner and User reconciliation
We extract every distinct Sell User referenced on Deals, Contacts, and Tasks and match by email against Odoo's res.users table. Any Sell User without a matching Odoo User account enters a named reconciliation queue. The customer's Odoo admin provisions missing users before production migration begins. This step gates the production migration because Odoo's Opportunity and Activity records require a valid user_id for the responsible user.
Production migration in dependency order
We run production migration in record-dependency order: res.users (provisioned, validated), res.partner records with type=company (from Sell Companies), res.partner records with type=contact (from Sell Contacts with parent_id resolved to company Partner), crm.lead records with type=opportunity (from Sell Deals with partner_id resolved and stage_id resolved), crm.lead records with type=lead (from Sell Leads), mail.activity records (Tasks and calls linked to crm.lead or res.partner by Odoo ID resolved at migration time), crm.tag_rel entries, and Line Item custom fields on crm.lead. Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and automation rebuild handoff
We freeze Sell writes during cutover, run a final delta migration of records modified during the migration window, then enable Odoo as the system of record. We validate 50 random Opportunity records, 50 Contact records, and 20 Activity records against Sell source data and deliver a reconciliation summary to the customer. We deliver the Workflow, Sequence, and automation inventory document to the customer's team for rebuild in Odoo Action Rules or Studio. We support a one-week post-cutover window to address immediate data issues; ongoing Odoo configuration, workflow rebuild, and admin training are outside standard migration scope.
Platform deep dives
Zendesk Sell
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 1 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 Zendesk Sell and Odoo CRM.
Object compatibility
1 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
Zendesk Sell: Sell Core API: 36,000 requests/hour (10 req/token/sec); Zendesk Support varies by plan tier from 20 req/min (Team) to 700 req/min (Enterprise).
Data volume sensitivity
Zendesk Sell 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 Zendesk Sell to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Zendesk Sell 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 Zendesk Sell
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.