CRM migration
Field-level mapping, validation, and rollback between Access CRM and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Access CRM
Source
Odoo CRM
Destination
Compatibility
12 of 14
objects map 1:1 between Access CRM and Odoo CRM.
Complexity
BStandard
Timeline
4-6 weeks
Overview
Moving from Access CRM to Odoo CRM is a structural migration, not a record copy. Access CRM stores a relatively flat object model (Contacts, Companies, Opportunities, Cases) with Kanban pipelines, Worst/Likely/Best deal probabilities, and tight coupling to Access Pay & Bill, Access Elite, and Servelec modules that do not exist in Odoo. We audit every cross-module reference during scoping, create stub records in Odoo where required to preserve relationships, and map Access CRM's free-text pipeline stages to an Odoo Stage configuration before records import. The Worst/Likely/Best probability model has no native Odoo equivalent; we preserve all three values in custom fields and flag the probability-calculation difference in the mapping matrix. Access CRM knowledge-base articles, workflow configurations, and enquiry form structures do not migrate as executable objects; we deliver structured export packages and written inventories for the customer to rebuild in Odoo Helpdesk and Studio.
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 Access CRM 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.
Access CRM
Contact
Odoo CRM
Contact
1:1Access CRM Contacts migrate to Odoo CRM Contacts with name, email, phone, address, and owner preserved. The Access CRM contact_id maps to an external_id field in Odoo for dedupe on subsequent delta migrations. Mobile phone, job title, and any custom contact fields migrate to matching Odoo res.partner fields or custom partner fields.
Access CRM
Company
Odoo CRM
Company (res.partner with is_company=True)
1:1Access CRM Companies map to Odoo Company records (res.partner with is_company=True). The parent/child organisation hierarchy migrates as a flat tree with parent_id references resolved; circular references are flagged and resolved before import. Domain or website from Access CRM maps to Odoo's website field.
Access CRM
Opportunity
Odoo CRM
Opportunity (crm.lead)
1:1Access CRM Opportunities map to Odoo CRM Opportunities (crm.lead records with type='opportunity'). The Access CRM Worst/Likely/Best values migrate to three separate custom float fields on crm.lead because Odoo uses a single Stage-driven probability percentage. We flag this distinction in the mapping matrix and note that Odoo's probability will recalculate from stage by default unless overridden.
Access CRM
Pipeline
Odoo CRM
Stage
lossyEach Access CRM pipeline becomes an Odoo CRM Stage group within the Pipeline. Access CRM's free-text stage names require a pre-migration stage matrix: we capture every distinct stage name in the source, map each to an Odoo Stage record, and configure Stage probabilities in Odoo. Any stage with no Odoo mapping routes to an Archive stage unless the customer directs otherwise.
Access CRM
Case
Odoo CRM
Ticket (Helpdesk app)
1:1Access CRM Cases map to Odoo Helpdesk Tickets if the customer licenses the Odoo Helpdesk app. Case lifecycle (open, in-progress, resolved, closed) maps to Odoo Ticket Stage. If Helpdesk is not in scope, Cases migrate to crm.lead with a custom case flag and Case ID preserved in an external_id field.
Access CRM
Custom Fields
Odoo CRM
Custom Fields
lossyAccess CRM custom fields are tenant-specific and not self-documented. We extract the full field manifest via the admin knowledge base and cross-reference it against the Odoo field schema during scoping. Each custom Access CRM field maps to an Odoo ir.model.field record created before record import. Custom field type mapping follows: text to char, long text to text, date to date, number to float or integer, dropdown to selection.
Access CRM
Web Enquiry Forms
Odoo CRM
Lead (crm.lead, type='lead')
1:1Access CRM web enquiry form submissions become Odoo CRM Leads (crm.lead with type='lead'). Each form's field set maps to Odoo Lead fields or custom fields on crm.lead. Form-level metadata (submission date, source URL, UTM parameters) migrates as custom fields if present in Access CRM.
Access CRM
Activities: Emails
Odoo CRM
Mail Message
1:1Access CRM email activity linked to Contacts and Opportunities migrates to Odoo mail.message records attached to the corresponding crm.lead (as subtype 'Email') and the related res.partner record. Email subject, body (plain text), and timestamp migrate directly. HTML email body is stripped to plain text unless the customer specifies preserving HTML formatting.
Access CRM
Activities: Calls
Odoo CRM
Mail Message (subtype 'Call')
1:1Access CRM call logs map to Odoo mail.message records with subtype 'Call' on the linked crm.lead or res.partner. Call duration (seconds), call outcome, and any notes from Access CRM migrate as custom fields on the mail.message record. Activity date and time preserve from the source timestamp.
Access CRM
Activities: Meetings
Odoo CRM
Calendar Event
1:1Access CRM meeting records map to Odoo calendar.event records linked to the related crm.lead (opportunity) and attendee res.partner records. Meeting title, start and end datetime, location, and description migrate directly. Attendees resolve via email match against the migrated Contact records.
Access CRM
Activities: Notes
Odoo CRM
Note (mail.message subtype 'Note')
1:1Access CRM notes migrate to Odoo mail.message records with subtype 'Note' attached to the parent crm.lead or res.partner. Note body migrates as the message body. Author resolves via owner email match; unresolvable authors set the message to system-user author.
Access CRM
Attachments
Odoo CRM
Attachment (ir.attachment)
1:1Access CRM file attachments on Contacts, Companies, and Opportunities migrate as Odoo ir.attachment records linked to the corresponding res.partner or crm.lead via res_model and res_id. Attachment name, file content (base64), and mimetype migrate directly. We confirm that the Odoo database has sufficient storage before bulk attachment import.
Access CRM
Knowledge Base Articles
Odoo CRM
None (export package)
1:1Access CRM KB articles have no standard counterpart in Odoo CRM because the knowledge-base feature lives in the Odoo Helpdesk app (separate module, separate license). We export KB content as a structured JSON or HTML package delivered alongside the CRM migration. The customer re-imports to Odoo Helpdesk, a third-party knowledge-base platform, or SharePoint independently.
Access CRM
User
Odoo CRM
User (res.users)
1:1Access CRM Users (name, email, role) migrate to Odoo res.users. We resolve Access CRM owner assignments on each record by email match against the destination Odoo user table. Any Access CRM user without a matching Odoo user is held in a reconciliation queue for the customer admin to provision before record import resumes.
| Access CRM | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | Contact1:1 | Fully supported | |
| Company | Company (res.partner with is_company=True)1:1 | Fully supported | |
| Opportunity | Opportunity (crm.lead)1:1 | Fully supported | |
| Pipeline | Stagelossy | Fully supported | |
| Case | Ticket (Helpdesk app)1:1 | Fully supported | |
| Custom Fields | Custom Fieldslossy | Mapping required | |
| Web Enquiry Forms | Lead (crm.lead, type='lead')1:1 | Mapping required | |
| Activities: Emails | Mail Message1:1 | Fully supported | |
| Activities: Calls | Mail Message (subtype 'Call')1:1 | Fully supported | |
| Activities: Meetings | Calendar Event1:1 | Fully supported | |
| Activities: Notes | Note (mail.message subtype 'Note')1:1 | Fully supported | |
| Attachments | Attachment (ir.attachment)1:1 | Mapping required | |
| Knowledge Base Articles | None (export package)1:1 | Not supported | |
| User | User (res.users)1:1 | 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.
Access CRM gotchas
Cross-module references require pre-migration audit
Pipeline stage names are tenant-defined free text
Knowledge-base articles have no standard CRM export path
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 scoping audit
We audit the source Access CRM tenant across all deployed modules (CRM, Pay & Bill, Elite, Servelec if present), capturing the full field manifest, pipeline stage list, custom field definitions, and owner/user list. We specifically flag every cross-module reference to sister Access modules during this phase. The discovery output is a written migration scope document that includes the stage-mapping matrix template, the cross-module reference resolution plan, and an Odoo app recommendation (CRM only vs CRM plus Helpdesk, Studio, Project). If the customer does not yet have an Odoo instance, we provide an Odoo edition and deployment recommendation (cloud vs self-hosted, community vs enterprise) as part of scoping.
Schema design and stage matrix
We design the destination schema in Odoo. This includes creating custom fields on crm.lead for Worst/Likely/Best deal values, configuring the Pipeline with Stage records mapped from the Access CRM stage list, setting up Ticket stages if the Helpdesk app is in scope, and creating the Odoo Users (res.users) to match the Access CRM owner list by email. The stage-mapping matrix is the most critical design artefact: every Access CRM pipeline stage name must map to an Odoo Stage before any record import begins. We deploy the schema to an Odoo Sandbox or test database first.
Sandbox migration and reconciliation
We run a full migration into the Odoo test environment using production-like data volume. The customer's RevOps or admin lead reviews 25-50 sampled records against the Access CRM source (field-by-field spot check), confirms that stage mapping is correct, and validates that the Worst/Likely/Best custom fields are populated as expected. The customer signs off on the schema and mapping before production migration begins. Any mapping corrections, missed custom fields, or stage reassignments happen in this phase.
Owner reconciliation and Odoo user provisioning
We extract every distinct Access CRM owner referenced on Contact, Company, Opportunity, and Case records and match by email against the Odoo destination's res.users table. Owners without a matching Odoo user are held in a reconciliation queue. The customer's Odoo admin provisions any missing Odoo users (active or inactive depending on whether the original Access CRM user is still employed and needs access). Migration cannot safely proceed past this step because user_id (owner) references are required on most Odoo CRM records.
Production migration in dependency order
We run production migration in record-dependency order: Odoo Users (provisioned, not migrated), Companies (from Access CRM Companies), Contacts (with parent Company resolved), Opportunities (with stage, owner, and Contact resolved via lookup), Cases (with owner and Contact resolved), Activity history (mail.message records for emails, calls, notes via Odoo RPC API), Calendar events, Attachments (ir.attachment via base64 import), and Web Enquiry form submissions as Leads. Knowledge-base articles export as a separate JSON package delivered alongside. Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and automation rebuild handoff
We freeze Access CRM writes during cutover, run a final delta migration of any records modified during the migration window, then enable Odoo CRM as the system of record. We deliver the pipeline stage mapping matrix, the cross-module reference inventory, and the automation configuration summary to the customer's admin team. We support a one-week hypercare window where we resolve any reconciliation issues raised by the customer's team. We do not rebuild Access CRM workflow configurations as Odoo automated actions inside the standard migration scope; that is a separate engagement or an internal admin task.
Platform deep dives
Access CRM
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 2 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 Access CRM and Odoo CRM.
Object compatibility
2 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
Access CRM: Not publicly documented — typical SaaS limits assumed and confirmed during scoping.
Data volume sensitivity
Access CRM 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 Access CRM to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Access CRM 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 Access CRM
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.