CRM migration

Migrate from Zedmed to Odoo CRM

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

Zedmed logo

Zedmed

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

100%

12 of 12

objects map 1:1 between Zedmed and Odoo CRM.

Complexity

BStandard

Timeline

5–10 business days

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Zedmed is a practice-management system built for Australian medical clinics — its data model centres on patients, practitioners, appointments, clinical encounters, and Medicare/DVA/WorkCover billing (MBS item codes, bulk-billing flags, claiming rules). Odoo CRM is a general-purpose sales and pipeline tool whose core objects are res.partner (contacts and companies), crm.lead (leads and opportunities), crm.stage (pipeline stages), and account.move (invoices). The migration maps Zedmed patient records to res.partner contacts with addresses and phone numbers, Zedmed appointments to Odoo CRM activities and calendar events with original start/end times, and Zedmed billing records to Odoo account.move invoices with MBS item codes preserved as custom invoice line descriptions. We do not migrate Zedmed's clinical notes, prescription data, or scanned documents — those contain sensitive clinical content that requires separate clinical-system governance. We do not migrate Zedmed's automations or workflow rules (appointment reminders, recall systems, clinical task triggers) because those are destination-rebuild items in Odoo's Studio automation layer. We access Zedmed via scoped read access and API where available, then write to Odoo via xmlrpc/External API using batched inserts to respect Odoo's 1-request-per-second throttle limit.

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

Zedmed logo

Zedmed

What's pushing teams away

  • Browser-based cloud interface introduces friction — copy-paste restrictions, PDF printing requiring specific Chrome settings, and session timeouts disrupt clinical workflows.
  • Steep learning curve with limited training, particularly around billing setup, KPI monitoring, and customising the clinical layout to individual practitioner preferences.
  • No publicly documented API — all data extraction for migration requires engaging Zedmed support directly for database-level access, adding time and complexity to any switch.
  • Outdated interface and limited customisation options compared to newer medical platforms, leading practices seeking a more modern user experience to evaluate alternatives.
  • SMS functionality in v39 is restricted to ZedSMS only, forcing practices on legacy messaging providers to change vendor at upgrade time.

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 Zedmed objects map to Odoo CRM

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

Zedmed

Patient

maps to

Odoo CRM

res.partner

1:1
Fully supported

Zedmed patient records map to Odoo res.partner contacts. Patient name, date of birth, Medicare number, DVA number, address, and phone are migrated as standard contact fields. Each patient's primary practitioner in Zedmed resolves to an Odoo user by email match.

Zedmed

Patient (Medicare/DVA/HICAPS details)

maps to

Odoo CRM

res.partner + custom fields

1:1
Fully supported

Medicare number, concession card type, HICAPS fund, and bulk-billing flag have no native Odoo CRM equivalents. We create x_medicare_number, x_concession_type, x_hicaps_fund, and x_bulk_billing_flag custom fields on res.partner to preserve this billing context for downstream accounting reconciliation. These fields are populated during the migration run and remain editable in Odoo after go-live.

Zedmed

Appointment

maps to

Odoo CRM

calendar.event / mail.activity

1:1
Fully supported

Zedmed appointments with practitioner, start time, duration, appointment type (standard, long, procedural), and status map to Odoo calendar.event records linked to the patient res.partner. DNA (did not attend) status is stored as a custom field on the calendar event for reporting purposes.

Zedmed

Appointment Type

maps to

Odoo CRM

mail.activity.type

1:1
Fully supported

Zedmed appointment type categories (standard, long, procedural, telehealth) map to Odoo mail.activity.type records. Each activity type carries the default Odoo duration and responsible-user setting. Original appointment type names are preserved as the activity type description. This preserves the original scheduling context for future reporting and workflow triggers in Odoo.

Zedmed

Payer (Medicare / DVA / WorkCover / TAC / Private)

maps to

Odoo CRM

account.move (invoice) + custom fields

1:1
Fully supported

Zedmed payers are not native Odoo CRM contacts — they are billing entities. We map them to custom res.partner records of type 'payer' with x_payer_type (Medicare, DVA, WorkCover, TAC, Private, HICAPS) so that Odoo invoices can reference the correct payer. Medicare and DVA are modelled as government payers; WorkCover and TAC as third-party liability payers.

Zedmed

MBS Item Code / Fee Record

maps to

Odoo CRM

account.move.line (description) + product.product

1:1
Fully supported

Zedmed MBS item codes (e.g. 23, 36, 44) and associated fees per payer are mapped to Odoo product.product records with the item code stored as x_mbs_item_code on the product. Invoice lines reference these products so billing history is queryable in Odoo reporting. Fee schedule tier values (P1/P2/P3, bulk-billing rates) are stored as custom fields on the product.

Zedmed

Invoice / Claim Record

maps to

Odoo CRM

account.move

1:1
Fully supported

Zedmed billing invoices with status (paid, unpaid, claimed, rejected) map to Odoo account.move records. Claimed-to-Medicare status is stored as a custom field on the invoice. Original invoice number from Zedmed is preserved as x_source_invoice_ref for audit traceability. This ensures full traceability of billing records across systems after go-live.

Zedmed

Clinical Note / Encounter

maps to

Odoo CRM

mail.message (internal note)

1:1
Fully supported

Zedmed clinical encounter notes contain sensitive health information and cannot be migrated to a CRM platform without explicit patient consent and clinical governance review. We flag these as not migratable in the migration plan. Practices should retain clinical notes in Zedmed or a dedicated clinical records system and link patients via the x_source_zedmed_id field for cross-referencing.

Zedmed

Practitioner / User

maps to

Odoo CRM

res.users

1:1
Fully supported

Zedmed practitioner records (name, provider number, specialty) map to Odoo res.users by email match where an email exists, or by name lookup where email is absent. Zedmed provider numbers are stored as x_provider_number on the Odoo user record for Medicare claiming traceability.

Zedmed

Referral / Referring Practitioner

maps to

Odoo CRM

res.partner (contact) with x_referral_source flag

1:1
Fully supported

Zedmed referral information (referring doctor name, referral date, expiry date) maps to a custom field set on the patient res.partner: x_referral_doctor_name, x_referral_date, x_referral_expiry. The referring practitioner is stored as a separate res.partner contact of type 'referrer' to allow Odoo to track referral source analytics.

Zedmed

Recall / Reminder

maps to

Odoo CRM

mail.activity with custom x_recall_type

1:1
Fully supported

Zedmed recall rules (e.g. 6-month diabetes check, annual health assessment) become Odoo scheduled activities with a custom x_recall_type field and custom x_recall_interval field. The activity is linked to the patient res.partner and queued to the responsible practitioner user on the recall due date.

Zedmed

Document / Attachment

maps to

Odoo CRM

ir.attachment

1:1
Fully supported

Zedmed file attachments (referral letters, consent forms, pathology results) that are stored outside of clinical notes are re-uploaded to Odoo's ir.attachment model and linked to the corresponding res.partner record. File size limits per Odoo configuration apply (default 25MB per file).

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.

Zedmed logo

Zedmed gotchas

High

No public API — database extraction requires Zedmed support

High

v39 forces ZedSMS-only SMS after upgrade

Medium

Clinical WP Templates require RTF format and may be incompatible

Low

Browser cloud restrictions affect document printing

Medium

P1/P2/P3 private fee levels require explicit mapping

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

  • Clinical notes and encounter records are not migratable to Odoo CRM

    Zedmed stores clinical encounter notes, prescriptions, pathology results, and scanned clinical documents under healthcare privacy obligations (Australian Privacy Act, RACGP standards). Migrating this content to a general-purpose CRM platform creates governance and consent risks. We flag all clinical note records as not migratable in the migration plan. Your practice should retain a copy of Zedmed or your clinical notes system. Patient demographics and appointment history are fully migratable; we link them via x_source_zedmed_id so clinicians can cross-reference without duplicating clinical content in Odoo.

  • Odoo CRM has no native MBS billing model — custom fields and products carry the weight

    Odoo's account.move (invoice) model does not include a native concept for MBS item codes, bulk-billing flags, or Medicare/DVA claiming workflows. We bridge this by creating custom fields on res.partner (medicare_number, bulk_billing_flag, private_fee_tier) and product.product records (x_mbs_item_code, x_fee_per_payer). However, Medicare Online claiming and bulk-billing automation require Odoo Studio rules and potentially a custom module — those must be rebuilt after migration. We document the full mapping plan before data lands so your Odoo admin can pre-create the schema.

  • Zedmed API access is not a bulk-export endpoint — sequencing matters

    Zedmed does not expose a single bulk-export endpoint for all patient records. We access Zedmed via its authenticated API with scoped read access, extracting records in batches. Odoo's External API is throttled at approximately 1 request per second with no parallel calls (Custom plan). Large clinics (10,000+ patient records) require careful sequencing: res.partner records first, then practitioner res.users resolution, then calendar events, then account.move invoices. We build an ordered migration script that respects both platform constraints and runs a delta-pickup window at the end to catch in-flight changes during the cutover.

  • Recall and appointment-reminder workflows do not migrate — rebuild in Odoo Studio

    Zedmed's recall rules (e.g. 6-month chronic disease checks, annual health assessments) and SMS/email appointment reminders are platform-native automations. Odoo CRM's equivalent is the mail.activity scheduling model combined with Odoo Studio automation rules and the mail.template email/SMS engine. We export Zedmed's recall configuration as a structured reference document (recording type, interval, responsible practitioner) so your Odoo admin can rebuild those rules in Odoo Studio. The patient records and recall due dates migrate as mail.activity records, but the trigger logic must be recreated.

  • Multi-location Zedmed setups require per-location Odoo company setup

    Clinics running Zedmed across multiple physical locations with separate billing configurations need Odoo's multi-company model configured before data arrives. Each Zedmed location maps to a separate res.company in Odoo, and contacts, appointments, and invoices must be scoped to the correct company. Practices that skip the pre-migration Odoo company setup end up with orphaned records or access-control errors. We deliver a multi-location mapping plan that specifies which Odoo company each Zedmed location's records belong to, and we sequence the migration to create companies before data imports run.

Migration approach

Six steps for a successful Zedmed to Odoo CRM data migration

  1. Audit Zedmed data and build the mapping plan

    We read Zedmed's patient list, appointment history, practitioner roster, payer configurations, and invoice records via scoped API access. We produce a field-level mapping document showing every Zedmed field, its Odoo destination (standard field, custom field, or not migratable), and the transformation logic. We flag clinical notes, prescription data, and scanned documents as not migratable and deliver the exclusion list for your clinical governance sign-off.

  2. Pre-create Odoo schema and custom fields

    Before any data moves, we create the Odoo custom fields on res.partner (medicare_number, bulk_billing_flag, private_fee_tier, recall fields, source_zedmed_id), the custom fields on res.users (provider_number, specialty), the x_mbs_item_code product.product fields, and the x_source_invoice_ref field on account.move. We also create the mail.activity.type records for appointment types and recall types. If you run Odoo multi-company, we set up the company structure first. All custom fields are defined in Odoo Studio or via direct database migration scripts, depending on your instance configuration.

  3. Resolve practitioners and payer entities

    We match Zedmed practitioners to Odoo res.users by email address where available. Provider number, specialty, and practitioner name are preserved as custom fields (x_provider_number, x_specialty) on the Odoo user record. Where Zedmed practitioners have no email address, we match by full name and flag any unresolved practitioners in a pre-migration report so your team can either create Odoo user accounts or assign a fallback owner before the migration run.

  4. Run sample migration with field-level diff

    We migrate a representative slice of 100–300 patients, their appointments from the past 12 months, and a sample of invoices. We generate a field-level diff comparing source values in Zedmed with destination values in Odoo — verifying Medicare numbers, appointment times, practitioner assignments, and invoice totals. You review the diff and approve the mapping before the full run commits. Any mapping corrections are made against the sample set first.

  5. Execute full migration with ordered sequencing and delta pickup

    Full migration runs in the correct dependency order: res.company setup → res.partner (patients and payers) → res.users (practitioners) → product.product (MBS item codes) → calendar.event (appointments) → account.move (invoices). We use Odoo's External API with batched writes respecting the 1-request-per-second throttle. A delta-pickup window captures any Zedmed records modified during the cutover. We generate an audit log of every record created, updated, or skipped. One-click rollback is available if reconciliation fails.

  6. Validate and hand over with rebuild reference documents

    We run post-migration validation: record count reconciliation against Zedmed source counts, spot-check of Medicare numbers, appointment dates, and invoice totals. We deliver an automation rebuild reference document listing every Zedmed workflow (appointment reminder, recall rule, claiming trigger) with the equivalent Odoo Studio configuration steps. We provide 30 days of post-migration support for any data discrepancy fixes. We also verify that custom fields are populated correctly and that no records were inadvertently skipped during the batch process.

Platform deep dives

Context on both ends of the pair

Zedmed logo

Zedmed

Source

Strengths

  • Integrated Medicare, DVA, WorkCover, and health fund claiming with Tyro EFTPOS and MA Online directly in the billing workflow.
  • Dual deployment — Zedmed Cloud handles server maintenance and security; Zedmed On-premise gives full server control for practices preferring it.
  • Comprehensive clinical module covering e-prescribing, pathology results, referrals, chronic disease management, and drawing on images within one system.
  • Per-user pricing with discounted rates for part-time and admin staff, plus a free Doctor's App on iOS for practitioners.
  • Multi-location functionality allows single-app management across multiple clinic sites with separate or shared configurations.

Weaknesses

  • No publicly documented API — all data extraction for migration requires direct engagement with Zedmed support for database-level access.
  • Browser-based cloud interface introduces workflow friction: 2FA requires phone fallback, copy-paste and PDF printing need specific browser settings.
  • Interface is perceived as dated compared to newer medical platforms; limited customisation options for UI and workflow adaptation.
  • Upgrade paths introduce breaking changes — v39 deprecates legacy SMS providers in favour of ZedSMS only, forcing provider changes at migration time.
  • Limited third-party integrations beyond HealthLink, Tyro, and HL7 messaging — no modern REST API for EHR or analytics integrations.
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 Zedmed and Odoo CRM.

B

Overall complexity

Standard migration

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

  • Object compatibility

    A

    All 8 core objects map 1:1 between Zedmed 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

    Zedmed: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

Estimate your Zedmed 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 Zedmed to Odoo CRM data migrations

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

Can't find your answer?

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

Book a free 30 minute consultation

Most Zedmed-to-Odoo CRM migrations complete within 5–10 business days for practices with fewer than 10,000 patient records and standard Medicare-only billing. Large multi-practitioner clinics with WorkCover, TAC, and bulk-billing configurations, or those with over 50,000 records, extend to 3–6 weeks. The longest planning step is building the Odoo custom-field schema and mapping MBS item codes to Odoo products before data loads.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Zedmed.
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