ERP migration
Field-level mapping, validation, and rollback between EF Enterprise and Odoo ERP. We move data and schema; workflows are rebuilt natively in Odoo ERP.
EF Enterprise
Source
Odoo ERP
Destination
Compatibility
7 of 10
objects map 1:1 between EF Enterprise and Odoo ERP.
Complexity
BStandard
Timeline
5-8 weeks
Overview
Moving from EF Enterprise to Odoo ERP is a migration from a Salesforce-native niche exhibit management app to a modular open-source ERP. EF Enterprise stores event data as Salesforce custom objects (Exhibitions, Booths, Sponsors, Sessions, Badge Records) with undocumented custom fields and Flow-triggered badge printing. Odoo uses a Python-based ORM with distinct modules for CRM (res.partner, crm.lead), Events (event.event, event.registration), and Project (project.task). We extract the source schema via Salesforce metadata API, decode undocumented custom fields during discovery, and map EF Enterprise's hierarchical exhibit structure to Odoo's event and contact models. Badge print triggers (Salesforce Flow or Apex) have no direct Odoo equivalent; we document the trigger logic and recommend the Odoo event Badge app or a custom report for print-room handoff. Workflows, Apex triggers, and Salesforce Flows do not migrate; we deliver a written automation inventory for Odoo Studio or a Python developer to rebuild.
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 EF Enterprise object lands in Odoo ERP, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
EF Enterprise
Exhibition
Odoo ERP
event.event
1:1EF Enterprise Exhibitions (event name, dates, venue, status) map directly to Odoo event.event records. We extract Exhibition fields from Salesforce including Exhibition__c.Name, Date__c, Venue__c, and Status__c and map them to event.event name, date_begin, date_end, address_id, and stage. Venue details migrate as address contacts (res.partner with type=contact) linked to the event.
EF Enterprise
Booth
Odoo ERP
event.booth
1:1EF Enterprise Booths are child records of Exhibition, storing booth number, size, zone, and per-booth pricing. Odoo event.booth model stores booth name, capacity, and event_id reference. We preserve the Exhibition parent via event_id lookup resolution at migration time. Per-booth pricing migrates to a custom decimal field booth_price__c on event.booth since the standard Odoo event.booth model does not include pricing.
EF Enterprise
Sponsor
Odoo ERP
res.partner + event.sponsor
1:manyEF Enterprise Sponsors link to Exhibitions and optionally to specific Booths, with sponsor tier flags (Gold, Silver, Bronze). We split this into two Odoo records: res.partner for the sponsor company contact (with a custom partner_tag__c for tier classification) and event.sponsor linking that partner to the event.event record with the appropriate sponsorship level.
EF Enterprise
Attendee Registration
Odoo ERP
event.registration
1:1EF Enterprise Attendee Registrations store contact reference, session selections, and badge type. We map these to Odoo event.registration with partner_id resolved from the contact reference, and badge type stored in a custom field registration_badge_type__c. Session selections require resolution to Odoo event.track records if the destination uses the Odoo Event Tracks app.
EF Enterprise
Session
Odoo ERP
event.track
1:1EF Enterprise Sessions carry capacity limits and track classifications linked to Exhibitions. Odoo event.track stores track name, description, date, and seat availability (seats_max, seats_available). Multi-track sessions in EF Enterprise flatten into individual event.track records per session slot with a custom field session_track_class__c carrying the original track classification.
EF Enterprise
Badge Record
Odoo ERP
event.badge + event.registration (custom field)
1:1EF Enterprise Badge Records encode attendee type, access levels, and printing status. Odoo's event.badge model stores badge information linked to event.registration. We migrate badge type as a custom field on event.badge and preserve printing status in a custom badge_printed__c boolean. Auto-print triggers from Salesforce Flow or Apex do not migrate; we document the trigger logic in a written handoff document for the customer's Odoo developer.
EF Enterprise
Custom Objects
Odoo ERP
ir.model + ir.model.fields (configuration)
lossyEF Enterprise custom objects for exhibitor contracts, floor plans, and lead retrieval are not reliably discoverable via the standard Salesforce API without customer-provided schema access. We request a Salesforce schema export during discovery and pre-create equivalent Odoo models via res.config.settings or a data migration script. If schema access is unavailable, we flag the custom object as unsupported and migrate only standard fields.
EF Enterprise
Owner / User
Odoo ERP
res.users
1:1EF Enterprise stores OwnerId on records as a Salesforce User reference. We resolve owners by email match against Odoo res.users. Any EF Enterprise Owner without a matching Odoo User goes to a reconciliation queue for the customer's admin to provision before record import resumes. Archived Salesforce users map to Odoo users with active=False.
EF Enterprise
Attachments
Odoo ERP
ir.attachment
1:1EF Enterprise Attachments linked to booths, sponsors, and exhibitions migrate as Odoo ir.attachment records linked to the corresponding res.model record (event.event, event.booth, res.partner). Large floor plan PDFs are chunked and re-uploaded via Odoo's ir.attachment create endpoint. ContentDocument links from Salesforce become Odoo res.model and res_id references.
EF Enterprise
Tags and Custom Properties
Odoo ERP
ir.filters + res.partner.category
lossyEF Enterprise uses Salesforce standard tags and custom property sets for exhibitor classification. We export the full tag taxonomy and recreate it in Odoo as res.partner.category records (for sponsor/attendee tags) and ir.filters (for saved view filters on event.event and event.registration). Duplicate tags are merged during the transformation step.
| EF Enterprise | Odoo ERP | Compatibility | |
|---|---|---|---|
| Exhibition | event.event1:1 | Fully supported | |
| Booth | event.booth1:1 | Fully supported | |
| Sponsor | res.partner + event.sponsor1:many | Fully supported | |
| Attendee Registration | event.registration1:1 | Fully supported | |
| Session | event.track1:1 | Fully supported | |
| Badge Record | event.badge + event.registration (custom field)1:1 | Fully supported | |
| Custom Objects | ir.model + ir.model.fields (configuration)lossy | Not supported | |
| Owner / User | res.users1:1 | Fully supported | |
| Attachments | ir.attachment1:1 | Mapping required | |
| Tags and Custom Properties | ir.filters + res.partner.categorylossy | Mapping required |
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.
EF Enterprise gotchas
Undocumented custom Salesforce fields are not migratable by default
Archived (inactive) records behave differently from deleted records
Badge print triggers fire on record insert, risking duplicate badges at cutover
Odoo ERP gotchas
No rollback for CSV imports
External ID conflicts on re-import
Many2many field encoding in CSV imports
Large export timeouts require batching
Version schema drift between Odoo releases
Pair-specific challenges
Migration approach
Discovery and schema export request
We audit the source EF Enterprise Salesforce org for Exhibitions, Booths, Sponsors, Sessions, Attendee Registrations, Badge Records, and custom objects in use. We request a Salesforce schema export (via the customer's Salesforce admin) to discover all custom fields including undocumented exhibitor contract, sponsor ROI, and booth pricing fields. We pair this with an Odoo edition decision: Odoo Community (free, Python module for custom fields) or Odoo Enterprise (Studio for drag-and-drop fields). The discovery output is a written migration scope with record counts per object and a custom field inventory.
Destination schema design and booth-sponsor relationship modeling
We design the destination Odoo models. This includes pre-creating event.event records for Exhibitions, event.booth with a custom booth_price__c field for Booths, res.partner with partner_tag__c for Sponsors, event.registration with registration_badge_type__c for Attendees, and event.track with session_track_class__c for Sessions. We model the booth-to-sponsor cross-reference as a custom many2many field booth_sponsor_ids on event.booth. All schema changes are deployed to a staging Odoo database first for validation. If Odoo Community is the destination, we prepare a Python module manifest for custom field deployment.
Staging migration and reconciliation
We run a full migration into a staging Odoo instance using production-like data volume. The customer's event operations lead reconciles record counts (Exhibitions in, Booths in, Sponsors in, Registrations in, Sessions in), spot-checks 25-50 random records against the EF Enterprise Salesforce source, and validates the booth-sponsor cross-references. Any mapping corrections or custom field additions happen here, not in production. Badge print trigger logic is documented as a written spec at this stage.
Owner and user provisioning
We extract every distinct EF Enterprise Owner referenced on Exhibition, Booth, Sponsor, Session, and Attendee Registration records and match by email against the Odoo destination's res.users table. Any EF Enterprise Owner without a matching Odoo User goes to a reconciliation queue. The customer's Odoo admin provisions any missing Users (active or inactive depending on whether the original EF Enterprise user is still active) before record import resumes. Migration cannot proceed past this step because partner_id references on event.registration require a valid res.partner, and res.partner may reference a responsible user.
Production migration in dependency order
We run production migration in record-dependency order: res.users (manual provisioning validated), res.partner (from EF Enterprise contact references and Sponsor companies), event.event (Exhibitions), event.sponsor (linking partners to events), event.track (Sessions), event.booth (with booth_price__c and booth_sponsor_ids resolved), event.registration (with partner_id and registration_badge_type__c resolved), event.badge (with badge_printed__c preserved). Attachments migrate via ir.attachment after their parent records exist. Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and automation rebuild handoff
We freeze EF Enterprise writes during cutover, run a final delta migration of any records modified during the migration window, then enable Odoo as the system of record. We deliver the badge print trigger logic document to the customer's Odoo developer or partner for implementation using Odoo's report engine or a Marketplace badge-printing app. We support a one-week hypercare window where we resolve any reconciliation issues raised by the customer's event team. We do not rebuild Salesforce Flows or Apex triggers as Odoo Python automations inside the migration scope; that is a separate engagement or a developer task.
Platform deep dives
EF Enterprise
Source
Strengths
Weaknesses
Odoo ERP
Destination
Strengths
Weaknesses
Complexity grading
Standard ERP 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 EF Enterprise and Odoo ERP.
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
EF Enterprise: Salesforce API governor limits apply (varies by Salesforce edition).
Data volume sensitivity
EF Enterprise 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 EF Enterprise to Odoo ERP migration scoping. Not seeing yours? Book a call.
Walk through your EF Enterprise to Odoo ERP migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave EF Enterprise
Other ways to arrive at Odoo ERP
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.