CRM migration

Migrate from MeasureSquare to Odoo CRM

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

MeasureSquare logo

MeasureSquare

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

100%

10 of 10

objects map 1:1 between MeasureSquare and Odoo CRM.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

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

MeasureSquare logo

MeasureSquare

What's pushing teams away

  • Windows-only desktop application creates a hard blocker for Mac-based teams and estimators who work across operating systems in the same firm.
  • Large commercial documents with 100+ pages cause performance degradation, with users reporting the software slows noticeably during complex multi-floor takeoffs.
  • Proprietary product database format complicates exits: the catalog is not a standard relational export and requires MeasureSquare's import/export tool or support assistance to move.
  • Steep learning curve on seaming patterns and layout controls: multiple reviewers report losing productivity in the first weeks before mastering the layout engine.
  • Product catalog version conflicts between MeasureSquare 8 and MeasureSquare Cloud cause sync failures that require manual troubleshooting and KB article steps to resolve.

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

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

maps to

Odoo CRM

res.partner

1:1
Fully supported

MeasureSquare 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

maps to

Odoo CRM

res.partner

1:1
Fully supported

MeasureSquare 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

maps to

Odoo CRM

crm.lead

1:1
Fully supported

MeasureSquare 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

maps to

Odoo CRM

crm.stage

1:1
Fully supported

MeasureSquare 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

maps to

Odoo CRM

project.task

1:1
Fully supported

MeasureSquare 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

maps to

Odoo CRM

ir.attachment

1:1
Fully supported

MeasureSquare 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

maps to

Odoo CRM

res.users

1:1
Fully supported

MeasureSquare 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)

maps to

Odoo CRM

x_{fieldname} on target model

1:1
Fully supported

MeasureSquare 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

maps to

Odoo CRM

sale.order

1:1
Fully supported

MeasureSquare 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

maps to

Odoo CRM

source_id on crm.lead

1:1
Fully supported

MeasureSquare 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.

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.

MeasureSquare logo

MeasureSquare gotchas

High

MeasureSquare 8 requires Windows — Mac users cannot run the core product

High

Product catalog version conflicts break cloud sync

Medium

Proprietary project file format resists standard ETL extraction

Medium

Cloud pricing tiers gate storage and feature access

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

  • Odoo XML-RPC API requires Developer mode to expose exact field names for mapping

    Odoo's external API (/xmlrpc/2/object) accepts writes using database column names, not UI labels. Most custom fields created in Odoo Studio appear with an x_ prefix in the database (e.g., x_original_create_date). Field metadata is only visible in Odoo when Developer mode is enabled under Settings > Dashboard > Developer Tools. We cannot resolve the exact destination field name without access to the target Odoo database in Developer mode — this is a pre-migration discovery step. Incorrect field names return a fault code 404 from the XML-RPC endpoint. We verify field names against your Odoo instance before writing any records.

  • Odoo crm.lead model handles both Leads and Opportunities — deal records need type='opportunity' set explicitly

    MeasureSquare Deals map to Odoo crm.lead, but Odoo defaults new crm.lead records to type='lead'. We must explicitly set type='opportunity' during import for every deal record, otherwise the records land in the Lead pipeline and not the Opportunity pipeline. Additionally, leads that have been converted to opportunities in Odoo are tracked differently — the original lead record remains and a new opportunity record is not created; instead the same crm.lead record's type changes. If MeasureSquare deals already represent closed or historical opportunities, we must set the crm.lead type to 'opportunity' and populate stage_id accordingly to avoid confusion with open leads in the pipeline view.

  • MeasureSquare product databases contain flooring-specific data that has no direct Odoo equivalent

    MeasureSquare stores product catalog records linked to flooring materials, vendor SKUs, pricing tiers, and unit-of-measure data used for takeoffs. These are not standard product.product records — they include estimating-specific fields (waste percentage, seam location, cut-sheet patterns) that Odoo's product.product model does not support natively. We surface these as crm.lead description text or custom fields, and flag the full product catalog for manual re-creation in Odoo product.product. If your team uses MeasureSquare's vendor pricing request tracking, those records must be rebuilt as purchase requisitions or purchase order templates in Odoo. We deliver an itemized product-catalog export from MeasureSquare to serve as the re-creation reference.

  • Odoo does not preserve original create dates during API import — a custom field is required for audit continuity

    When we write a crm.lead or res.partner record via Odoo's XML-RPC API, Odoo sets the record's create_date at write time. There is no API parameter to backdate create_date — it is set server-side by Odoo's ORM. Historical create dates from MeasureSquare (contacts, companies, deals, tasks) will show the migration timestamp in Odoo's Created field. We address this by creating an x_original_create_date custom Char or Datetime field on each migrated model and populating it with the original MeasureSquare createdate value during import. This preserves reporting continuity for teams that use create date for audit or historical analysis, but it requires the custom field to be created in Odoo Studio before migration runs.

  • MeasureSquare custom fields require manual pre-creation in Odoo Studio per object

    MeasureSquare allows custom fields on Contact, Company, and Deal without any developer mode requirement. Odoo requires either Developer mode access to view exact database column names or Studio access to create new fields. Each MeasureSquare custom field must be manually created as an x_ prefixed field in Odoo Studio before migration. We audit the full custom field inventory from MeasureSquare (field name, type, pick-list values) and deliver a field-creation checklist with exact Odoo Studio field names, types, and pick-list options. Fields not pre-created will be skipped with a warning in the migration log. This is a blocker — we cannot map to a field that does not exist in Odoo's schema at migration time.

Migration approach

Six steps for a successful MeasureSquare to Odoo CRM data migration

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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

Context on both ends of the pair

MeasureSquare logo

MeasureSquare

Source

Strengths

  • Specialized flooring takeoff engine with AI Autotakeoff 2.0 for accelerating manual measurement.
  • Integrated CRM connects takeoff estimates directly to sales pipelines, quotes, POs, and work orders.
  • Cloud sync enables real-time collaboration between field measurers using Mobile and office estimators.
  • Established QuickBooks Online and Xero integrations for post-sale accounting sync.
  • Multi-tier product editions serving retail, multi-family, commercial, and stone/tile verticals.

Weaknesses

  • Windows-only desktop application excludes macOS and Linux environments from the core workflow.
  • Performance degrades on large commercial documents exceeding 100 pages.
  • Product database uses a proprietary format that resists standard export without MeasureSquare's built-in tools.
  • CRM is tightly coupled to MeasureSquare's estimating workflow and does not function as a standalone contact management system.
  • API is invite-only with no public rate-limit documentation, limiting programmatic migration options.
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 MeasureSquare and Odoo CRM.

B

Overall complexity

Standard migration

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

  • Object compatibility

    A

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

    MeasureSquare: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

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 consultation

Most MeasureSquare-to-Odoo migrations complete in 48–72 hours for under 5,000 records. Larger datasets with 20,000+ records, more than 30 custom fields, or product-catalog re-creation work extend to 3–5 days. The longest single step is configuring Odoo stages and teams to match MeasureSquare pipeline structure — this is a manual Odoo admin task that happens before data moves. A delta-pickup window of 24–48 hours is added after the full run to capture any records modified during cutover.

Adjacent paths

Related migrations to explore

Ready when you are

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