CRM migration
Field-level mapping, validation, and rollback between MeasureSquare and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
MeasureSquare
Source
Odoo CRM
Destination
Compatibility
10 of 10
objects map 1:1 between MeasureSquare and Odoo CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
MeasureSquare CRM stores contacts, companies, deal pipelines, tasks, and trade-specific project data for flooring and construction teams. Its data model uses separate Contact and Company objects with many-to-many associations, pipeline stages as pick-lists, and product databases tied to estimating workflows. Odoo CRM consolidates contacts and companies into a single res.partner model, maps pipelines to CRM stages via stage_id on crm.lead, and exposes data through XML-RPC external API with optional Odoo Studio for custom fields. We extract MeasureSquare data via their REST API, resolve owner records by email match against Odoo res.users, map pipeline stages to crm.lead stage values, and load via Odoo's external API in dependency order: res.partner first, then crm.lead, then attachments. Workflows, automations, product catalogs, and job-costing configurations do not migrate and must be rebuilt manually. The migration runs in read-only scope against MeasureSquare — your team continues working throughout. A delta-pickup window captures any in-flight changes before you cut over to Odoo.
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 MeasureSquare 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.
MeasureSquare
Contact
Odoo CRM
res.partner
1:1MeasureSquare Contact maps directly to Odoo res.partner where type='contact'. First name, last name, email, phone, job title, and address fields map field-for-field. Primary company assignment is handled via the partner's parent_id (linking to the company partner) or the Account Contacts relationship on the company side. Multiple company associations collapse to one primary parent_id with additional associations surfaced as contact_ids on the company partner.
MeasureSquare
Company
Odoo CRM
res.partner
1:1MeasureSquare Company maps to Odoo res.partner where type='company'. Company name becomes partner name, domain becomes website, and address fields map to street, city, state, zip, and country on res.partner. Parent-child company hierarchies in MeasureSquare (parent_company_id) map to parent_id on res.partner. Industry pick-list values require value-by-value mapping since MeasureSquare industry terms differ from Odoo's default industry list.
MeasureSquare
Deal / Pipeline
Odoo CRM
crm.lead
1:1MeasureSquare Deal maps to Odoo crm.lead treated as opportunity (type='opportunity'). Deal name becomes crm.lead name, amount maps to expected_revenue, and close date maps to date_deadline. The deal's pipeline stage maps to stage_id on crm.lead via value_mapping — each MeasureSquare stage name is matched to the corresponding Odoo CRM stage by sequence order or name. Pipeline name itself maps to crm.team_id so deals land in the correct Odoo sales team.
MeasureSquare
Pipeline Stage
Odoo CRM
crm.stage
1:1MeasureSquare pipeline stage names are mapped one-to-one to Odoo CRM stage names via value_mapping. Odoo stores stages as crm.stage records with id and name; we match by name string or by sequence position if names differ. Stage-entered timestamps from MeasureSquare are preserved in a custom datetime field (x_stage_entered_date) on crm.lead since Odoo's crm.lead stage history is not exposed via the standard API.
MeasureSquare
Task
Odoo CRM
project.task
1:1MeasureSquare Tasks map to Odoo project.task records. Tasks linked to a Deal in MeasureSquare are imported as tasks on a project.project created per pipeline or per owner group. Task name, description, due date, and priority map field-for-field. Odoo's task stage_id is matched to MeasureSquare task status via value_mapping. Unassigned tasks without a project are created on a default 'General' project in Odoo.
MeasureSquare
Note / Attachment
Odoo CRM
ir.attachment
1:1MeasureSquare notes and file attachments migrate to Odoo ir.attachment records linked by res_model='crm.lead' and res_id pointing to the corresponding crm.lead id. Notes with rich text are stored as HTML in the attachment's datas field or as a note linked via mail.message. Files are downloaded from MeasureSquare storage and re-uploaded to Odoo's filestore via /web/binary/upload_attachment. File size limits from Odoo's ir_attachment model apply.
MeasureSquare
Owner / User
Odoo CRM
res.users
1:1MeasureSquare owner_id on Contact, Company, and Deal resolves by email match against Odoo res.users. Unmatched owners are flagged before migration; your Odoo admin either creates a placeholder user or assigns those records to a fallback owner (typically the admin user). Inactive Odoo users cannot be assigned as owners — they must be activated or the record routed to an active user.
MeasureSquare
Custom Field (any object)
Odoo CRM
x_{fieldname} on target model
1:1MeasureSquare custom fields on Contact, Company, Deal, or Task require manual creation in Odoo Studio before migration runs. We export the full custom field list from MeasureSquare including pick-list values and field types (text, number, date, pick-list) and deliver a setup plan naming the exact Odoo Studio field to create per custom field. Pick-list fields require value-by-value mapping if Odoo's default pick-list values differ from MeasureSquare's.
MeasureSquare
Quote / Sales Order
Odoo CRM
sale.order
1:1MeasureSquare quotes and sales orders map to Odoo sale.order. The quote total, line items, and customer reference migrate as order lines on sale.order. MeasureSquare-specific fields (pricing tier, bid template, change order flag) become custom fields on sale.order or sale.order.line. Product lines that reference MeasureSquare product database items are linked to Odoo product.product by SKU match or flagged for manual product re-creation in Odoo.
MeasureSquare
Lead Source / Referral
Odoo CRM
source_id on crm.lead
1:1MeasureSquare lead source (referral channel, marketing campaign tag) maps to Odoo source_id on crm.lead via value_mapping. Odoo stores lead sources as utm.source records. If MeasureSquare uses custom source names not in Odoo's default list, we create matching utm.source records during migration and link them by name. Source attribution history is preserved as a custom field if the utm model is not active in the target Odoo instance.
| MeasureSquare | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | res.partner1:1 | Fully supported | |
| Company | res.partner1:1 | Fully supported | |
| Deal / Pipeline | crm.lead1:1 | Fully supported | |
| Pipeline Stage | crm.stage1:1 | Fully supported | |
| Task | project.task1:1 | Fully supported | |
| Note / Attachment | ir.attachment1:1 | Fully supported | |
| Owner / User | res.users1:1 | Fully supported | |
| Custom Field (any object) | x_{fieldname} on target model1:1 | Fully supported | |
| Quote / Sales Order | sale.order1:1 | Fully supported | |
| Lead Source / Referral | source_id on crm.lead1: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.
MeasureSquare gotchas
MeasureSquare 8 requires Windows — Mac users cannot run the core product
Product catalog version conflicts break cloud sync
Proprietary project file format resists standard ETL extraction
Cloud pricing tiers gate storage and feature access
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 MeasureSquare data model and Odoo schema in parallel
We extract the full MeasureSquare object inventory via their REST API (contacts, companies, deals, tasks, notes, attachments, custom fields, and product databases) and simultaneously audit the target Odoo instance in Developer mode to confirm exact field names, stage IDs, team IDs, and user records. This step produces the field mapping spreadsheet, flags missing Odoo stages or teams, and identifies custom fields that must be created in Odoo Studio before data moves. It typically takes 4–8 hours and requires read-only API credentials for MeasureSquare and Odoo admin access.
Create Odoo custom fields and configure pipeline stages
Before any data loads, your Odoo admin creates the custom fields identified in the audit (x_original_create_date, x_source_system_id, and any MeasureSquare custom properties). Pipeline stages from MeasureSquare are mapped to existing Odoo CRM stages or new stages are created in Settings > CRM > Stages. If MeasureSquare uses multiple pipelines, we configure corresponding crm.team records in Odoo so stage values scope correctly per team. This step is the longest planning step — once Odoo's schema matches MeasureSquare's object structure, data loading runs without schema mismatch errors.
Resolve owners and resolve partner relationships
We match MeasureSquare owner IDs to Odoo res.users by email address. Unmatched owners are flagged with the owner name and email so your Odoo admin can either invite them as Odoo users or designate a fallback owner. Partner relationships are reconstructed: MeasureSquare contacts linked to companies become res.partner records with parent_id pointing to the company partner. Contacts with multiple company associations use the most recently modified company as the primary parent_id, and the secondary companies are recorded in a custom field or flagged for manual verification in Odoo's Account Contacts tab.
Run a sample migration with field-level diff
A representative slice — typically 100–300 records across contacts, companies, deals, and tasks — migrates first using the field mapping produced in the audit step. We generate a field-level diff between the MeasureSquare source values and the Odoo destination values so you can verify stage mapping, owner resolution, partner-parent relationships, and custom field population before the full run. Any mapping corrections are applied to the migration script before the full dataset moves. Sample migration with diff review is the gate before committing to the full run.
Execute full migration with delta-pickup window
The full dataset migrates via Odoo's XML-RPC API in dependency order: res.partner (companies first, then contacts), crm.lead (deals as opportunities), project.task (tasks), and ir.attachment (files and notes). A delta-pickup window of 24–48 hours captures any records modified in MeasureSquare during the migration run so Odoo reflects MeasureSquare's final state at cutover. The audit log records every record written, the field values set, and any records skipped due to unresolved owners or missing Odoo stages. One-click rollback is available if reconciliation identifies data integrity issues post-migration.
Platform deep dives
MeasureSquare
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between MeasureSquare and Odoo CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across MeasureSquare and Odoo CRM.
Object compatibility
All 8 core objects map 1:1 between MeasureSquare and Odoo CRM.
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
MeasureSquare: Not publicly documented.
Data volume sensitivity
MeasureSquare 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 MeasureSquare to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your MeasureSquare 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 MeasureSquare
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.