CRM migration
Field-level mapping, validation, and rollback between OctopusPro and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
OctopusPro
Source
Odoo CRM
Destination
Compatibility
8 of 12
objects map 1:1 between OctopusPro and Odoo CRM.
Complexity
BStandard
Timeline
5-8 weeks
Overview
Moving from OctopusPro to Odoo CRM is a structural migration across fundamentally different data models. OctopusPro is built around a booking lifecycle: Customers submit requests, Bookings are assigned to Field Workers, Services are delivered, and Invoices are generated — all within a single operational stack. Odoo CRM uses a sales-driven opportunity model: Leads enter a pipeline, progress through stages, and convert to Customers (Contacts/Partners) with attached Sales Orders. There is no native Booking object in Odoo CRM — job details, service history, and field-worker assignments must map to a combination of Opportunity custom fields, product variants, and employee records. We bridge this schema gap by encoding booking metadata into Odoo's opportunity structure and using custom fields to preserve the service history that operational teams rely on. OctopusPro has no documented public API, so data extraction runs through a support-assisted export, which we request on the customer's behalf. Workflows, automations, Customer Portal settings, and GPS tracking configuration do not migrate; we deliver written inventories for each. Odoo CRM pricing starts at approximately $30 per user per month on Odoo.sh for the CRM app alone, with Field Service as a separate module at higher tiers.
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 OctopusPro 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.
OctopusPro
Customer
Odoo CRM
Contact / Partner (res.partner)
1:1OctopusPro Customer records map to Odoo res.partner. The customer type (individual vs business) maps to Odoo's is_company flag. Address, phone, email, notes, and custom fields migrate directly. Odoo's partner record serves as both Contact and Account equivalent; commercial relationships use parent_id for hierarchical structures. We use email as the dedupe key during import and flag any duplicate partner records for customer review.
OctopusPro
Booking
Odoo CRM
Opportunity (crm.lead)
1:manyOctopusPro Bookings do not have a direct Odoo CRM equivalent. We map each Booking to an Opportunity (crm.lead) record, encoding booking metadata — service type, scheduled date and time, status, assigned field workers, and service address — into custom fields on the Opportunity. The original Booking ID is preserved in a custom field octo_booking_id__c for audit. Completed bookings with invoices become Closed Won opportunities; cancelled bookings become Closed Lost. This approach preserves the booking history while fitting within Odoo's pipeline model.
OctopusPro
Field Worker
Odoo CRM
User / Employee (res.users / hr.employee)
1:1OctopusPro Field Worker records map to Odoo hr.employee records (for HR and timesheet context) and optionally res.users records (if the field worker also accesses Odoo CRM). We map by email match, flagging any field worker without a matching Odoo user for admin provisioning. Pay rates and location tracking preferences from OctopusPro are stored in custom fields on hr.employee.
OctopusPro
Invoice
Odoo CRM
Invoice (account.move)
1:1OctopusPro Invoices map to Odoo account.move records in the out_invoice state. Invoice line items migrate as invoice lines with account_id, quantity, unit_price, and tax mapping resolved at migration time. Payment status (paid, partial, overdue) maps to Odoo's payment_state field. We resolve the customer partner_id from the Customer mapping and link each invoice to the related Opportunity via a custom field on account.move.
OctopusPro
Payment
Odoo CRM
Payment (account.payment)
1:1OctopusPro Payment records map to Odoo account.payment entries linked to the corresponding account.move invoice. Payment method, amount, date, and status migrate directly. Partial payments and refunds are preserved as separate account.payment records with negative amounts for refunds. Reconciliation runs post-import to match payments to invoices in Odoo's reconciliation module.
OctopusPro
Quote / Estimate
Odoo CRM
Sale Order (sale.order) in Quotation state
1:1OctopusPro Quotes map to Odoo sale.order records in draft (quotation) state. Quote validity dates, line items, pricing, and accept/reject status migrate as Odoo quotation data. Accepted quotes are flagged for conversion to Sales Order; rejected quotes remain as cancelled or lost quotations. We resolve the customer partner_id and product lines at migration time.
OctopusPro
Service
Odoo CRM
Product (product.product)
1:1OctopusPro Service definitions map to Odoo product.product records. Service name, description, base pricing, and duration migrate as product name, description, list_price, and a custom duration field. Odoo product variants handle service options and zone-based pricing from OctopusPro's custom field rates.
OctopusPro
Custom Field
Odoo CRM
Custom Field (ir.model.fields / Studio field)
lossyOctopusPro tenant-specific custom fields on Customer and Booking objects require schema discovery during scoping. We request a full field inventory from OctopusPro support and create equivalent Odoo custom fields via Studio or developer-mode field creation before data migration. Custom field type mapping (text, number, date, selection, multi-select) is resolved per field during scoping, and fields without an Odoo equivalent are flagged for manual recreation or approximation.
OctopusPro
Forms & Checklists
Odoo CRM
Custom Fields + Notes
1:1OctopusPro form and checklist data attached to bookings is captured as structured key-value pairs in custom fields on the corresponding Odoo Opportunity. Schema varies by service type; we map available fields during scoping and create custom fields to hold intake data. Photos and attachments migrate as Odoo ir.attachment records linked to the Opportunity.
OctopusPro
Customer Portal
Odoo CRM
Partner Portal (Odoo Website / Portal)
lossyOctopusPro Customer Portal is a configuration layer (booking access, invoice viewing, payment links, FAQ display) that does not store data independently. We do not migrate portal settings. The underlying Customer, Booking, Invoice, and Quote data that the portal surfaces migrates to Odoo. The customer's admin reconfigures a partner portal in Odoo Website or Odoo.sh using migrated data.
OctopusPro
Automations
Odoo CRM
Server Action / Automated Action
lossyOctopusPro automation rules define trigger-action workflows for notifications, scheduling, and status changes. We capture the automation rule inventory during scoping and deliver a written map of every active automation with its trigger conditions, actions, and Odoo equivalent (Server Action, Automated Action via Odoo Studio, or ir.actions.server). Odoo automations use a different execution model from OctopusPro and are not migrated as code.
OctopusPro
GPS Tracking / Location Data
Odoo CRM
Not Migrated
1:1OctopusPro GPS fieldworker location tracking is runtime operational data that has no long-term value post-migration and no equivalent native storage in Odoo CRM. We do not migrate GPS tracking history. If the customer activates Odoo Field Service, real-time location tracking is enabled through the Field Service mobile app rather than migrated from OctopusPro.
| OctopusPro | Odoo CRM | Compatibility | |
|---|---|---|---|
| Customer | Contact / Partner (res.partner)1:1 | Fully supported | |
| Booking | Opportunity (crm.lead)1:many | Fully supported | |
| Field Worker | User / Employee (res.users / hr.employee)1:1 | Fully supported | |
| Invoice | Invoice (account.move)1:1 | Fully supported | |
| Payment | Payment (account.payment)1:1 | Fully supported | |
| Quote / Estimate | Sale Order (sale.order) in Quotation state1:1 | Fully supported | |
| Service | Product (product.product)1:1 | Fully supported | |
| Custom Field | Custom Field (ir.model.fields / Studio field)lossy | Fully supported | |
| Forms & Checklists | Custom Fields + Notes1:1 | Mapping required | |
| Customer Portal | Partner Portal (Odoo Website / Portal)lossy | Not supported | |
| Automations | Server Action / Automated Actionlossy | Mapping required | |
| GPS Tracking / Location Data | Not Migrated1: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.
OctopusPro gotchas
Booking Fee vs Commission billing model affects migration cost estimates
Incorrect charges and billing disputes are documented in reviews
No documented public API or bulk export mechanism
Customer Portal settings do not migrate independently
Custom field schema is tenant-specific and must be discovered before mapping
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
Export request and scoping
We initiate the support-assisted export request with OctopusPro on the customer's behalf, requesting all Customers, Bookings, Field Workers, Invoices, Payments, Quotes, Services, Forms, Custom Fields, and Automation rules in structured file format. While awaiting export, we conduct scoping sessions to enumerate the customer's OctopusPro custom field schema, booking status workflow, service catalogue structure, and Odoo destination edition (Odoo.sh cloud vs on-premise). The output is a written migration scope, custom field mapping plan, and Odoo edition recommendation.
Data cleansing and schema design
We audit the exported OctopusPro data for duplicates, incomplete records, inconsistent formats, and data quality issues. Common issues include customers with missing email addresses, bookings with no assigned customer, and duplicate customer records from multiple imports. We apply cleansing transformations (deduplication, field formatting, null handling) before schema design. Simultaneously, we create the Odoo destination schema: res.partner fields, crm.lead custom fields for booking metadata, hr.employee records for field workers, product.product records for services, and custom fields via Odoo Studio or developer mode.
Sandbox migration and reconciliation
We run a full migration into an Odoo test database (Odoo.sh sandbox or local test environment) using production-like data volume. The customer reconciles record counts, spot-checks sample records against the OctopusPro source, and validates that booking metadata appears correctly in the Opportunity custom fields. Any mapping corrections — field type mismatches, missing custom fields, incorrect status mapping — are resolved here before production migration. This step typically takes one to two weeks depending on data volume and correction scope.
Customer and contact import
We import all Customers as Odoo res.partner records in dependency order, with is_company and parent_id hierarchy resolved. Email is the dedupe key. Any duplicate partner records are flagged for customer review. After partner import, we import Field Workers as hr.employee records with associated res.users accounts if they require Odoo login. We resolve all partner references before proceeding to booking import.
Booking and invoice migration via XML-RPC
We import Bookings as Odoo crm.lead (Opportunity) records with booking metadata encoded in custom fields. Each Opportunity is linked to the customer res.partner, and booking status maps to Odoo crm.lead stage (new, qualified, proposal, negotiation, won, lost). Completed and invoiced bookings map to Closed Won; cancelled bookings map to Closed Lost. Invoices migrate as account.move records linked to the corresponding Opportunity. Payments migrate as account.payment entries and are reconciled with their invoices post-import. Quotes migrate as sale.order records in draft state. All imports use chunked XML-RPC batch inserts with retry logic.
Cutover, validation, and automation handoff
We freeze OctopusPro write access during cutover and run a final delta import of any records modified during the migration window. We validate record counts across all object types, spot-check 25-50 records against source data, and confirm invoice payment reconciliation is complete. We deliver the automation inventory document listing every OctopusPro automation rule with its trigger, conditions, actions, and recommended Odoo Server Action or Automated Action equivalent. GPS tracking and Customer Portal settings are noted as manual-rebuild items. We support a one-week hypercare window for reconciliation issues. Post-migration, we do not rebuild OctopusPro automations in Odoo as part of standard scope; that is a separate engagement.
Platform deep dives
OctopusPro
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM 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 OctopusPro and Odoo CRM.
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
OctopusPro: Not publicly documented.
Data volume sensitivity
OctopusPro 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 OctopusPro to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your OctopusPro 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 OctopusPro
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.