CRM migration

Migrate from Phreesia to Odoo CRM

Field-level mapping, validation, and rollback between Phreesia and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.

Phreesia logo

Phreesia

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

100%

10 of 10

objects map 1:1 between Phreesia and Odoo CRM.

Complexity

BStandard

Timeline

5–10 business days

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Phreesia is a healthcare-dedicated patient intake and activation platform built around digital registration pads, insurance eligibility checks, and clinical screening forms. It does not expose a conventional CRM object model — data lives as patient records, intake form submissions, insurance captures, and appointment timestamps. Odoo CRM uses crm.lead for both leads and opportunities, res.partner as the unified contact/company record, and stores custom fields directly on those models. The migration challenge is that Phreesia's form-driven, healthcare-specific data types have no native Odoo equivalents: intake answers, clinical screening results, and appointment references must be mapped to custom fields on crm.lead or res.partner, and patient records that represent only demographic containers need to be evaluated against Odoo's partner model to avoid creating duplicate entries. FlitStack AI sequences the export from Phreesia's API as structured records, transforms intake form fields into Odoo custom fields, resolves owner email addresses against Odoo system users, and performs a test migration of 50–200 records with a field-level diff before committing the full dataset. Automations and intake workflows that govern Phreesia's patient experience do not migrate — they must be rebuilt using Odoo's activity scheduling and automation rules.

Field-level fidelity

Every standard and custom field arrives verified.

Schema-aware mapping

AI proposes the map; you confirm before any record moves.

Relationships preserved

Parent–child, lookups, and ownership stay linked.

Full activity history

Calls, emails, meetings — with original timestamps.

Attachments & notes

Documents, uploads, and inline notes move with the record.

Why teams make this switch

Two sides of the same decision

Leaving

Phreesia logo

Phreesia

What's pushing teams away

  • Workflow automation beyond intake is limited; recall campaigns, treatment plan follow-ups, and marketing sequences require separate tools, frustrating practices seeking a unified patient engagement platform.
  • Integration promises sometimes do not match actual capability; organizations report that promised data write-back to their PM/EHR did not function as sold during implementation.
  • Frequent user interface updates disrupt staff workflows and require retraining, with some reviewers describing the platform as difficult to navigate after changes.
  • Patient-facing complexity creates friction for older or less technical patients, who struggle with self-service check-in and require staff assistance that partially negates efficiency gains.
  • Pricing is opaque and requires sales consultation, making budget planning difficult and leading some organizations to seek alternatives with published pricing tiers.

Choosing

Odoo CRM logo

Odoo CRM

What's pulling them in

  • Teams choose Odoo CRM for its modular architecture — one base install with one-click app additions means they can adopt CRM alone and add accounting, inventory, or sales later as the business grows.
  • Small businesses pick Odoo because the Community edition is free and open-source, with no per-user or contact limits, allowing full evaluation before committing to a paid Enterprise tier.
  • The drag-and-drop Kanban pipeline and AI lead scoring are highlighted across G2 reviews as concrete features that make lead management faster and more visual than spreadsheet-based workflows.
  • Odoo's native integration with email, live chat, SMS, VoIP, and WhatsApp means inbound leads from multiple channels feed into a single pipeline without third-party middleware.
  • Companies in retail, supply chain, and construction value that Odoo's CRM module shares the same PostgreSQL database and UI as its ERP modules, eliminating data silos between sales and operations.

Object mapping

How Phreesia objects map to Odoo CRM

Each row shows how a Phreesia 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.

Phreesia

Patient Record

maps to

Odoo CRM

res.partner

1:1
Fully supported

Phreesia patient records map to Odoo res.partner as the primary contact record. The res.partner record stores name, email, phone, address, and custom fields for all intake and clinical data. If the patient record contains both individual and guarantor information, the guarantor maps to a separate res.partner record linked via the parent_id field.

Phreesia

Insurance Capture

maps to

Odoo CRM

res.partner (custom fields)

1:1
Fully supported

Phreesia stores insurance carrier name, plan type, group number, subscriber ID, and coverage effective date on the patient record. These map to custom Char, Char, Char, Char, and Date fields on res.partner created in Odoo before migration. Each payer type requires its own field mapping row in the migration plan.

Phreesia

Intake Form Submission

maps to

Odoo CRM

res.partner (custom fields) + ir.attachment

1:1
Fully supported

Structured intake answers (responses to custom clinical and demographic questions) migrate to custom fields on res.partner keyed by question ID. Free-text or signature-based form responses migrate as PDF attachments linked via ir.attachment to the res.partner record, preserving the original submission timestamp and provider context.

Phreesia

Clinical Screening Result

maps to

Odoo CRM

crm.lead (custom fields)

1:1
Fully supported

Phreesia's clinical screening module captures patient-reported health data (PHQ-9, screenings for social needs, vitals, etc.) organized by screening type and result value. These migrate to custom fields on crm.lead because Odoo uses lead records to track the initial outreach context before a patient becomes an active partner record.

Phreesia

Appointment / Visit Record

maps to

Odoo CRM

crm.lead + mail.message

1:1
Fully supported

Phreesia appointment dates, appointment types, provider names, and visit outcomes map to custom Date, Char, and Selection fields on crm.lead. Visit notes and clinical outcome summaries migrate as mail.message records attached to the lead, preserving the original timestamp so Odoo's activity timeline shows the full patient interaction history.

Phreesia

Referral Source

maps to

Odoo CRM

crm.lead.source_id

1:1
Fully supported

Phreesia tracks how patients arrived, including physician referral, self-referral, urgent care transfer, and marketing campaign attribution. Referral source maps to crm.lead.source_id using a value-by-value mapping between Phreesia's source taxonomy and Odoo's utm.source records. Any referral sources that do not have an existing utm.source counterpart automatically create new utm.source entries during the migration process to ensure complete source attribution.

Phreesia

Payment / Collection Record

maps to

Odoo CRM

account.move (custom link)

1:1
Fully supported

Phreesia processes payments at time of service and tracks collection history as part of its revenue cycle module. Odoo accounting (account.move) handles invoicing separately. Payment transaction IDs and amounts migrate as a custom Char field on res.partner for reference, but the full financial transaction history requires Odoo's accounting module installation and configuration to reconstruct.

Phreesia

User / Owner

maps to

Odoo CRM

res.users

1:1
Fully supported

Phreesia staff assignments (provider, care coordinator, front-desk user) map to res.users by email address resolution. Unmatched owners are flagged before migration and either assigned to a fallback Odoo user or left as custom Char fields on the record until admin resolution. Odoo's multi-company model requires company_id assignment alongside user assignment.

Phreesia

Consent Record

maps to

Odoo CRM

ir.attachment + crm.lead (custom fields)

1:1
Fully supported

Phreesia captures electronic consent signatures for HIPAA, treatment consent, and financial policy as part of intake. Signed consent documents migrate as PDF attachments linked to res.partner. Consent type and capture timestamp migrate as custom Selection and Date fields for quick filtering in Odoo without opening each attachment.

Phreesia

Custom Intake Fields

maps to

Odoo CRM

res.partner / crm.lead custom fields

1:1
Fully supported

Any Phreesia custom intake fields unique to an organization's registration workflow migrate as Odoo custom fields on the appropriate model (res.partner for patient demographics, crm.lead for outreach context). Field type mapping follows: text answers to Char/Text, numeric answers to Float/Integer, yes/no to Boolean, and multi-select to Selection fields in Odoo.

Gotchas + challenges

What specifically takes care here

Platform-specific issues from each side, plus the pair-specific challenges that don't show up on either platform's page on its own.

Phreesia logo

Phreesia gotchas

High

PM/EHR integration configuration must be validated before patient data import

High

Custom intake forms lack a standard schema export

Medium

Phreesia is an intake platform, not a longitudinal patient database

Low

Patient secure authentication links are time-limited and non-migratable

Medium

Payment plan configurations require manual reconciliation

Odoo CRM logo

Odoo CRM gotchas

High

Odoo.sh version gating blocks assisted migrations from trial

High

Enterprise modules fail to install on Community after database restore

Medium

Custom module view inheritance breaks between Odoo major versions

Medium

Custom fields risk losing their application context on Community

Low

API access for Community is gated behind the Custom Plan

Pair-specific challenges

  • Phreesia intake answers and clinical screening results have no native Odoo CRM equivalent and require custom field creation before data lands

    Phreesia stores intake form responses and clinical screening results as structured data fields tied to a patient record, but Odoo CRM has no out-of-the-box model for this healthcare-specific content. The migration requires pre-creating custom fields on res.partner and crm.lead for every distinct intake question and screening type before records can be written. If an organization has 20 custom intake fields, all 20 must be defined as Odoo custom fields (with correct field types: Char, Selection, Boolean, Date, Float) and mapped row-by-row. FlitStack AI generates a field-creation specification during the planning phase so the Odoo schema is ready before any data moves. This is the single largest driver of migration timeline and cost for Phreesia-to-Odoo projects.

  • Phreesia appointment scheduling data maps to static fields on crm.lead, not native Odoo calendar events

    Odoo CRM does not include a native appointment scheduling module in its base installation — calendar management is handled by Odoo's separate Calendar application (calendar.event), which operates independently of the CRM and requires its own configuration. Phreesia appointment dates, times, and provider names cannot automatically create calendar.event records during migration because the appointment-to-activity mapping requires Odoo Calendar app to be installed and because Phreesia's visit-outcome data (no-show, completed, rescheduled) does not map directly to any Odoo event status. FlitStack AI migrates appointment dates and provider names as custom Char and Date fields on crm.lead and documents the Odoo Calendar configuration steps as a post-migration task. Teams expecting automated scheduling continuity will need to rebuild appointment workflows in Odoo Calendar or a third-party scheduling integration.

  • Phreesia's scoped read access model means only the exporting organization's data is accessible — no multi-location aggregation at migration time

    Phreesia's API access is scoped to the specific clinic or health system account authenticated during the migration. Organizations operating multiple Phreesia locations (each with a separate Phreesia deployment) must run separate export cycles per location and merge the resulting datasets in Odoo as distinct res.partner records with a custom location_id field. There is no aggregation endpoint that pulls all locations into a single export. This becomes significant for health systems with 5+ locations where each location has independent Phreesia configurations and intake form variants. FlitStack AI flags multi-location scope during discovery and sequences location-by-location exports with a cross-location deduplication pass before loading into Odoo.

  • Phreesia workflows, consent automation, and intake routing rules do not exist in the API export and cannot migrate to Odoo automatically

    Phreesia's intake workflow engine — the rules that govern which forms appear based on appointment type, which reminders fire, and how consent captures route to the PM/EHR — runs as internal Phreesia configuration that is not exposed via API or export. When migrating to Odoo CRM, these workflow constructs have no data representation to extract. The equivalent in Odoo is base.automation (automated actions triggered on record creation or field change) and mail.activity, which must be configured manually based on exported Phreesia workflow definitions. FlitStack AI provides a workflow audit export from Phreesia's documentation and a corresponding Odoo automation rebuild guide as part of the migration package, but the Odoo-side automation must be built by an Odoo administrator or consultant post-migration.

  • Insurance eligibility verification flags from Phreesia do not trigger re-checks in Odoo — coverage status becomes a static field

    Phreesia runs real-time eligibility verification against payer systems and stores the result (active, inactive, pending, unknown) as a status flag on the patient record. When this data migrates to Odoo as a custom Selection field, it becomes a snapshot in time — it does not automatically re-verify eligibility. Over time, the Odoo insurance_status__c field will become stale unless manually updated or connected to a third-party eligibility verification service (e.g., Availity, Waystar) via Odoo's web API or a middleware integration. FlitStack AI surfaces this as a migration gotcha and provides a reconciliation workflow template that Odoo's admin can schedule as a periodic manual review or API-based re-check against the existing payer portal.

Migration approach

Six steps for a successful Phreesia to Odoo CRM data migration

  1. Discover Phreesia data inventory and define Odoo custom field schema

    FlitStack AI inventories all Phreesia record types — patient records, insurance captures, intake form submissions, clinical screening results, appointment records, and consent documents — and catalogs every distinct field and field type present in the export. We then generate an Odoo custom field specification: field names (using Odoo's naming convention), field types (Char, Selection, Float, Date, Boolean, Text), and target model (res.partner for demographics and insurance, crm.lead for outreach and clinical context). The Odoo administrator creates these fields before the migration run. This step also identifies multi-location Phreesia accounts and sequences separate export jobs per location.

  2. Export Phreesia records via API and stage for transformation

    Using Phreesia's REST API with read-only credentials, FlitStack AI extracts patient records, insurance captures, intake form submissions, and appointment data as structured JSON. The export respects Phreesia's pagination and rate limits with exponential backoff to avoid throttling. Each record is tagged with its source location ID and original Phreesia record identifier (stored as phreesia_record_id__c on the destination record). Consent PDFs are downloaded as binary blobs and staged for re-upload as Odoo ir.attachment records. Insurance records are linked to their parent patient record by Phreesia relationship ID before transformation begins.

  3. Transform data to Odoo schema and resolve owner assignments by email

    FlitStack AI transforms each Phreesia record into Odoo XML-RPC payloads for res.partner and crm.lead. Patient records write to res.partner first (required for foreign-key resolution on crm.lead). Owner resolution matches Phreesia staff email addresses against res.users.login in Odoo; unmatched owners are flagged in a pre-flight report and assigned to a fallback Odoo user or left as a custom Char field pending admin resolution. Insurance carrier names are resolved against a reference table of common payer names to enable future eligibility integration. Referral sources are mapped to utm.source records by value; unmapped sources create new utm.source entries during this step.

  4. Run test migration with field-level diff on 50–200 representative records

    A representative slice of records — covering each intake form variant, multiple insurance carrier types, clinical screening records, and records from each Phreesia location — is migrated to a staging Odoo database. FlitStack AI generates a field-level diff report comparing every source field value against its destination field value. The report highlights: custom fields that did not write (type mismatch or missing field in Odoo), truncated text values (Odoo Char limits), unmapped pick-list values that defaulted to 'unknown', and records where owner resolution failed. The Odoo administrator reviews the diff and FlitStack AI applies corrections before the full run.

  5. Execute full migration with delta-pickup window and audit log

    The full Phreesia dataset migrates to the production Odoo instance via XML-RPC in batches of 100–500 records per API call, with Odoo's xmlrpc_import hook used for bulk operations where available. A delta-pickup window of 24–48 hours captures any records created or modified in Phreesia during the migration run. All operations — create, link, attach — are logged to FlitStack AI's audit trail with source record ID, destination record ID, timestamp, and operator. One-click rollback reverts all records created during the migration run if the Odoo administrator rejects the result. After rollback window closes, the FlitStack team delivers a migration summary report showing record counts, attachment counts, owner resolution rate, and any unmapped fields requiring manual follow-up.

Platform deep dives

Context on both ends of the pair

Phreesia logo

Phreesia

Source

Strengths

  • Automated insurance eligibility and benefits verification before the patient arrives reduces claim denials and front-desk work.
  • Bidirectional integrations with major PM and EHR systems keep demographics, consents, and payments synchronized automatically.
  • Patient self-service check-in saves clinical staff over five minutes per visit on average across Phreesia's network.
  • Electronic consent capture with logic-driven prompting reaches 99% automatic signature or re-signature completion rates.
  • In-house merchant processing with flat-rate pricing consolidates payment infrastructure within the same platform.

Weaknesses

  • Workflow automation is limited to intake; recall campaigns, treatment follow-up, and marketing sequences require separate systems, frustrating practices seeking unified engagement tooling.
  • API documentation is not publicly accessible, making programmatic data extraction a coordination effort with Phreesia's implementation team rather than a self-service export.
  • Integration capabilities and actual data write-back behavior vary between PM/EHR systems, with some organizations reporting promised functionality did not work as described.
  • Custom intake forms and screening logic are organization-specific, making pre-migration field mapping a manual, per-customer effort with no standardized schema export.
Odoo CRM logo

Odoo CRM

Destination

Strengths

  • Modular open-source architecture lets teams start with CRM and add ERP apps as needs grow, all sharing one PostgreSQL database.
  • Free Community edition with no contact limits and full source code access means zero licensing cost for evaluation and small deployments.
  • Drag-and-drop Kanban pipeline with AI lead scoring gives a visual, prioritized view of the sales funnel without requiring custom configuration.
  • Native integrations with email, live chat, SMS, VoIP, WhatsApp, and social media feed all inbound leads into a single unified inbox.
  • Active Odoo Community Association (OCA) maintains dozens of community-maintained modules on GitHub for extended functionality.

Weaknesses

  • Gmail and email integration reliability is a recurring complaint — threads drop and conversations scatter across inboxes, disrupting sales team workflows.
  • Enterprise edition pricing stacks quickly: multiple apps at per-user rates ($25–$50/user/month) plus Odoo.sh hosting costs more than many SMBs anticipate.
  • Setup and configuration complexity increases significantly once custom fields, automation rules, and multiple installed modules are in play.
  • Odoo.sh trial databases run on a version (e.g., 18.3) that is not directly migratable to Odoo.sh, blocking the assisted migration path Odoo advertises.
  • Version upgrades between major Odoo releases (e.g., 17→18) frequently break custom module view definitions and XPath expressions, requiring manual remediation.

Complexity grading

How hard is this migration?

Standard CRM migration. All 8 core objects map 1:1 between Phreesia and Odoo CRM.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across Phreesia and Odoo CRM.

  • Object compatibility

    A

    All 8 core objects map 1:1 between Phreesia and Odoo CRM.

  • Field mapping clarity

    C

    Field mapping is derived from defaults — final spec confirmed during the sample migration.

  • Timeline complexity

    B

    8-object category — typical timelines run 2–7 days end-to-end.

  • API constraints

    B

    Phreesia: Not publicly documented.

  • Data volume sensitivity

    B

    Phreesia doesn't expose a bulk API — REST + parallelization used for high-volume runs.

Estimator

Estimate your Phreesia to Odoo CRM migration cost

Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.

Step 1

What are you migrating?

Pick a category, then your source and destination platforms.

Category

FAQ

Frequently asked questions about Phreesia to Odoo CRM data migrations

Answers to the questions buyers ask most during Phreesia to Odoo CRM migration scoping. Not seeing yours? Book a call.

Can't find your answer?

Walk through your Phreesia to Odoo CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Most Phreesia-to-Odoo migrations complete in 5–10 business days for under 10,000 patient records. The dominant time driver is the number of distinct intake form fields and clinical screening types — each requires a custom field definition in Odoo before data can write. Organizations with 10,000–100,000 records, more than 15 custom intake fields, or multiple Phreesia locations should plan for 10–20 business days, which includes multi-location export sequencing, Odoo custom field creation, and a field-level diff on the test slice before the full run commits.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Phreesia.
Land in Odoo CRM, intact.

Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.

Accuracy guarantee Rollback included Quote in 1 business day