CRM migration
Field-level mapping, validation, and rollback between Act! and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Act!
Source
Odoo CRM
Destination
Compatibility
9 of 11
objects map 1:1 between Act! and Odoo CRM.
Complexity
BStandard
Timeline
4-6 weeks
Overview
Odoo CRM is an unusual destination from Act! because of Odoo's unified-partner model: Contacts and Companies share a single res.partner table differentiated by the company_type flag. Act!'s separate Contact + Company tables collapse into a parent-child res.partner structure where Companies are partners with company_type='company' and Contacts are linked partners with parent_id pointing at the company. Opportunities → crm.lead with type='opportunity'. The interesting work is the partner model conversion (which we automate during transformation) and the Studio module deployment for Act! Custom Tables. Odoo's open-source nature also means customers running Odoo Community edition (free) can't use Studio for custom modules; in that case we install custom modules via the Odoo manifest format, which requires a deployment window. Activity and History migrate to mail.activity (open) and mail.message (closed).
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 Act! 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.
Act!
Company
Odoo CRM
res.partner (company_type=company)
1:1Act! Companies map to res.partner with company_type='company' and is_company=True. These partners hold address, website, industry, and account-level fields.
Act!
Contact
Odoo CRM
res.partner (company_type=person, parent_id=Company partner)
1:1Act! Contacts map to res.partner with company_type='person' and parent_id pointing to the Company partner. The unified partner table is Odoo's structural quirk; we resolve it during transformation.
Act!
Opportunity
Odoo CRM
crm.lead (type=opportunity)
1:1Act! Opportunities map to crm.lead with type='opportunity' (qualified). Stage_id resolves to crm.stage record. partner_id links to the Contact partner; partner_name preserves the original Act! Company name.
Act!
Opportunity Product
Odoo CRM
sale.order.line (in linked sale.order)
1:1Odoo separates pipeline (crm.lead) from quotes/orders (sale.order). We create a draft sale.order linked to the Opportunity's crm.lead and attach Opportunity Products as sale.order.line records. Products pre-created as product.template.
Act!
Activity (scheduled)
Odoo CRM
mail.activity
1:1Act! scheduled Activities map to mail.activity records on the parent res.partner or crm.lead. Activity type (Call/Meeting/To-do) maps to mail.activity.type. Date_deadline preserves the scheduled date.
Act!
History (completed)
Odoo CRM
mail.message
1:1Completed Act! History items map to mail.message records on the parent res.partner or crm.lead with message_type='comment' and the original timestamp preserved via the date field.
Act!
Note
Odoo CRM
mail.message (Note)
1:1Act! Notes map to mail.message with subtype_id='mail.mt_note' — Odoo's internal note convention. Author resolves to res.users by email.
Act!
Group (Static)
Odoo CRM
res.partner.category (tag)
1:1Act! Static Groups map to res.partner.category tags applied to member partners. Tag-based segmentation is Odoo-native and queryable via filters.
Act!
Group (Dynamic)
Odoo CRM
Filter (ir.filters)
lossyDynamic Groups translate to ir.filters saved searches on res.partner. Query criteria rewrites with customer sign-off where Act! operators don't have Odoo equivalents.
Act!
Custom Table
Odoo CRM
Studio Module (Enterprise) or Custom Module (Community)
lossyAct! Custom Tables map to new Odoo models. Enterprise uses Odoo Studio (low-code); Community requires a custom Python module with __manifest__.py. Model schema deployed before record load.
Act!
Document
Odoo CRM
ir.attachment
1:1Act! Documents upload as ir.attachment records linked to the parent res.partner or crm.lead. Stored as base64 blobs in the Odoo database or in the filestore directory depending on Odoo configuration.
| Act! | Odoo CRM | Compatibility | |
|---|---|---|---|
| Company | res.partner (company_type=company)1:1 | Fully supported | |
| Contact | res.partner (company_type=person, parent_id=Company partner)1:1 | Fully supported | |
| Opportunity | crm.lead (type=opportunity)1:1 | Fully supported | |
| Opportunity Product | sale.order.line (in linked sale.order)1:1 | Fully supported | |
| Activity (scheduled) | mail.activity1:1 | Fully supported | |
| History (completed) | mail.message1:1 | Fully supported | |
| Note | mail.message (Note)1:1 | Fully supported | |
| Group (Static) | res.partner.category (tag)1:1 | Fully supported | |
| Group (Dynamic) | Filter (ir.filters)lossy | Fully supported | |
| Custom Table | Studio Module (Enterprise) or Custom Module (Community)lossy | Fully supported | |
| Document | ir.attachment1: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.
Act! gotchas
Act! Premium Desktop and Cloud use different export paths and cannot share a single migration script
Act! Custom Tables (v18+) have no standardized schema across customers
Activity Series (recurring activities) explode into thousands of occurrences
Act! Marketing Automation campaign history is in a separate database
Act! contact layouts can hide fields without dropping them from the schema
Document attachments in Act! Desktop are file-system pointers, not blobs
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 + Odoo edition confirmation
Confirm Act! deployment, Odoo edition (Community vs Enterprise vs Online), and which Odoo apps are installed (CRM only vs CRM + Sales + others). Inventory custom fields, Groups, Custom Tables, Documents.
Odoo pre-flight
Deploy Studio or custom modules for Custom Tables, configure crm.stage records for pipeline mapping, set up res.partner.category tags for Group equivalents, ensure Sales app is installed if Opportunity Products are in scope.
Sample + customer review
Migrate 50 Companies, 200 Contacts (linked to companies), 30 Opportunities with Products, 100 mail.activity, 500 mail.message. Customer reviews partner-model conversion fidelity.
Full extraction + Document download
Bulk Act! extraction. Documents download in parallel.
Full load via XML-RPC + SQL backfill
Bulk load Companies (res.partner is_company=True) → Contacts (res.partner parent_id) → crm.lead → sale.order with lines → mail.activity → ir.attachment. SQL post-pass to backfill timestamps on mail.message.
Cutover + decommission
Delta sync on cutover day. Sales reps switch to Odoo. Act! read-only for safety window.
Platform deep dives
Act!
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between Act! and Odoo CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Act! and Odoo CRM.
Object compatibility
All 8 core objects map 1:1 between Act! and Odoo CRM.
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
Act!: Not publicly documented for Cloud; Desktop is limited only by the customer's SQL Server and IIS capacity.
Data volume sensitivity
Act! 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 Act! to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Act! 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 Act!
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.