CRM migration
Field-level mapping, validation, and rollback between PlanPlus Online and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
PlanPlus Online
Source
Odoo CRM
Destination
Compatibility
10 of 12
objects map 1:1 between PlanPlus Online and Odoo CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from PlanPlus Online to Odoo CRM is an export-first migration. PlanPlus Online has no public REST API, so we rely entirely on native CSV exports from the web interface and data dumps from sync connectors. We sequence the export by extracting calendar events and tasks first, then contact records, followed by opportunity pipeline data and custom fields. Odoo CRM uses a split model where res.partner serves as both Contact and Company depending on the is_company flag, and crm.lead manages the prospect pipeline separately from Opportunities. We preserve Franklin Covey priority quadrants, goal hierarchies, and mission statements as custom fields on the res.partner record. Sync connections to Google and Microsoft 365 do not carry over; we document them for manual reconnect in Odoo. Workflows, project automation rules, and help desk configurations are not migrated as code; we deliver a written inventory for the customer's admin to rebuild in Odoo's Studio or workflow designer.
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 PlanPlus Online 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.
PlanPlus Online
Contact
Odoo CRM
res.partner
1:1PlanPlus Online Contacts map to Odoo res.partner records with is_company = False. The contact name, email, phone, mobile, street, city, state, zip, and country fields map directly. We preserve Franklin Covey priority quadrant assignments (urgent/important matrix) as a custom selection field on res.partner if present. Custom contact fields export as flat key-value pairs and map to custom res.partner fields we pre-create via Odoo's res.partner.fields API before migration. Owner (assigned user) maps to Odoo user_id via email match against Odoo's res.users table.
PlanPlus Online
Company
Odoo CRM
res.partner
1:1PlanPlus Online Company records map to Odoo res.partner with is_company = True. Company name becomes the partner's name field, industry maps to industry_id (from Odoo's industry classification), and website maps to website field. The contact-company linkage in PlanPlus Online becomes a parent_id reference on child res.partner records (contacts) pointing to the company res.partner. We preserve this via a mapping table assembled during the CSV export phase.
PlanPlus Online
Deal (External Opportunity Portal)
Odoo CRM
crm.lead
1:1PlanPlus Online Deals map to Odoo crm.lead records. The deal name becomes the lead name, deal value maps to planned_revenue, and close date maps to date_deadline. Stage names (e.g., Prospect, Qualified, Proposal, Won, Lost) map to Odoo's stage_id within a configured sales team pipeline. We create a custom Odoo stage sequence matching PlanPlus Online's pipeline order before migration. Deals without a linked contact map as standalone leads; deals with a contact map with the contact_id resolved to the res.partner migration ID.
PlanPlus Online
Deal Stage
Odoo CRM
crm.stage
lossyEach PlanPlus Online deal pipeline stage becomes an Odoo crm.stage record within a specific team. We configure the stage sequence, name, and fold status (is_won, is_unread) to match PlanPlus Online's pipeline view. Probability percentages from PlanPlus Online set the stage probability on each crm.stage.
PlanPlus Online
Calendar Event
Odoo CRM
calendar.event
1:1PlanPlus Online calendar events (appointments, all-day events) map to Odoo calendar.event records. Start and end datetime, location, and description migrate directly. Attendee lists on PlanPlus Online events map to calendar.attendee records linked by email match against the migrated res.partner records. Time zone settings are normalized during export to avoid offset drift from the PlanPlus Online device sync issue documented in the source platform gotchas.
PlanPlus Online
Task
Odoo CRM
project.task
1:1PlanPlus Online Tasks map to Odoo project.task records. Task name becomes the task title, description migrates to description, due date maps to date_deadline, and priority (high/medium/low) maps to priority. Subtasks map as child tasks via parent_id. If PlanPlus Online tasks are linked to Projects, they map to tasks under the corresponding Odoo project. If tasks exist without a project link, we map them to a default migration project created as a holding area for review. Franklin Covey priority quadrant values preserve as a custom field on the task.
PlanPlus Online
Project
Odoo CRM
project.project
1:1PlanPlus Online Projects map to Odoo project.project records. Project name, description, and status (active/closed) migrate directly. Project milestones map as project.milestone records if Odoo's Timesheet app is activated. Task breakdowns within the project map as project.task records under the parent project. Project Summary Reports published as static webpages are captured as static HTML attachments on the project.project record rather than rebuilt as dynamic Odoo reports.
PlanPlus Online
User (Owner)
Odoo CRM
res.users
1:1PlanPlus Online Users (Owners) referenced on Contacts, Companies, Deals, Tasks, and Projects map by email match against Odoo's res.users table. We extract all distinct owner IDs from the export dataset and reconcile against Odoo users before each import phase. Any PlanPlus Online Owner without a matching Odoo user goes to a reconciliation queue for the customer to provision the user before that phase of migration proceeds. Inactive PlanPlus Online users are flagged for the customer to decide whether to provision as inactive in Odoo.
PlanPlus Online
Custom Fields
Odoo CRM
Custom res.partner, crm.lead, project.task fields
lossyPlanPlus Online custom fields export as flat key-value pairs in CSV. We map them to Odoo custom fields on the appropriate model (res.partner for contact/company custom fields, crm.lead for deal custom fields, project.task for task custom fields). Custom field types map to Odoo field types: text to char or text, number to float or integer, date to date, checkbox to boolean, dropdown to selection. Any custom field with no direct Odoo equivalent is flagged for manual review in the mapping document before import.
PlanPlus Online
Support Ticket (Help Desk)
Odoo CRM
helpdesk.ticket
1:1PlanPlus Online help desk tickets export with status, description, priority, and linked contact. If the customer activates the Odoo Helpdesk app, we map tickets to helpdesk.ticket records with the contact_id resolved to the migrated res.partner. Ticket status (open, pending, resolved, closed) maps to stage_id in the configured helpdesk team pipeline. If Helpdesk is not activated, tickets map to crm.lead with a custom ticket_type field to distinguish them from prospect leads.
PlanPlus Online
FAQ Article
Odoo CRM
knowledge.article
1:1PlanPlus Online FAQs from the Support Portal export as article records. They map to Odoo Knowledge (knowledge.article) if the customer activates that app, or as plain text notes attached to the relevant res.partner records if Knowledge is not in scope. FAQ ordering and category structure map as article tags in Odoo Knowledge.
PlanPlus Online
Sync Connections
Odoo CRM
Documentation only
1:1PlanPlus Online sync connections to Google Calendar, Microsoft 365, and Outlook are authentication configurations that do not carry over to Odoo. We document which external systems were connected, the sync scope (calendar, contacts, tasks), and the last sync timestamp. The customer manually reconnects OAuth integrations in Odoo Settings after migration. This is not a data migration; it is a configuration handoff documented in the migration completion report.
| PlanPlus Online | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | res.partner1:1 | Fully supported | |
| Company | res.partner1:1 | Fully supported | |
| Deal (External Opportunity Portal) | crm.lead1:1 | Fully supported | |
| Deal Stage | crm.stagelossy | Fully supported | |
| Calendar Event | calendar.event1:1 | Fully supported | |
| Task | project.task1:1 | Fully supported | |
| Project | project.project1:1 | Fully supported | |
| User (Owner) | res.users1:1 | Fully supported | |
| Custom Fields | Custom res.partner, crm.lead, project.task fieldslossy | Mapping required | |
| Support Ticket (Help Desk) | helpdesk.ticket1:1 | Fully supported | |
| FAQ Article | knowledge.article1:1 | Fully supported | |
| Sync Connections | Documentation only1:1 | Not 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.
PlanPlus Online gotchas
No public API means no automated migration pipeline
Data export blocked for delinquent accounts
Planner Edition lacks sync and export infrastructure
Auto-renewal with annual price adjustment
Time zone settings must be correct before sync setup
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
Account health and export readiness check
We verify that the PlanPlus Online account has no delinquent invoices (a known blocker for data export per PlanPlus Online's billing policy), confirm the account edition (Planner through Business), and list all active sync connections to Google, Microsoft 365, and Outlook for documentation. We then scope the export dataset by object type: Contacts, Companies, Deals, Calendar Events, Tasks, Projects, Help Desk Tickets, and custom fields. We recommend the customer perform a full export of each object type before any data cleanup or account changes during the export window. For Planner Edition accounts, we scope only Tasks and Calendar Events.
Odoo environment audit and module activation
We audit the destination Odoo instance for activated applications (CRM, Project, Calendar, Helpdesk, Knowledge), existing res.partner records, user accounts (res.users), and any existing crm.stage or project.project records that may conflict with the migration. We verify that Odoo's UI density setting matches the customer's team size and that the appropriate user permissions are granted for data import. We activate any missing Odoo applications required for the migration scope before proceeding to schema design.
Schema design and custom field provisioning
We design the Odoo destination schema based on the PlanPlus Online export dataset. This includes creating custom res.partner fields (for Franklin Covey priority quadrant, goal hierarchy, mission statement if present), custom crm.lead fields (for deal-specific custom properties), and custom project.task fields. We pre-create the crm.stage records matching the PlanPlus Online pipeline sequence with approved probability values. We configure the parent_id relationship structure for contact-company linkage and verify the contact-company mapping table from the PlanPlus Online export. All schema changes deploy via Odoo's Settings or programmatically through the XML-RPC API into a test database first.
CSV assembly and contact-company linkage resolution
We assemble the PlanPlus Online CSV exports into a migration dataset organized by object type and dependency order. The key challenge is resolving the contact-company linkage: PlanPlus Online stores this as a separate relationship table, while Odoo requires the parent_id field on each contact res.partner record to point to the company res.partner ID. We build a lookup table from the PlanPlus Online export and resolve the parent_id references after the Companies import but before the Contacts import. Records with no identified company link use domain-based email inference with a confidence flag for manual review.
Import in dependency order with reconciliation
We run the import in dependency order: Odoo Users (validated, not migrated), Companies (res.partner with is_company=True), Contacts (res.partner with is_company=False and parent_id resolved), crm.stage (pipeline stages), crm.lead (Deals with contact_id and user_id resolved), calendar.event (with attendee resolution), project.project, project.task (with parent_id for subtasks), helpdesk.ticket (if Helpdesk activated), and knowledge.article (if Knowledge activated). Each phase emits a row-count reconciliation report comparing source record count to destination record count. Discrepancies above 1 percent trigger a data review before the next phase begins.
Cutover, delta sync, and workflow handoff
We freeze writes in PlanPlus Online during cutover and perform a final delta export of any records created or modified during the migration window. We import the delta into Odoo, run a final reconciliation, and enable Odoo as the system of record. We deliver the sync connection documentation for manual reconnection in Odoo Settings, the custom field mapping inventory for the customer's admin to verify, and the workflow and automation rebuild checklist for Odoo Studio and Automated Actions. We provide a one-week hypercare window for reconciliation issues. We do not rebuild PlanPlus Online workflows as Odoo server actions or automation rules; that is a separate engagement or an internal Odoo admin task.
Platform deep dives
PlanPlus Online
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 PlanPlus Online 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
PlanPlus Online: Not publicly documented.
Data volume sensitivity
PlanPlus Online 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 PlanPlus Online to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your PlanPlus Online 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 PlanPlus Online
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.