CRM migration
Field-level mapping, validation, and rollback between eSalesTrack and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
eSalesTrack
Source
Odoo CRM
Destination
Compatibility
6 of 13
objects map 1:1 between eSalesTrack and Odoo CRM.
Complexity
CModerate
Timeline
3-5 weeks
Overview
Moving from eSalesTrack to Odoo CRM is a schema restructuring, not a record copy. eSalesTrack stores Contacts and Companies in a flat structure with owner assignments at the record level; Odoo CRM uses a relational model where Contacts attach to Accounts and Leads convert to Contacts with an explicit wizard. We design the target schema in Odoo during scoping, pre-create the Account records before importing Contacts, and resolve owner lookups by email match before record inserts. Activity history (calls, emails, meetings, notes) cannot move through Odoo's standard CSV import for engagements because it lacks the parent-record ID resolution required to link activities to the correct Contact or Lead; we construct the dependency chain in staging and inject the correct res_id values during import. eSalesTrack Workflows and automations do not migrate to Odoo Automations as code; we deliver a written inventory of every active eSalesTrack workflow with its trigger, conditions, and recommended Odoo Automations equivalent for the customer's admin to rebuild post-migration.
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 eSalesTrack 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.
eSalesTrack
Contact
Odoo CRM
Contact
1:1eSalesTrack Contacts map to Odoo CRM Contacts. The eSalesTrack company name field maps to the partner_id Many2one relationship pointing to the Odoo Contact record representing the company, and eSalesTrack contact name fields map to Odoo's name field split into firstname and lastname if Odoo name strips are enabled. We pre-create the Account records from eSalesTrack Companies before importing Contacts so that the partner_id foreign key is satisfied at insert time. Any eSalesTrack Contact without a matching Company record lands as an individual Contact without a parent company.
eSalesTrack
Company
Odoo CRM
Contact (company type)
1:1eSalesTrack Company records map to Odoo Contacts with is_company=True. The Company name becomes the Contact name field, domain and industry properties map to Odoo's website and industry fields, and address fields map via Odoo's contact address fields (street, city, state, country, zip). We use a company dedupe key on the domain field to avoid creating duplicate Account records when eSalesTrack has multiple Contacts from the same Company.
eSalesTrack
Lead
Odoo CRM
Lead (crm.lead)
1:1eSalesTrack Leads map to Odoo CRM Leads (crm.lead model). The lead name, email, phone, source, and medium properties map to Odoo's name, email_from, phone, source_id, and medium_id fields respectively. Any eSalesTrack custom lead fields migrate to Odoo custom fields created via Odoo Studio before migration. Lead status from eSalesTrack maps to a Odoo Stage value that we pre-configure in the CRM pipeline settings.
eSalesTrack
Opportunity
Odoo CRM
Opportunity (crm.lead with type=opportunity)
1:1eSalesTrack Deal records with a pipeline stage map to Odoo CRM Opportunities (crm.lead records with type=opportunity). The Deal name becomes the Opportunity name, the eSalesTrack deal amount maps to Odoo's expected_revenue, and the pipeline stage maps to the crm_stage_id with probability recalculated per Odoo's stage settings. We configure the Odoo pipeline stages and their sequence before migration so that stage names align with eSalesTrack's pipeline columns.
eSalesTrack
Deal Stage
Odoo CRM
CRM Stage
lossyEach eSalesTrack pipeline becomes an Odoo CRM Pipeline with corresponding Stage records. Stage names, sequence order, and probability percentages migrate to Odoo Stage records within that pipeline. Odoo enforces a 1-100 probability range per stage, so any eSalesTrack probabilities outside that range are rounded to the nearest valid integer during the transform step.
eSalesTrack
Owner
Odoo CRM
User
1:1eSalesTrack Owner records map to Odoo CRM Users by email address match. We extract every distinct owner_id referenced on Contact, Company, Lead, and Opportunity records and match against the destination Odoo instance's res.users table. Any eSalesTrack Owner without a matching Odoo User goes to a reconciliation queue for the customer's admin to provision before record import resumes. Owner assignments migrate as user_id on the crm.lead and res.partner records.
eSalesTrack
Engagement: Email
Odoo CRM
Mail Message
1:manyeSalesTrack email engagements map to Odoo Mail Message records linked to the parent Contact or Lead via model and res_id. The email body and subject migrate to mail.message body and subject fields. Odoo stores message threading via parent_id for replies. Without an Odoo mail gateway migration, incoming email addresses do not auto-link to existing records; we manually set the res_id on each message to the correct Contact or Lead record during staging.
eSalesTrack
Engagement: Call
Odoo CRM
Phonecall (crm.phonecall)
1:manyeSalesTrack call engagements map to Odoo CRM Phonecall records (crm.phonecall model). Call duration, disposition, and outcome map to Odoo's duration, state, and partner_phone_mobile fields. If crm_phonecall is not installed in the destination Odoo instance, calls migrate as Note records on the Contact or Lead instead. Activity timeline ordering is preserved by setting the create_date to the original eSalesTrack timestamp.
eSalesTrack
Engagement: Meeting
Odoo CRM
Calendar Event
1:manyeSalesTrack meeting engagements map to Odoo Calendar Event records (calendar.event model). Meeting title, start datetime, end datetime, and location map to Odoo's name, start_datetime, stop_datetime, and location fields. Attendee relationships are created as calendar.attendee records linked to the Contact or Lead.
eSalesTrack
Engagement: Note
Odoo CRM
Note
1:manyeSalesTrack Note engagements map to Odoo Note records (note.note model) attached to the relevant Contact, Lead, or Account. The note body migrates as the note field with create_date preserving the original timestamp. If the destination Odoo instance uses the Discuss module for notes instead, notes migrate as mail.message records with no email_partner_ids.
eSalesTrack
Engagement: Task
Odoo CRM
Task
1:manyeSalesTrack task engagements map to Odoo Project Task records (project.task model) if the Project module is installed, or to CRM Activity records (crm.activity) if only the CRM module is active. Task name, due date, priority, and status migrate to the chosen destination model. Owner mapping links the task to the correct Odoo User record via user_id.
eSalesTrack
Product
Odoo CRM
Product Template
1:1eSalesTrack Products map to Odoo Product Templates (product.template model). The product name, SKU, and price fields migrate to name, default_code, and list_price respectively. If eSalesTrack tracks cost price, it maps to standard_price on the product.template.
eSalesTrack
Custom Field (Contact)
Odoo CRM
Custom Field (ir.model.fields)
lossyAny eSalesTrack custom fields on Contact, Company, Lead, or Opportunity records migrate to Odoo custom fields created via the Settings > Technical > Database Structure > Fields menu or via Odoo Studio. We map eSalesTrack field data types to Odoo field types: text to char, dropdown to selection, checkbox to boolean, number to float or integer, date to date. Custom fields are created in the destination Odoo instance before any data import begins.
| eSalesTrack | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | Contact1:1 | Fully supported | |
| Company | Contact (company type)1:1 | Fully supported | |
| Lead | Lead (crm.lead)1:1 | Fully supported | |
| Opportunity | Opportunity (crm.lead with type=opportunity)1:1 | Fully supported | |
| Deal Stage | CRM Stagelossy | Fully supported | |
| Owner | User1:1 | Fully supported | |
| Engagement: Email | Mail Message1:many | Fully supported | |
| Engagement: Call | Phonecall (crm.phonecall)1:many | Fully supported | |
| Engagement: Meeting | Calendar Event1:many | Fully supported | |
| Engagement: Note | Note1:many | Fully supported | |
| Engagement: Task | Task1:many | Fully supported | |
| Product | Product Template1:1 | Fully supported | |
| Custom Field (Contact) | Custom Field (ir.model.fields)lossy | 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.
eSalesTrack gotchas
Implementation, training, customisation, and migration are billed separately
Custom object support is not publicly documented
Reporting templates are fixed — advanced analytics require external BI
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 data export
We audit the eSalesTrack account for total record counts across Contacts, Companies, Leads, Opportunities, Products, and engagement history. We request a full CSV export from eSalesTrack covering all objects, with custom fields included. We pair this with an Odoo edition assessment: Community (free CRM, custom fields via technical menu) vs Standard ($50/user/month, Studio available) vs Enterprise (additional automation and reporting). The discovery output is a written migration scope with record counts, a field mapping table, and an Odoo edition recommendation.
Staging environment setup and schema design
We stand up an Odoo staging instance matching the production edition. We design the destination CRM schema: pre-create Account records from eSalesTrack Companies, configure CRM pipeline stages and their sequence and probability, create custom fields via Studio or the technical menu for any eSalesTrack custom properties, and set up Users matching the eSalesTrack owner list. The staging schema is validated against the eSalesTrack export before any production work begins.
Staging migration and reconciliation
We run a full migration into the Odoo staging instance using production-like data volume from the eSalesTrack export. The customer reconciles record counts (Accounts in, Contacts in, Leads in, Opportunities in, Activities in), spot-checks 20-40 records against the source CSV, and signs off the schema and field mapping before production migration begins. Any custom field type corrections, stage mapping adjustments, or owner lookup failures are resolved here.
Owner reconciliation and user provisioning
We extract every distinct eSalesTrack owner referenced on Contacts, Companies, Leads, and Opportunities and match by email against the Odoo destination instance's res.users table. Any eSalesTrack owner without a matching Odoo user goes to a reconciliation queue. The customer's Odoo admin provisions missing users (active or inactive based on whether the original eSalesTrack user is still employed) before the production migration phase. Migration cannot proceed past this step because user_id references are required on most CRM records.
Production migration in dependency order
We run production migration in record-dependency order: Accounts (from eSalesTrack Companies), Products (from eSalesTrack Products), Contacts (with partner_id resolved to Account), Leads (with stage_id and user_id resolved), Opportunities (with partner_id, stage_id, and user_id resolved), Engagement history (mail.message, crm.phonecall, calendar.event, note.note via CSV with pre-resolved res_id). Each phase emits a row-count reconciliation report before the next phase begins. We pause writes in eSalesTrack during the production cutover window to capture any delta records created during the migration.
Cutover, validation, and workflow handoff
We freeze eSalesTrack writes during cutover, run a final delta migration of any records modified or created during the migration window, then enable Odoo CRM as the system of record. We deliver the Workflow and automation inventory document to the customer's admin team. We support a one-week hypercare window where we resolve any reconciliation issues raised by the customer's sales team. We do not rebuild eSalesTrack Workflows as Odoo Automations inside the migration scope; that work is handled by the customer's admin or an Odoo implementation partner as a separate engagement.
Platform deep dives
eSalesTrack
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Moderate CRM migration. 1 of 8 objects need a manual workaround.
Overall complexity
Moderate migration
Derived from compatibility, mapping clarity, API constraints, and data volume across eSalesTrack and Odoo CRM.
Object compatibility
1 of 8 objects need a manual workaround.
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
eSalesTrack: Not publicly documented.
Data volume sensitivity
eSalesTrack doesn't expose a bulk API — REST + parallelization used for high-volume runs.
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 eSalesTrack to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your eSalesTrack 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 eSalesTrack
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.