CRM migration

Migrate from EXACT to Odoo CRM

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

EXACT logo

EXACT

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

100%

12 of 12

objects map 1:1 between EXACT and Odoo CRM.

Complexity

BStandard

Timeline

48-72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Exact is a Netherlands-based ERP and CRM platform targeting small and medium enterprises in Europe, with core strengths in accounting integration, project tracking, and workflow automation. Its data model centers on Accounts (customers and suppliers), Contacts, Projects, Documents, and a structured workflow engine. Exact exposes data through REST APIs with CSV/Excel export capabilities for migration purposes. Odoo CRM uses the crm.lead model for both leads and opportunities, with contacts stored as res.partner records linked to companies. Odoo's modular architecture means sales, accounting, inventory, and project management are separate apps sharing a common partner database. The migration carries Exact accounts to Odoo partners, contacts to partner contacts, opportunities to Odoo leads, and financial metadata as custom fields. Exact workflows and approval chains do not migrate — FlitStack exports workflow definitions as a reference document for Odoo automation rebuilding. The migration runs via Odoo's XML-RPC API with field-level validation before commit and a 24-48 hour delta-pickup window capturing in-flight records during cutover.

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

EXACT logo

EXACT

What's pushing teams away

  • Limited presence and support outside Europe (especially North America and APAC) push multinational growth-stage customers toward NetSuite, SAP Business One or Microsoft Dynamics.
  • Reporting capabilities lag competitors and frequently require Power BI add-on for advanced analysis — a friction point at renewal.
  • Some Exact Globe (on-premise) features have not fully migrated to Exact Online yet, frustrating long-time customers moving to the cloud.
  • API rate limits (60 calls/minute and 5,000 calls/day per app per company) constrain high-frequency integrations and force partners to negotiate higher limits.
  • Pricing escalates quickly when wholesale, manufacturing or project modules are added on top of base accounting, with full ERP packages reaching $554-$739/month.

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

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

EXACT

Account

maps to

Odoo CRM

res.partner

1:1
Fully supported

Exact accounts (customers and suppliers) map to Odoo res.partner records. The AccountType field in Exact determines customer_rank vs supplier_rank in Odoo. Parent-account hierarchies map to Odoo's parent_id on res.partner for corporate group structures. Inactive Exact accounts are set to active=False in Odoo unless explicitly merged with an active counterpart, and any duplicate account names receive a unique suffix to avoid constraint violations.

EXACT

Contact

maps to

Odoo CRM

res.partner (contact type)

1:1
Fully supported

Exact contacts migrate as Odoo partner contacts with type='contact', linked to the parent company partner via child_ids. The primary-contact flag in Exact determines which contact record receives the main address and communication preferences in Odoo. Additional phone numbers, secondary emails, and social media links from Exact are stored in Odoo's dedicated contact fields (phone, mobile, email, website) and in the contact's partner fields as appropriate.

EXACT

Deal / Opportunity

maps to

Odoo CRM

crm.lead

1:1
Fully supported

Exact deal pipeline stages map to Odoo crm.lead stage_id values through a value-mapping table. Deal probability, expected close date, and description fields map directly to Odoo's probability, date_deadline, and description fields. When Exact stage names lack a direct Odoo counterpart, we create custom stages in Odoo and link them in the mapping table to preserve the original pipeline flow and maintain reporting continuity.

EXACT

Project

maps to

Odoo CRM

project.project

1:1
Fully supported

Exact projects with billable hours and task breakdowns migrate to Odoo project.project and project.task. Non-billable projects map to Odoo internal projects. Task status and assignees transfer with user resolution by email. If Exact includes project templates or recurring tasks, these are recreated as Odoo project templates and recurring task rules, preserving the original allocation percentages and planned hours.

EXACT

Document / Attachment

maps to

Odoo CRM

ir.attachment

1:1
Fully supported

Exact document attachments (PDFs, images, office files) re-upload to Odoo's ir.attachment model linked to the corresponding res.partner, crm.lead, or project.task record. File size limits and binary storage follow Odoo's attachment configuration. During migration, attachment file names are sanitized to avoid special characters, and duplicate files are identified by checksum to prevent redundant storage in Odoo.

EXACT

Workflow / Automation

maps to

Odoo CRM

No equivalent

1:1
Fully supported

Exact workflow definitions, approval chains, and automated routing rules have no Odoo equivalent in the migration scope. FlitStack exports the workflow definitions as a structured PDF reference document so your Odoo admin can rebuild automations using Odoo's automated actions and server actions.

EXACT

Invoice / Financial Record

maps to

Odoo CRM

account.move

1:1
Fully supported

Exact invoice and payment records require separate accounting-module scope. If included, each Exact invoice maps to Odoo account.move with journal_id determined by invoice type (customer invoice vs vendor bill). Chart of accounts mapping is required before financial data loads. Additional mappings include tax codes to Odoo tax groups, payment terms to Odoo property_account_payment_term, and Exact currency codes to Odoo res.currency records to ensure accurate monetary values.

EXACT

Custom Field (Account-level)

maps to

Odoo CRM

ir.model.fields + custom column

1:1
Fully supported

Exact custom fields on Account require pre-creation in Odoo as ir.model.fields before data migration. Each custom field's type (text, number, date, selection) is translated to the corresponding Odoo field definition. Field values are stored in the custom column on res.partner.

EXACT

Custom Field (Contact-level)

maps to

Odoo CRM

ir.model.fields + custom column

1:1
Fully supported

Exact contact-level custom fields are created as Odoo ir.model.fields on res.partner before migration. Multi-value custom fields (Exact allows multi-select) map to Odoo char fields storing comma-separated values or to dedicated many2many tags depending on the use case. For high-cardinality selections, a many2many relation to a dedicated selection object is preferred to keep the UI clean and avoid long text strings in the database.

EXACT

User / Owner

maps to

Odoo CRM

res.users

1:1
Fully supported

Exact users are matched to Odoo res.users by email address. Unmatched Exact owners are flagged pre-migration — either invited to Odoo first or assigned to a fallback sales team. User active status and access rights require Odoo-side configuration post-migration. After matching, we set the Odoo user’s groups according to the Exact role (salesperson, manager) and enable the user only when the migration run confirms all required data are present.

EXACT

Activity Log (calls, emails, notes)

maps to

Odoo CRM

mail.message

1:1
Fully supported

Exact activity history (logged calls, emails, notes with timestamps and owners) migrates to Odoo mail.message records linked to the parent record. Original timestamps and body content are preserved. Email subject lines map to mail.message.subject. Attachments embedded in Exact emails are extracted and reattached to the corresponding mail.message in Odoo, and HTML bodies are cleaned to Odoo's plain-text format for consistent display.

EXACT

Exact UUID / Internal ID

maps to

Odoo CRM

source_system_id (custom char field)

1:1
Fully supported

Exact's internal record IDs and UUIDs are stored in a custom source_system_id char field on each Odoo record. This field is required for delta-run de-duplication, cross-referencing, and rollback traceability across subsequent migration runs. It also enables Odoo reports to reference the original Exact identifier for audit purposes and supports reconciliation scripts that compare migrated data against Exact exports.

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.

EXACT logo

EXACT gotchas

High

Strict API rate limits gate bulk extraction

Medium

Exact Globe vs Exact Online feature drift

Medium

Workflow and signalling rules are not exportable

Low

OAuth token lifecycle requires careful handling

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

  • Workflow definitions and approval chains do not migrate and require manual rebuild

    Exact's workflow engine stores approval chains, conditional routing, and automated actions as workflow definitions that have no structural equivalent in Odoo's action-rule model. Migrating workflow logic requires a separate discovery phase where your Exact workflow diagrams are reviewed and translated into Odoo automated actions and server actions. FlitStack exports workflow definitions as a structured reference document, but the rebuild itself is a configuration step outside the data migration scope. Failure to rebuild workflows means your sales process loses automated escalations, assignment rules, and approval gates that Exact enforced.

  • Chart of accounts and financial transaction history require separate accounting-module preparation

    Exact stores invoices, payments, and ledger entries with a Dutch-compliant chart of accounts structure. Odoo's accounting module uses a separate chart of accounts that must be configured before financial data can load. Invoice numbers, payment references, and fiscal year boundaries in Exact may conflict with Odoo's account.move sequence numbering. We flag Exact financial records during the pre-migration audit and either include chart-of-accounts mapping in scope or exclude financial transactions from the migration, depending on your requirements.

  • Custom field proliferation in Exact requires pre-creation of Odoo ir.model.fields before data loads

    Exact custom fields on Account and Contact objects are stored with type metadata in Exact's system tables. Odoo requires ir.model.fields to be created in developer mode before custom column values can be stored. Each Exact custom field must be identified, typed (char, integer, date, selection), and manually defined in Odoo before migration data can reference it. We deliver a custom-field creation checklist as part of the migration plan so Odoo is schema-ready before the data run commits.

  • Exact UUIDs are alphanumeric; Odoo IDs are sequential integers — foreign key resolution requires the source_system_id bridge

    Exact uses alphanumeric UUIDs as primary keys across all objects. Odoo uses sequential integer IDs assigned at record creation time. Foreign key references between Exact objects (e.g., Contact.accountid pointing to Account.uuid) cannot map directly to Odoo's integer IDs during migration. We store Exact UUIDs in a source_system_id char field on every migrated record, and all foreign key resolution uses the UUID bridge rather than Odoo integer IDs, ensuring relational integrity is preserved through the migration.

  • Exact's multi-entity (subsidiary) structure may require Odoo company-level data separation

    Exact supports multiple legal entities within a single database, each with separate fiscal configurations. Odoo models multi-company setups as separate res.company records with data isolation rules. If your Exact data spans multiple subsidiaries, we map each subsidiary's data to a corresponding Odoo company, and contacts and accounts are scoped by company_id in Odoo. This requires Odoo multi-company configuration to be planned before the migration runs, including alignment of VAT numbers, fiscal years, and inter-company reconciliation accounts.

Migration approach

Six steps for a successful EXACT to Odoo CRM data migration

  1. Extract and inventory Exact data via API and CSV export

    FlitStack connects to your Exact instance using your API credentials and exports all standard objects — accounts, contacts, deals, projects, attachments, and activity logs — as structured datasets. We also extract any custom field definitions from Exact's metadata tables. The inventory phase produces a record-count summary, identifies NULL-rate fields, flags duplicate records, and surfaces the presence of multi-entity structures. A data quality report is delivered to your team before field mapping begins.

  2. Map Exact objects and fields to Odoo models with foreign key resolution

    We build a field-mapping specification covering every Exact-to-Odoo field pair. Foreign keys — particularly Account.uuid to Contact.accountid and Account.uuid to Deal.accountid — are resolved using the UUID-bridge approach. Exact custom fields are mapped to ir.model.fields that need pre-creation in Odoo. The mapping spec is reviewed by your Odoo admin before the migration run to confirm stage names, owner assignments, and custom field readiness.

  3. Resolve users and owners by email match against Odoo res.users

    Before records are loaded, Exact users and deal owners are matched to Odoo res.users by email address. Records whose owners have no matching Odoo user are flagged in a pre-flight report. Your team either creates the missing Odoo users or assigns those records to a fallback sales team before the migration run. No record lands in Odoo without a resolved owner assignment.

  4. Run a sample migration with field-level diff across 100-500 representative records

    A test migration runs against a staging copy of your Odoo database, migrating a stratified sample of accounts, contacts, deals, and activities. We generate a field-level diff report comparing source Exact values to destination Odoo values for every mapped field. Your team reviews the diff to verify stage mappings, custom field values, owner assignments, and activity log preservation before the full run is scheduled.

  5. Execute full migration with delta-pickup window and audit log

    The full migration runs against your production Odoo instance using Odoo's XML-RPC API, migrating all records in the correct sequence: accounts first (res.partner), then contacts (res.partner with parent_id), then deals (crm.lead), then activities (mail.message), and finally attachments (ir.attachment). A delta-pickup window of 24-48 hours captures records modified in Exact during the cutover period. Every operation is logged in an audit trail, and one-click rollback is available if reconciliation reveals data integrity issues.

Platform deep dives

Context on both ends of the pair

EXACT logo

EXACT

Source

Strengths

  • Native Dutch and Belgian VAT, annual accounts and regulatory filing — no add-ons needed in core EU markets
  • Integrated finance, CRM, project, HRM, inventory and accountancy modules on one cloud platform
  • Well-documented REST/OData API with 350+ marketplace integrations and OAuth 2.0
  • Cloud implementations in 2-4 weeks for typical SME deployments
  • Strong accountant-client collaboration baked into the accountancy product line

Weaknesses

  • Limited regional support and local-compliance coverage outside EU (especially North America and APAC)
  • Reporting depth lags competitors; advanced analytics typically requires Power BI add-on
  • Exact Globe (on-prem) feature parity is incomplete in Exact Online for some advanced modules
  • API rate limits of 60/minute and 5,000/day per app per company constrain high-volume integrations
  • Workflow and signalling-rule configurations cannot be exported and must be rebuilt during migration
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. All 8 core objects map 1:1 between EXACT and Odoo CRM.

B

Overall complexity

Standard migration

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

  • Object compatibility

    A

    All 8 core objects map 1:1 between EXACT and Odoo CRM.

  • 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

    EXACT: 60 API calls per minute AND 5,000 API calls per day, per app per company. Signalled via X-RateLimit-Minutely-Remaining/Reset and X-RateLimit-Daily-Remaining/Reset headers. HTTP 429 returned on overrun..

  • Data volume sensitivity

    A

    EXACT exposes a bulk API — large-volume migrations stream efficiently.

Estimator

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

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

Can't find your answer?

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

Book a free 30 minute consultation

Most Exact to Odoo migrations complete in 48-72 hours of clock time for under 50,000 total records across accounts, contacts, and deals. Larger setups with 500,000+ records or multi-entity structures extend to 5-7 days. The longest planning step is custom field creation in Odoo and chart-of-accounts preparation if financial data is in scope. The migration run itself is typically 8-24 hours depending on API throughput and record volume.

Adjacent paths

Related migrations to explore

Ready when you are

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