CRM migration

Migrate from Exsalerate to Odoo CRM

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

Exsalerate logo

Exsalerate

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

73%

11 of 15

objects map 1:1 between Exsalerate and Odoo CRM.

Complexity

BStandard

Timeline

3-5 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Exsalerate and Odoo CRM are structurally different platforms that require deliberate schema mapping rather than a simple record copy. Exsalerate uses a flat Account-centric model where Contacts are tightly bound to the Account record; Odoo separates these into res.partner (contacts and companies) with explicit address and role types. We pre-create Odoo's Partner records, split Exsalerate's account-contact pairs into separate Odoo contacts, and resolve the parent Partner before importing any dependent records. Exsalerate has no documented public API — our migration path relies on CSV exports and, where available, direct database access — so we build a multi-file reconciliation step into scoping to confirm export completeness before any transform work begins. WorkflowMax quotes imported as Exsalerate Opportunities carry a cross-reference that has no native Odoo equivalent; we store it in a custom field and flag it for manual reconnection post-migration. Colour-coded activity tiles encode urgency metadata we preserve as a custom field on migrated Tasks. We do not migrate Exsalerate's workflow automation, Xero sync configurations, or reporting dashboards — these are documented in a written rebuild inventory for your Odoo admin.

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

Exsalerate logo

Exsalerate

What's pushing teams away

  • Reporting depth does not match enterprise CRMs — Exsalerate's built-in analytics are limited compared to platforms like Salesforce or HubSpot, and customers requiring multi-touch attribution, forecasting models, or custom dashboards eventually outgrow what the platform surfaces.
  • Scalability concerns for teams above 20–30 users — several reviewers note that the platform was adequate at small scale but became slower and harder to manage as headcount and record volume grew, particularly on the pipeline view with large deal counts.
  • Limited third-party integrations beyond Xero and WorkflowMax — firms that need to connect to marketing automation, telephony, ERP, or other tools report significant friction, and the integration ecosystem is described as underdeveloped relative to major CRM platforms.
  • Support responsiveness varies — a subset of reviews mention slower response times from the Exsalerate support team, particularly when handling edge cases or technical questions about the WorkflowMax sync.
  • No native mobile app with full feature parity — field sales teams note that the mobile experience lacks the desktop pipeline view and some activity logging features, reducing utility for users who are frequently off-site.

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 Exsalerate objects map to Odoo CRM

Each row shows how a Exsalerate 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.

Exsalerate

Account

maps to

Odoo CRM

res.partner (Company role) + res.partner (Contact records)

1:many
Fully supported

Exsalerate's flat Account is the central entity carrying both company-level data and embedded contact data. We split this into Odoo res.partner records: the Account name and address fields become a res.partner with partner_type = 'company' (or address_type = 'contact' for the primary company contact), and any secondary contacts within the Account become separate res.partner records linked via parent_id to the company partner. The Account-Contact relationship maps to the parent_id lookup in Odoo. We preserve Exsalerate's account owner as a Many2one field on the partner record, resolving Exsalerate user email to an Odoo User record before import.

Exsalerate

Contact

maps to

Odoo CRM

res.partner (contact role)

1:1
Fully supported

Exsalerate Contacts associated to an Account migrate to Odoo res.partner with parent_id pointing to the Account's company partner record. Contact role (decision-maker, influencer, billing, technical) is stored as a custom field on res.partner since Odoo does not have a native contact-role attribute. Email, phone, mobile, job title, and department fields map directly. We run duplicate detection on email address before import to avoid creating duplicate res.partner records where Exsalerate has already deduplicated.

Exsalerate

Opportunity

maps to

Odoo CRM

crm.lead

1:1
Fully supported

Exsalerate Opportunities map to Odoo crm.lead records with type = 'opportunity'. Stage name maps to Odoo's stage_id with probability recalculated to Odoo's 0-100 scale; Exsalerate's colour-coded stage tiles do not have a native Odoo equivalent, so stage colour metadata is stored as a custom char field on the crm.lead record. Expected close date, deal value, and owner migrate directly. Exsalerate's deal name maps to crm.lead name, and the Account lookup maps to the resolved res.partner record.

Exsalerate

Pipeline

maps to

Odoo CRM

crm.team + crm.stage grouping

1:1
Fully supported

Exsalerate Pipelines map to Odoo crm.team (Sales Teams). We create one crm.team per Exsalerate Pipeline, preserving the Pipeline name as the team name. Exsalerate Pipeline Stages are then configured as crm.stage records within that team context, with stage order and colour metadata preserved. Note that Exsalerate's per-pipeline stage sequence is modelled as Odoo's global stage sequence with team-based filtering; we document any pipeline-specific stage logic that requires Odoo Studio or custom code to replicate.

Exsalerate

Pipeline Stage

maps to

Odoo CRM

crm.stage

lossy
Fully supported

Each Exsalerate Pipeline Stage label becomes an Odoo crm.stage record within the corresponding crm.team. Stage probability from Exsalerate maps to Odoo's stage_id probability field (integer 0-100). Exsalerate's colour coding on stages (which drives visual pipeline tile display) is stored as a custom field stage_color on the crm.stage record. Stage-level automation triggers in Exsalerate do not migrate — we document them in the automation inventory for rebuild in Odoo Studio or a custom Python module.

Exsalerate

To-Do Item (Activity Tile)

maps to

Odoo CRM

mail.activity (Task mode)

1:1
Fully supported

Exsalerate's colour-coded activity tiles represent tasks and follow-up reminders. We map these to Odoo mail.activity records (or ir.model.data Task records if the Project module is installed). The tile colour encoding (which signals urgency and context in Exsalerate) is captured as a custom char field activity_tile_color on the mail.activity record. Due date, status (complete/overdue), and owner migrate directly. Activity tiles that represent meetings or calls map to mail.activity with activity_type_id set to 'meeting' or 'call' respectively.

Exsalerate

Email Activity

maps to

Odoo CRM

mail.message

1:1
Fully supported

Exsalerate Email Activities associated to Accounts or Contacts migrate as Odoo mail.message records with message_type = 'email'. Subject, body (plain text), timestamp, sender (author_id resolved to res.partner), and recipient partner_ids are preserved. Attachments migrate as ir.attachment records linked via res_id/res_model to the parent crm.lead or res.partner. Email threading relationships from Exsalerate are not guaranteed to be preserved as Odoo inherits threading via the mail.message parent_id field if the source system exposes this reference; otherwise, threaded context is documented in the migration notes.

Exsalerate

Custom Fields (Accounts, Contacts, Opportunities)

maps to

Odoo CRM

Custom fields on res.partner and crm.lead

lossy
Fully supported

Exsalerate custom fields on Accounts, Contacts, and Opportunities are pre-created as custom fields in Odoo via Odoo Studio before migration begins. We map field types at migration time: Exsalerate picklist values become Odoo selection fields with equivalent option values; date fields normalise to Odoo's datetime format; numeric fields map to float or monetary fields as appropriate. Any Exsalerate custom field that has no Odoo equivalent (e.g., multi-select without a natural selection field) is stored as a char field with the raw value and flagged for the admin to re-evaluate post-migration.

Exsalerate

User / Owner

maps to

Odoo CRM

res.users

1:1
Fully supported

Exsalerate user accounts map to Odoo res.users records. We create a user mapping table during scoping using email as the lookup key. Inactive Exsalerate users are mapped to inactive res.users with the original Exsalerate Owner name stored in a custom field for reconciliation. Active users are provisioned by the customer's Odoo admin before migration resumes because OwnerId references on crm.lead and res.partner are required at import time. Users with no Exsalerate email (system-generated owners) are mapped to a migration service account flagged for admin reassignment post-import.

Exsalerate

WorkflowMax Quote cross-reference

maps to

Odoo CRM

Custom field on crm.lead + ir.model.data note

1:1
Fully supported

Exsalerate allows WorkflowMax quotes to be imported as Opportunities with a cross-reference to the originating WorkflowMax job or quote. This reference is an Exsalerate custom attribute that has no native Odoo equivalent. We store the WorkflowMax quote/job ID in a custom char field x_workflowmax_ref on the crm.lead and document the original Exsalerate field name and value in the migration record. Since WorkflowMax is not an Odoo product, customers using WorkflowMax post-migration will need to re-establish this cross-reference manually in Odoo or via a custom integration.

Exsalerate

Xero Integration data

maps to

Odoo CRM

res.partner notes + custom fields

1:1
Fully supported

Exsalerate stores Xero customer IDs, invoice sync status, and comparative sales data on Account records (e.g., last invoiced date, overdue invoice flags, MTD/YTD sales comparatives). We migrate the Xero customer reference ID as a custom char field x_xero_contact_id on res.partner. The comparative financial data (MTD, YTD, last-12-months sales figures surfaced in Exsalerate's Account Management Dashboard) does not map to a standard Odoo CRM field — we store it in a custom text or float field and flag it for the admin to evaluate whether Odoo's Accounting module can replicate the same view from live data.

Exsalerate

Tag / Category

maps to

Odoo CRM

res.partner.category or custom tag

lossy
Fully supported

Exsalerate uses tags and categories to segment Accounts and Contacts (e.g., industry classification, account tier, team assignment). We map these to Odoo res.partner.category records (Tags in the UI) and create a tag_assignment table linking partner IDs to the resolved category IDs. Tags with no Odoo equivalent are stored as a custom char field and flagged for the admin to create as formal Odoo tags post-migration.

Exsalerate

Engagement history (calls, emails, meetings)

maps to

Odoo CRM

mail.activity + mail.message

1:1
Fully supported

Exsalerate logs engagement history (calls, emails, meetings, notes) against Accounts and Contacts. We map calls to mail.activity with activity_type_id = 'call', preserving call duration and disposition as custom fields. Meeting records map to mail.activity with activity_type_id = 'meeting' and the original timestamp as activity_date_deadline. Email logs map to mail.message with message_type = 'email' linked to the parent res.partner or crm.lead. Note that Odoo's activity timeline is shared across CRM and Project — if the customer also uses Odoo Project, migrated activities appear in both contexts, which may require a tag-based filter to maintain Exsalerate's account-activity-only view.

Exsalerate

Lead / Prospect (if applicable)

maps to

Odoo CRM

crm.lead (Lead type)

1:1
Fully supported

Exsalerate does not have a separate Lead object — all prospects are managed as Accounts with a status flag or pipeline assignment. If the customer has records in Exsalerate that represent unqualified prospects (not yet converted to active Accounts), we import them as Odoo crm.lead with type = 'lead' rather than type = 'opportunity'. The Exsalerate Account name becomes the crm.lead contact_name, and any contact details on the Account map to the lead's email and phone fields. This ensures unqualified prospects enter Odoo's standard lead qualification workflow rather than appearing in the sales pipeline directly.

Exsalerate

File Attachments

maps to

Odoo CRM

ir.attachment

1:1
Fully supported

Exsalerate allows file attachments on Accounts, Contacts, and Opportunities. We migrate these as Odoo ir.attachment records linked via res_model and res_id to the corresponding crm.lead or res.partner. Files are exported from Exsalerate as binary blobs or file URLs, validated for file type and size, and re-uploaded during the Odoo import phase. Files exceeding Odoo's default 25MB attachment limit are flagged for the admin to store in an external document management system (Odoo Documents or a linked cloud storage service).

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.

Exsalerate logo

Exsalerate gotchas

Medium

WorkflowMax quote-to-opportunity linkage is not a standard CRM field

High

Exsalerate has no publicly documented bulk export or API endpoint

Low

Colour-coded to-do tiles do not map to standard CRM task priorities

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

  • Exsalerate has no documented public API

    Exsalerate does not publish a REST API or bulk export endpoint. Our migration path relies on its built-in CSV export functionality and, where available, direct database access for the customer's specific deployment. We confirm the export method during discovery and plan for multi-file reconciliation if the CSV export does not include all required objects (Accounts, Contacts, Opportunities, Activities, Custom Fields) in a single coordinated export. If no viable export mechanism is available, we flag this as a migration blocker before scoping proceeds. This is the highest-risk step for Exsalerate migrations and must be resolved before any other migration work begins.

  • Exsalerate's flat Account-Contact model splits in Odoo

    Exsalerate embeds Contacts within an Account record with no separate company-level entity. Odoo separates these into res.partner records where a company partner exists as one record and contacts within that company exist as separate partner records with parent_id pointing to the company. The mapping must handle the split explicitly: we pre-create the company partner, then create contact partners with parent_id set to the company partner before importing any dependent records. Migrations that treat Exsalerate Accounts as 1:1 with Odoo Partners end up with Exsalerate Contacts mapped to the wrong parent or as orphaned records without a company link.

  • WorkflowMax quote cross-references have no native Odoo home

    Exsalerate allows WorkflowMax quotes to be imported as Opportunities with a cross-reference to the originating job or quote. This cross-reference is an Exsalerate custom attribute — it is not a standard CRM field and has no equivalent in Odoo CRM. We store the WorkflowMax reference ID in a custom char field x_workflowmax_ref on the migrated crm.lead. Since WorkflowMax is not an Odoo product, customers must re-establish this cross-reference manually in Odoo or via a custom integration. We document the original Exsalerate linkage values in the migration record so that the rebuild work is not manual from scratch.

  • Colour-coded activity tiles do not map to Odoo native fields

    Exsalerate uses colour-coded activity tiles to signal urgency, task type, and follow-up context. This visual encoding is meaningful within Exsalerate's dashboard but is not a standard CRM concept. We capture the tile colour value as a custom char field activity_tile_color on the mail.activity record in Odoo. The Odoo CRM kanban view does not natively interpret colour values on activities — the customer must decide whether to use Odoo Studio to create a colour-coded activity kanban view or accept that tile colours become an informational custom field. Odoo Project module does not have a native colour-on-task feature either.

  • Xero integration data in Exsalerate is CRM-scoped and not ERP-equivalent

    Exsalerate surfaces Xero invoice status, overdue flags, and comparative sales data on Account records as part of its account management dashboard. This data was synced from Xero into Exsalerate for CRM-display purposes. When migrating to Odoo CRM alone (without also migrating to Odoo Accounting), the Xero sync does not exist in Odoo. We preserve the Xero contact reference ID as a custom field and flag the comparative financial data for the customer to re-evaluate: either implement Odoo Accounting (if migrating the full ERP) or rebuild the Xero sync via a custom Odoo-Xero integration or a third-party connector.

Migration approach

Six steps for a successful Exsalerate to Odoo CRM data migration

  1. Discovery and export confirmation

    We audit the Exsalerate deployment across all objects: Accounts, Contacts, Opportunities, Pipelines, Stages, Activity Tiles, Email Activities, Custom Fields, and User accounts. We also identify any WorkflowMax quote cross-references and Xero sync fields embedded in Exsalerate. The critical discovery step is confirming the export mechanism: we test whether the CSV export includes all objects in a single coordinated download or whether multi-file reconciliation is required. If the CSV export is incomplete, we explore direct database access or flag this as a migration blocker before scoping sign-off.

  2. Schema design in Odoo

    We design the destination schema in the customer's Odoo environment before any data moves. This includes creating the crm.team records (one per Exsalerate Pipeline), configuring crm.stage records with probability values and colour metadata from Exsalerate, pre-creating any custom fields on res.partner (x_workflowmax_ref, x_xero_contact_id, activity_tile_color) via Odoo Studio, and designing the res.partner split strategy for the Account-to-company-plus-contacts mapping. Schema is deployed into a staging or sandbox Odoo environment first for validation.

  3. Sandbox migration and reconciliation

    We run a full migration into a staging Odoo environment using production-equivalent data volume. The customer's team reconciles record counts (Accounts mapped to company partners and contact partners, Opportunities on crm.lead, Activities on mail.activity), spot-checks 25-50 records against the Exsalerate source for field accuracy and relationship integrity, and verifies that the colour tile metadata, WorkflowMax cross-references, and Xero integration fields are correctly populated. The customer signs off the staging migration before production migration begins.

  4. Owner and user reconciliation

    We extract every distinct Exsalerate user referenced as an owner on Accounts, Contacts, and Opportunities and match by email against the Odoo destination's res.users table. Inactive Exsalerate users are mapped to inactive Odoo users with the original name preserved. Any Exsalerate owner without a matching Odoo User record is held in a reconciliation queue for the customer's Odoo admin to provision before record import resumes. OwnerId references on crm.lead and res.partner must be resolved at import time because Odoo enforces referential integrity on these fields.

  5. Production migration in dependency order

    We run production migration in record-dependency order: res.users (validated by admin), company partners (from Exsalerate Accounts), contact partners (from Exsalerate Contacts with parent_id to company partner), crm.team (from Exsalerate Pipelines), crm.stage (from Exsalerate Stages), crm.lead type=lead (for unqualified prospects), crm.lead type=opportunity (from Exsalerate Opportunities with WorkflowMax reference in custom field), mail.activity and mail.message (Activities and Emails via Odoo XMLRPC batch import), and ir.attachment (file migrations). Each phase emits a row-count reconciliation report before the next phase begins.

  6. Cutover, validation, and rebuild handoff

    We freeze Exsalerate writes during the cutover window, run a final delta migration for any records modified during the window, then enable Odoo as the system of record. We deliver a written inventory of Exsalerate workflow automations, Xero sync configurations, and reporting dashboards requiring rebuild in Odoo Studio, Odoo automation rules, or the Odoo Accounting module. We support a one-week hypercare window where we resolve reconciliation issues raised by the customer's sales team. We do not rebuild Exsalerate automations as Odoo automated actions inside the migration scope — that is a separate engagement or an internal Odoo admin task.

Platform deep dives

Context on both ends of the pair

Exsalerate logo

Exsalerate

Source

Strengths

  • Built-in WorkflowMax and Xero integration for service-industry workflows
  • Drag-and-drop pipeline board with colour-coded stage tiles
  • Account-centric model with explicit retention focus
  • Simple setup with minimal consultant involvement required for basic deployments
  • Purpose-built for ANZ small-to-mid professional services firms

Weaknesses

  • Limited reporting and analytics compared to enterprise CRM platforms
  • Shallow third-party integration ecosystem beyond accounting tools
  • Performance degrades at scale with large record volumes
  • No mobile app with full feature parity for field sales users
  • Support responsiveness inconsistent for complex technical scenarios
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?

Standard CRM migration. 1 of 8 objects need a mapping; the rest are 1:1.

B

Overall complexity

Standard migration

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

  • Object compatibility

    B

    1 of 8 objects need a mapping; the rest are 1:1.

  • 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

    Exsalerate: Not publicly documented..

  • Data volume sensitivity

    B

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

Estimator

Estimate your Exsalerate 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 Exsalerate to Odoo CRM data migrations

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

Can't find your answer?

Walk through your Exsalerate to Odoo CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Migrations land between three and five weeks for accounts under 10,000 Accounts, 20,000 Contacts, and 5,000 Opportunities where the CSV export is complete and no direct database access is required. Migrations requiring direct database access (because the CSV export is incomplete), multi-file reconciliation, custom field pre-creation across Exsalerate's flat model to Odoo's split Partner structure, colour-tile re-encoding as custom task fields, or sandbox validation move to eight to twelve weeks. The export confirmation step in discovery is the critical path item — if Exsalerate's CSV export is not viable, scoping cannot proceed until an alternative export path is confirmed.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Exsalerate.
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