CRM migration

Migrate from eSalesTrack to Odoo CRM

Field-level mapping, validation, and rollback between eSalesTrack and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.

eSalesTrack logo

eSalesTrack

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

46%

6 of 13

objects map 1:1 between eSalesTrack and Odoo CRM.

Complexity

CModerate

Timeline

3-5 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

Field-level fidelity

Every standard and custom field arrives verified.

Schema-aware mapping

AI proposes the map; you confirm before any record moves.

Relationships preserved

Parent–child, lookups, and ownership stay linked.

Full activity history

Calls, emails, meetings — with original timestamps.

Attachments & notes

Documents, uploads, and inline notes move with the record.

Why teams make this switch

Two sides of the same decision

Leaving

eSalesTrack logo

eSalesTrack

What's pushing teams away

  • Dated and unintuitive UI — Software Advice, Research.com, and G2 reviewers consistently call out the interface as 'complex and unintuitive' with a 'steep' learning curve, slowing rep adoption.
  • Performance complaints — G2 reviewers flag slow loading, occasional mobile performance problems, and filtering issues that disrupt daily pipeline work.
  • Limited reporting customisation — multiple reviews note there are 'limited options for customizing reports beyond default templates', pushing analytics-heavy teams toward Salesforce, HubSpot, or Zoho.
  • Thin third-party integration ecosystem — independent reviews specifically call out 'insufficient integration with third-party business tools', so teams replacing email, marketing, or accounting connectors need workarounds.
  • Advanced customisations require vendor technical support — Software Advice reviewers note that while basic config is self-service, anything substantive needs paid help, inflating TCO.

Choosing

Odoo CRM logo

Odoo CRM

What's pulling them in

  • Teams choose Odoo CRM for its modular architecture — one base install with one-click app additions means they can adopt CRM alone and add accounting, inventory, or sales later as the business grows.
  • Small businesses pick Odoo because the Community edition is free and open-source, with no per-user or contact limits, allowing full evaluation before committing to a paid Enterprise tier.
  • The drag-and-drop Kanban pipeline and AI lead scoring are highlighted across G2 reviews as concrete features that make lead management faster and more visual than spreadsheet-based workflows.
  • Odoo's native integration with email, live chat, SMS, VoIP, and WhatsApp means inbound leads from multiple channels feed into a single pipeline without third-party middleware.
  • Companies in retail, supply chain, and construction value that Odoo's CRM module shares the same PostgreSQL database and UI as its ERP modules, eliminating data silos between sales and operations.

Object mapping

How eSalesTrack objects map to Odoo CRM

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

maps to

Odoo CRM

Contact

1:1
Fully supported

eSalesTrack 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

maps to

Odoo CRM

Contact (company type)

1:1
Fully supported

eSalesTrack 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

maps to

Odoo CRM

Lead (crm.lead)

1:1
Fully supported

eSalesTrack 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

maps to

Odoo CRM

Opportunity (crm.lead with type=opportunity)

1:1
Fully supported

eSalesTrack 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

maps to

Odoo CRM

CRM Stage

lossy
Fully supported

Each 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

maps to

Odoo CRM

User

1:1
Fully supported

eSalesTrack 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

maps to

Odoo CRM

Mail Message

1:many
Fully supported

eSalesTrack 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

maps to

Odoo CRM

Phonecall (crm.phonecall)

1:many
Fully supported

eSalesTrack 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

maps to

Odoo CRM

Calendar Event

1:many
Fully supported

eSalesTrack 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

maps to

Odoo CRM

Note

1:many
Fully supported

eSalesTrack 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

maps to

Odoo CRM

Task

1:many
Fully supported

eSalesTrack 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

maps to

Odoo CRM

Product Template

1:1
Fully supported

eSalesTrack 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)

maps to

Odoo CRM

Custom Field (ir.model.fields)

lossy
Fully supported

Any 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.

Gotchas + challenges

What specifically takes care here

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 logo

eSalesTrack gotchas

High

Implementation, training, customisation, and migration are billed separately

Medium

Custom object support is not publicly documented

Medium

Reporting templates are fixed — advanced analytics require external BI

Odoo CRM logo

Odoo CRM gotchas

High

Odoo.sh version gating blocks assisted migrations from trial

High

Enterprise modules fail to install on Community after database restore

Medium

Custom module view inheritance breaks between Odoo major versions

Medium

Custom fields risk losing their application context on Community

Low

API access for Community is gated behind the Custom Plan

Pair-specific challenges

  • Odoo requires Accounts before Contacts can attach

    Odoo CRM enforces a relational structure where Contacts have a Many2one partner_id field pointing to the Account (a Contact with is_company=True). eSalesTrack stores company name as a free-text field on Contact records, which has no direct equivalent in Odoo's import format. We resolve this by pre-importing all eSalesTrack Companies as Account records, then mapping each eSalesTrack Contact to its Account partner_id during the Contact import phase. Migrations that skip this ordering step result in Contact records with null partner_id, orphaning the Contact from the Account and breaking Odoo's address and contact inheritance.

  • CSV import cannot link activities to parent records without manual res_id injection

    Odoo's native CSV and XLSX import tools lack a parent-record ID lookup mechanism. When importing email, call, meeting, or note engagements from eSalesTrack, the import tool cannot resolve the parent Contact or Lead ID by email or name alone. We construct the res_id mapping in a staging layer before Odoo import: we extract the Contact and Lead IDs from the destination Odoo instance, join them against the eSalesTrack engagement records by contact email, and inject the resolved integer ID into the res_id field of each mail.message or note.note record during import.

  • eSalesTrack Workflows do not migrate to Odoo Automations

    eSalesTrack Workflows are a property-triggered automation model with conditions and actions scoped to the CRM module. Odoo Automations use server actions, on-change triggers, and base automation rules with a different configuration model. We do not migrate Workflows as automation code. We deliver a written inventory of every active eSalesTrack Workflow with its trigger, conditions, and actions, plus a recommended Odoo Automations equivalent using the Automation app or Studio for the customer's admin to rebuild post-migration.

  • Odoo Studio custom fields require edition and module access

    Odoo Studio for creating custom fields is available on the Standard and Enterprise paid plans. The free Community edition requires manual field creation via Settings > Technical > Database Structure > Fields, which requires technical access. If the destination Odoo instance is on Community, we create custom fields via the technical menu and document the changes for the customer's admin. Any eSalesTrack custom fields that reference picklist values require separate creation of ir.model.fields.selection records before the custom field itself can be added.

  • eSalesTrack has no public bulk export API

    eSalesTrack exports data via CSV at the account level, which means Contacts and Companies must be exported separately and joined in a staging environment before Odoo import. We cannot pull data via a REST or bulk API call, so export speed is limited by eSalesTrack's UI-based export mechanism and the total record count. We advise customers to request a full data export from eSalesTrack support if the UI export is throttled or capped at a record limit.

Migration approach

Six steps for a successful eSalesTrack to Odoo CRM data migration

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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

Context on both ends of the pair

eSalesTrack logo

eSalesTrack

Source

Strengths

  • Sales pipeline, forecasting, and quota management built directly into the CRM at SMB pricing.
  • Bundled marketing automation with campaign management and bulk personalized email.
  • Dedicated mobile edition for tablets and smartphones with account, lead, and communication management.
  • Multi-channel support (email, phone, live online, webinars, in-person training) for a small vendor.
  • Per-user pricing scales linearly so cost growth is predictable as the team adds reps.

Weaknesses

  • Dated and unintuitive UI with a steep learning curve cited across G2, Research.com, and Software Advice reviews.
  • Slow loading, mobile performance problems, and filtering issues called out in G2 reviewer feedback.
  • Reporting customisation is limited to default templates — power users need to export to BI tools.
  • Insufficient native integration with third-party business tools versus mainstream CRM ecosystems.
  • Advanced configuration and customisation require vendor technical support, inflating real cost of ownership.
Odoo CRM logo

Odoo CRM

Destination

Strengths

  • Modular open-source architecture lets teams start with CRM and add ERP apps as needs grow, all sharing one PostgreSQL database.
  • Free Community edition with no contact limits and full source code access means zero licensing cost for evaluation and small deployments.
  • Drag-and-drop Kanban pipeline with AI lead scoring gives a visual, prioritized view of the sales funnel without requiring custom configuration.
  • Native integrations with email, live chat, SMS, VoIP, WhatsApp, and social media feed all inbound leads into a single unified inbox.
  • Active Odoo Community Association (OCA) maintains dozens of community-maintained modules on GitHub for extended functionality.

Weaknesses

  • Gmail and email integration reliability is a recurring complaint — threads drop and conversations scatter across inboxes, disrupting sales team workflows.
  • Enterprise edition pricing stacks quickly: multiple apps at per-user rates ($25–$50/user/month) plus Odoo.sh hosting costs more than many SMBs anticipate.
  • Setup and configuration complexity increases significantly once custom fields, automation rules, and multiple installed modules are in play.
  • Odoo.sh trial databases run on a version (e.g., 18.3) that is not directly migratable to Odoo.sh, blocking the assisted migration path Odoo advertises.
  • Version upgrades between major Odoo releases (e.g., 17→18) frequently break custom module view definitions and XPath expressions, requiring manual remediation.

Complexity grading

How hard is this migration?

Moderate CRM migration. 1 of 8 objects need a manual workaround.

C

Overall complexity

Moderate migration

Derived from compatibility, mapping clarity, API constraints, and data volume across eSalesTrack and Odoo CRM.

  • Object compatibility

    C

    1 of 8 objects need a manual workaround.

  • Field mapping clarity

    C

    Field mapping is derived from defaults — final spec confirmed during the sample migration.

  • Timeline complexity

    B

    8-object category — typical timelines run 2–7 days end-to-end.

  • API constraints

    B

    eSalesTrack: Not publicly documented.

  • Data volume sensitivity

    B

    eSalesTrack doesn't expose a bulk API — REST + parallelization used for high-volume runs.

Estimator

Estimate your eSalesTrack to Odoo CRM migration cost

Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.

Step 1

What are you migrating?

Pick a category, then your source and destination platforms.

Category

FAQ

Frequently asked questions about eSalesTrack to Odoo CRM data migrations

Answers to the questions buyers ask most during eSalesTrack to Odoo CRM migration scoping. Not seeing yours? Book a call.

Can't find your answer?

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 consultation

Migrations under 15,000 Contacts and 3,000 Deals with no custom fields land between three and five weeks. Migrations with custom eSalesTrack properties, multi-stage pipelines, large engagement histories, or multiple eSalesTrack users requiring Odoo user provisioning move to eight to twelve weeks because of CSV staging time, Odoo Studio custom field configuration, and parent-record lookup resolution for activity history. The primary driver of timeline is the staging reconciliation step, where the customer's admin validates record counts and field mapping before production migration begins.

Adjacent paths

Related migrations to explore

Ready when you are

Move from eSalesTrack.
Land in Odoo CRM, intact.

Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.

Accuracy guarantee Rollback included Quote in 1 business day