CRM migration
Field-level mapping, validation, and rollback between My Practice Now and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
My Practice Now
Source
Odoo CRM
Destination
Compatibility
9 of 10
objects map 1:1 between My Practice Now and Odoo CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
My Practice Now stores client records, appointment calendars, and invoice data in a flat structure optimized for single-practitioner workflows. Odoo CRM uses a relational model centered on crm.lead (which handles both leads and opportunities), res.partner (unified contact and company record), and account.move (invoices). The migration maps My Practice Now client fields to res.partner fields, appointment records to crm.lead entries with activity logging, and invoice line items to Odoo's account.move and account.move.line tables. Custom fields from My Practice Now (client-specific properties, treatment notes, insurance details) migrate as custom fields on res.partner using Odoo's x_ prefix convention. Owner resolution matches My Practice Now practitioner emails to Odoo user accounts. FlitStack uses Odoo's XML-RPC API to write records in dependency order — res.partner first, then crm.lead with partner_id links, then account.move with partner_id and invoice lines. Reports, automations, and appointment reminders do not migrate and must be rebuilt using Odoo's studio tools or custom modules.
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 My Practice Now 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.
My Practice Now
Client
Odoo CRM
res.partner
1:1My Practice Now client records map directly to Odoo res.partner. The partner serves as the unified contact and company record. Address fields, phone, email, and custom client properties transfer as fields on res.partner. Multiple My Practice Now clients sharing one email are flagged for deduplication before migration.
My Practice Now
Appointment
Odoo CRM
crm.lead
1:1Each My Practice Now appointment becomes a crm.lead entry. The appointment date maps to crm.lead create_date, the practitioner maps to user_id, and the appointment type or status maps to stage_id. Notes from the appointment session transfer to the lead description or a custom field on crm.lead for continuity.
My Practice Now
Invoice
Odoo CRM
account.move
1:1My Practice Now invoices map to Odoo account.move records with move_type='out_invoice'. Line items map to account.move.line entries with product_id, quantity, and price_unit. Partner_id links to the migrated res.partner record. Fiscal position mapping applies if My Practice Now stores tax information.
My Practice Now
Practitioner
Odoo CRM
res.users
1:1My Practice Now practitioner accounts are matched to Odoo res.users by email address before migration begins. If a practitioner's email does not correspond to an existing Odoo user, FlitStack flags that practitioner and either reassigns their appointments to a designated fallback Odoo user or temporarily holds those appointments pending creation of the missing user accounts in Odoo.
My Practice Now
Custom Client Property
Odoo CRM
res.partner (x_ custom field)
1:1My Practice Now custom client properties (treatment notes, insurance group, referral source) require custom fields on res.partner in Odoo. Field types are created to match source types. Values are loaded after the custom field definition exists in the Odoo database.
My Practice Now
Service/Product
Odoo CRM
product.product
1:1My Practice Now service items are mapped to product.product records with type set to 'service'. Each product.product record is then referenced in account.move.line entries to represent the line items on invoices. If My Practice Now includes a price list, FlitStack translates it into Odoo's pricelist model, associating the appropriate pricing rules with the migrated products and customers.
My Practice Now
Client Notes
Odoo CRM
mail.message / ir.attachment
many:1Client notes and session history from My Practice Now are imported as Odoo mail.message records linked to the corresponding res.partner, preserving the original creation timestamp and the practitioner who authored each note. If the notes contain file attachments, FlitStack stores them as ir.attachment records associated with the partner or lead, ensuring the original files remain accessible within Odoo's document management system.
My Practice Now
Appointment Reminders
Odoo CRM
mail.activity
1:1Appointment reminder rules defined in My Practice Now have no direct equivalent within the Odoo CRM data model, because Odoo handles reminders through its calendar module rather than as CRM attributes. FlitStack exports the complete reminder configuration—including notification timing, channels, and recipient logic—as a structured reference document that your Odoo administrator can use to recreate the rules manually in Odoo calendar and mail.activity, preserving the same reminder behavior after migration.
My Practice Now
Billing Settings
Odoo CRM
account.fiscal.position / res.partner
1:1Tax identification numbers and billing preferences stored in My Practice Now are mapped to Odoo res.partner fields such as vat and property_payment_term_id, while any tax region mappings are represented as account.fiscal.position records. This configuration-level data is loaded during the migration alongside the actual record data, ensuring that fiscal and payment term settings are applied automatically to the migrated partners and invoices in Odoo.
My Practice Now
Reporting / Dashboards
Odoo CRM
No equivalent
1:1My Practice Now report definitions and dashboard configurations do not migrate because they are platform‑specific UI constructs with no direct Odoo equivalent. The underlying data—client records, appointments, and invoices—is fully present in Odoo and can be queried using Odoo's built‑in reporting tools, pivot views, or custom SQL views built against the migrated tables. Your team will need to rebuild any custom reports and dashboards in Odoo using Studio or SQL‑based reporting.
| My Practice Now | Odoo CRM | Compatibility | |
|---|---|---|---|
| Client | res.partner1:1 | Fully supported | |
| Appointment | crm.lead1:1 | Fully supported | |
| Invoice | account.move1:1 | Fully supported | |
| Practitioner | res.users1:1 | Fully supported | |
| Custom Client Property | res.partner (x_ custom field)1:1 | Fully supported | |
| Service/Product | product.product1:1 | Fully supported | |
| Client Notes | mail.message / ir.attachmentmany:1 | Fully supported | |
| Appointment Reminders | mail.activity1:1 | Fully supported | |
| Billing Settings | account.fiscal.position / res.partner1:1 | Fully supported | |
| Reporting / Dashboards | No equivalent1: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.
My Practice Now gotchas
Research data is sparse and often misattributed
Thinkific export scope determines what we can migrate
Content files require separate media migration
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
Audit My Practice Now data model and export structure
FlitStack connects to My Practice Now via available export mechanisms—CSV export or API access—to catalog all client records, appointments, invoices, custom properties, and service items. We capture field data types, relational constraints, and data‑quality flags such as duplicate email addresses, missing practitioner links, and orphaned invoice references. The audit output forms the source‑side schema map that informs the design of the Odoo field mapping plan and identifies any pre‑migration cleanup needed before data loads.
Create Odoo custom fields and configure partner/lead model
Prior to any data loads, FlitStack creates the custom fields on res.partner using Odoo's x_ prefix convention (or module-based field definitions) for each custom client property discovered in My Practice Now. We also define the stage_id values on crm.lead to align with My Practice Now appointment statuses, and we configure practitioner‑to‑user email resolution rules by querying Odoo res.users so that each practitioner maps to the correct Odoo user before appointments and leads are migrated.
Migrate res.partner records with field-level mapping
Client records migrate as res.partner entries via Odoo's XML‑RPC API, with address fields, contact information, and custom properties mapped according to the field mapping plan. Practitioner assignments are resolved by matching the practitioner email to an Odoo user_id in res.users; any unmatched emails are flagged for fallback handling. FlitStack applies deduplication logic to detect clients that share identical email addresses, and it flags those records for manual merge review before the migration commits to the target database.
Migrate appointments as crm.lead entries and invoices as account.move
Each appointment record is transformed into a crm.lead entry, using stage_id mapping to reflect My Practice Now appointment status, user_id assignment derived from the practitioner email resolution, and tag_ids to capture service type for segmentation. Appointments linked to a practitioner inherit the resolved user_id, ensuring ownership in the kanban pipeline. Invoice records generate account.move entries (move_type='out_invoice') with partner_id linking back to the migrated res.partner, and each invoice line creates an account.move.line entry that references the corresponding product.product record created from My Practice Now service items.
Run field-level diff validation and delta-pickup window
FlitStack runs a sample migration on a representative subset (typically 100–500 records) to produce a field‑level diff report that compares each source value against the corresponding Odoo field after migration. The report verifies custom field population, confirms invoice totals and line‑item amounts, and checks stage_id mapping consistency. Once the full migration is committed, a delta‑pickup window captures any My Practice Now records created or modified during the cutover period, ensuring Odoo reflects the latest source state at go‑live. An audit log records all writes, and rollback capability is available should reconciliation reveal any discrepancies.
Platform deep dives
My Practice Now
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 My Practice Now 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
My Practice Now: Not publicly documented at the individual storefront level; Thinkific generally applies org-level rate limits.
Data volume sensitivity
My Practice Now 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 My Practice Now to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your My Practice Now 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 My Practice Now
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.