CRM migration
Field-level mapping, validation, and rollback between Weave and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Weave
Source
Odoo CRM
Destination
Compatibility
12 of 12
objects map 1:1 between Weave and Odoo CRM.
Complexity
BStandard
Timeline
48–96 hours
Overview
Weave is a patient communication and phone platform built for dental, veterinary, and medical practices — it stores contacts, companies, call logs, text threads, appointment records, and payment history in a healthcare-specific schema. Odoo CRM uses the crm.lead and res.partner model (Leads become Opportunities) with stage-based pipelines, per-user licensing, and full PostgreSQL data ownership. We map Weave patients to Odoo partners (res.partner), Weave messaging threads to Odoo mail.message records, Weave appointments to Odoo calendar.events, and Weave payments to Odoo account.move entries — preserving create dates, owner assignments, and communication metadata. VoIP call recordings, automated patient reminders, and texting sequences do not migrate because they are platform-native constructs. We extract Weave data via API, perform type-aware field mapping, run a test migration against a staging Odoo instance, then execute the full cutover with a delta-pickup window capturing any in-flight records. The migration scope also includes custom field translation, user ownership resolution, and file attachment re-hosting to ensure a complete patient record transfer.
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 Weave 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.
Weave
Contact
Odoo CRM
res.partner
1:1Weave patients map directly to Odoo res.partner records. Odoo stores contacts as res.partner with type='contact' — no separate Contact object like Salesforce. We preserve the Weave patient ID in a custom field (x_weave_id) for delta-run de-duplication and traceability back to the source system.
Weave
Company
Odoo CRM
res.company
1:1Weave company (practice/facility) records map to Odoo res.company. On Odoo, res.company represents the business entity — for multi-location practices, each Weave company maps to a separate res.company record. Contacts are linked via the partner_id field on res.partner rather than a separate junction table.
Weave
Message (text/email)
Odoo CRM
mail.message
1:1Weave text messages and email threads migrate as mail.message records linked to the res.partner record. Odoo's mail module stores messages with author_id, body (HTML), date, and message_type fields. We preserve the original Weave timestamp and direction (inbound/outbound) as custom fields since Odoo's standard mail.message does not have a native direction field.
Weave
Call Log
Odoo CRM
crm.phone.call
1:1Weave VoIP call records (duration, direction, recording URL) do not map to a native Odoo object by default. Odoo CRM includes a crm.phone.call model in some editions — if not present, we create a custom crm.phone.call model to store call duration, direction, and a link to the recording file hosted on Odoo's ir.attachment storage.
Weave
Appointment
Odoo CRM
calendar.event
1:1Weave appointments map to Odoo calendar.event records linked to res.partner as attendees. Odoo's calendar module stores start/datetime, stop/datetime, name, and attendee_ids. We map Weave appointment status (scheduled, completed, cancelled) to the calendar.event state field, preserving all timing and participant data for calendar view compatibility.
Weave
Payment
Odoo CRM
account.move
1:1Weave payment records (amount, date, method, patient) map to Odoo account.move entries with type='entry' for miscellaneous transactions or linked to an invoice if Weave generated bills. Odoo's accounting module requires an active journal — we use the default company journal or create one during setup if none exists.
Weave
Custom Field (patient)
Odoo CRM
res.partner custom field
1:1Weave custom properties on patient records (e.g., referral source, insurance carrier, treatment history) migrate to custom fields on res.partner. Odoo requires a custom module or Studio to add fields — we document the target field name, type (char, selection, many2one), and help text so the Odoo admin creates them before migration.
Weave
Custom Field (company)
Odoo CRM
res.company custom field
1:1Weave custom properties on company records (e.g., practice type, accepted insurance, NPI number) migrate to custom fields on res.company. Odoo res.company supports custom fields via Studio or module development — we provide the field specification including type, label, and any selection option values.
Weave
User / Owner
Odoo CRM
res.users
1:1Weave users and assigned owners resolve by email match against Odoo res.users. If a Weave owner has no Odoo user account, records are assigned to the migration fallback user (typically the admin) and flagged in the pre-migration audit report for the Odoo admin to assign manually.
Weave
Attachment / File
Odoo CRM
ir.attachment
1:1Weave file attachments on patient records (insurance cards, intake forms, imaging) re-upload to Odoo's ir.attachment table linked to the corresponding res.partner. Odoo's attachment storage (file size limits depend on Odoo version and hosting configuration) handles the binary data with res_model='res.partner' and res_id pointing to the partner record.
Weave
Workflow / Automation
Odoo CRM
No equivalent
1:1Weave appointment reminders, patient texting sequences, and review-request triggers are platform-native automations with no direct Odoo equivalent. These do not migrate. We export the workflow definitions as a PDF reference document so the Odoo admin can rebuild equivalent automations using Odoo's server actions and calendar reminders.
Weave
Billing / Payment Plan
Odoo CRM
No equivalent (preserve as custom field)
1:1Weave billing records and payment plan configurations are healthcare-specific billing constructs. Odoo's account.move handles individual transactions but not Weave's payment-plan logic. We preserve billing metadata as custom fields on res.partner and recommend rebuilding payment plan logic in Odoo's sale.subscription or recurring invoice module.
| Weave | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | res.partner1:1 | Fully supported | |
| Company | res.company1:1 | Fully supported | |
| Message (text/email) | mail.message1:1 | Fully supported | |
| Call Log | crm.phone.call1:1 | Fully supported | |
| Appointment | calendar.event1:1 | Fully supported | |
| Payment | account.move1:1 | Fully supported | |
| Custom Field (patient) | res.partner custom field1:1 | Fully supported | |
| Custom Field (company) | res.company custom field1:1 | Fully supported | |
| User / Owner | res.users1:1 | Fully supported | |
| Attachment / File | ir.attachment1:1 | Fully supported | |
| Workflow / Automation | No equivalent1:1 | Fully supported | |
| Billing / Payment Plan | No equivalent (preserve as custom field)1: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.
Weave gotchas
Pricing hides setup, hardware, and addon costs
SMS and voicemail retention limits
Limited public API documentation
VoIP call records tied to phone service
Consolidated pricing tiers obscure feature availability
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 Weave data and map to Odoo schema
We connect to Weave via API to extract contacts, companies, message history, appointments, and payments. We cross-reference Weave custom properties against Odoo's res.partner, res.company, and mail.message models. The output is a field-mapping spreadsheet that names every Weave field, its Odoo destination model and field, the transformation type (direct, value-map, custom-field-required), and any Odoo pre-requisites like Studio field creation or mail module installation.
Set up Odoo custom fields and resolve user accounts
The Odoo admin creates the custom fields documented in the field-mapping spreadsheet before the migration runs — using Odoo Studio or a custom module for fields that Studio cannot handle. We match Weave owner and staff email addresses against Odoo res.users to resolve record ownership. Unmatched owners are flagged and assigned to a fallback user, with a de-confliction report delivered for manual reassignment after go-live.
Run test migration against Odoo staging environment
We execute a sample migration using 100–500 representative Weave records — spanning contacts across multiple companies, message threads, appointments, and payments. The field-level diff compares source Weave data against Odoo destination records, verifying that custom field values landed correctly, message timestamps match, and appointment attendee links resolved to res.partner ids. The test report highlights any mapping gaps before the full run commits.
Execute full migration with delta-pickup window
The full Weave dataset loads into Odoo in dependency order: res.company first, then res.partner, then mail.message, calendar.event, and account.move. A 48-hour delta-pickup window opens at cutover to capture any Weave records modified during the migration run. All records carry their original Weave create_date and write_date preserved in Odoo custom datetime fields. An audit log records every operation; one-click rollback reverts the Odoo database to the pre-migration snapshot if reconciliation finds unexpected discrepancies.
Validate record counts and deliver workflow reference document
We run reconciliation checks comparing Weave record counts by object type against Odoo destination counts. Any records that failed to migrate (due to data quality issues or missing Odoo prerequisites) are listed in a final-gap report. We deliver the Weave workflow definitions as a PDF showing every automated reminder, SMS sequence, and review-request trigger with its trigger condition and action — giving the Odoo admin a rebuild blueprint for Odoo's mail.template and server.action system.
Platform deep dives
Weave
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 Weave 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
Weave: Not publicly documented.
Data volume sensitivity
Weave 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 Weave to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Weave 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 Weave
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.