CRM migration

Migrate from Metis CRM to Odoo CRM

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

Metis CRM logo

Metis CRM

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

75%

9 of 12

objects map 1:1 between Metis CRM and Odoo CRM.

Complexity

BStandard

Timeline

3-5 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from Metis CRM to Odoo CRM is a structural migration from a CSV-export-only client management platform to a modular open-source ERP with a REST API. Metis organizes data around a client-centric model with Clients, Opportunities, Jobs, People, Timesheets, and Expenses as the primary zones; Odoo uses res.partner as the unified contact/account object, crm.lead for pipeline opportunities, project.project for job tracking, and hr_expense for expense reimbursement. Since Metis publishes no public REST API, all extraction runs through per-zone CSV exports, and we handle receipt images as a parallel file transfer. We sequence the migration starting with parent records (Clients, People) before child records (Opportunities, Jobs, Timesheets) to preserve relationships. Orphan time entries without a linked Job and resourcing report views (which are filtered views, not transactional objects) require explicit handling decisions from the customer during scoping. We do not migrate automations, workflows, or reporting configurations; these are documented for the customer's Odoo admin to rebuild in Odoo's studio environment.

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

Metis CRM logo

Metis CRM

What's pushing teams away

  • Teams outgrow the platform when they need deeper marketing automation, advanced multi-pipeline reporting, or CRM features beyond basic sales pipeline management.
  • Lack of a documented public API limits integration options, forcing teams to manual exports or workarounds that become unsustainable at scale.
  • Project-heavy teams report that job costing and resourcing features are functional but lack the depth of dedicated project management tools.
  • Small teams report that pricing for multiple users adds up, especially when the feature set overlaps with cheaper standalone tools for specific use cases like time tracking.

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

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

Metis CRM

Clients

maps to

Odoo CRM

res.partner

1:1
Fully supported

Metis Client records map to Odoo res.partner with company_type=company. We extract client name, address fields, contact details, and any custom client properties from the Clients zone CSV. The res.partner record is the parent object for all subsequent imports; we create partners before People to satisfy the customer relationship on any individual contact records that reference a client.

Metis CRM

People

maps to

Odoo CRM

res.partner

1:1
Fully supported

Metis People records map to Odoo res.partner with company_type=person, linked to a parent company partner when a client association exists. Role, contact details, and related client references migrate as custom fields or tags on the partner record. People records that represent the same individual as a client contact (e.g., the primary client contact) are deduplicated against the client partner by email match.

Metis CRM

Opportunities

maps to

Odoo CRM

crm.lead

1:1
Fully supported

Metis Opportunities map to Odoo crm.lead with type=opportunity. Stage name from Metis maps to stage_id, deal value maps to planned_revenue, and client association maps to partner_id via the Client partner lookup. We configure Odoo CRM pipeline stages to match Metis opportunity stages before migration, and probability percentages are set per stage during schema setup.

Metis CRM

Jobs

maps to

Odoo CRM

project.project

1:1
Fully supported

Metis Jobs map to Odoo project.project with the client mapped to partner_id and job status mapped to project state. Job costing fields from Metis migrate as custom project fields or product-linked analytic accounts. We sequence Jobs migration after Clients so that partner_id lookups resolve on first pass rather than requiring a second reconciliation pass.

Metis CRM

Timesheets

maps to

Odoo CRM

account.analytic.line

1:1
Mapping required

Metis Timesheet entries map to Odoo account.analytic.line with date, unit_amount (hours), and user_id resolved from the People record. We link timesheet lines to project_id (from the associated Job) where a Job association exists. Timesheet entries without a Job association are flagged as orphans in the pre-migration audit and presented to the customer for a mapping decision: assign to a default project, create placeholder projects, or exclude.

Metis CRM

People Expenses

maps to

Odoo CRM

hr_expense

1:1
Mapping required

Metis People Expenses map to Odoo hr_expense with amount, date, category, and description fields. Receipt images are stored as separate files in the Metis export and migrate as hr_expense attachment records linked to the expense sheet. We handle receipt files as a parallel file transfer and flag each expense record with a re-attachment confirmation note in the migration log.

Metis CRM

Central Expenses

maps to

Odoo CRM

account.move

1:1
Mapping required

Metis Central Expenses (agency-level overhead costs) map to Odoo account.move as vendor bills or journal entries depending on the expense category. Receipt files for Central Expenses migrate as attachments on the account.move record. Central Expenses that represent recoverable costs against a client may alternatively map to hr_expense sheets if the Odoo expense approval workflow applies.

Metis CRM

Opportunity Stage

maps to

Odoo CRM

crm.stage

lossy
Fully supported

Metis opportunity stages are configured in Odoo CRM as crm.stage records within the appropriate sales team. We map each Metis stage name to a corresponding Odoo stage with matching sequence order and probability percentage. Stage configuration is completed before opportunity migration begins so that stage_id references resolve during the opportunity import.

Metis CRM

Job Status

maps to

Odoo CRM

project.project state

lossy
Fully supported

Metis job status values (e.g., Active, Completed, On Hold, Cancelled) map to Odoo project state values or project.stage records. We configure project stages during the schema design phase to match the customer's operational workflow before job data is imported.

Metis CRM

Resourcing Report

maps to

Odoo CRM

Custom report or project.task

lossy
Mapping required

Metis Resourcing Reports are filtered views combining People availability with Job assignments, not transactional records. We do not migrate resourcing reports as data. Instead, we extract the underlying People and Job assignment data and recommend rebuilding the resourcing view as an Odoo custom report using Odoo Studio or as a project.task-based allocation matrix. The customer decides on the preferred approach during scoping.

Metis CRM

Xero-friendly People Expenses

maps to

Odoo CRM

Not migrated

1:1
Not supported

The Xero-friendly People Expenses export is a destination-format variant designed for direct Xero import, not a general migration source format. We do not use this export as our source. Standard People Expenses CSV is the migration source, and Xero mapping is handled as a destination-side transformation if the customer also migrates to Odoo Accounting.

Metis CRM

Owner (People with role)

maps to

Odoo CRM

res.users

1:1
Fully supported

Metis People records with a staff role map to Odoo res.users by email match. We resolve every distinct owner referenced on Opportunities, Jobs, and Timesheets against the Odoo user table. Any Metis owner without a matching Odoo user is held in a reconciliation queue for the customer's admin to provision before record import continues.

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.

Metis CRM logo

Metis CRM gotchas

High

No public API forces CSV-only migration paths

Medium

Receipt images exported as separate files outside the main CSV

Medium

Orphan time entries without a linked Job

Low

Xero-friendly export is a destination format, not a source object

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

  • No public API forces CSV-only extraction from Metis

    Metis CRM publishes no REST API for programmatic access. All data extraction runs through per-zone CSV exports from the Metis help center (Clients, Opportunities, Jobs, People, Timesheets, Expenses). We cannot run real-time sync jobs, validate against live data, or perform incremental delta imports. Migration speed is bounded by CSV chunk sizes and manual export steps. We coordinate with the customer to export each zone cleanly, validate column headers against the expected schema, and flag any missing columns before ingestion begins.

  • Receipt images migrate as separate files outside the main data chunk

    Both People Expenses and Central Expenses in Metis store receipt images as linked files rather than embedded data in the CSV. The CSV export captures the expense record but not the image file. We run a parallel file transfer for receipt attachments and link each file to the corresponding hr_expense or account.move record in Odoo using Odoo's attachment API. Customers must verify receipt images post-migration and flag any missing files for re-upload.

  • Orphan time entries without a linked Job require explicit mapping decisions

    Timesheet exports may contain entries logged against a person without a Job association. These orphan entries cannot be mapped to a project in Odoo without a project_id reference on the account.analytic.line record. We flag every unlinked time entry in the pre-migration audit and present three options: assign to a designated default project, create placeholder project records for each orphan, or exclude from migration. The customer's choice is documented and applied before the timesheet phase begins.

  • Resourcing reports are views, not transactional data

    Metis Resourcing Reports are filtered views combining People availability with Job assignments rather than underlying transactional records. The report export captures the view output, not the source timesheet or job allocation data. We do not migrate resourcing report views as data. Instead, we extract the underlying People and Job data and recommend rebuilding the availability matrix as an Odoo custom report using Odoo Studio or as a project.task allocation view. This is documented in the migration handoff.

  • Metis zone field names may vary between tenants

    Metis CSV exports use zone-specific column headers that can vary if the tenant has renamed or added custom fields within a zone. We validate the CSV column headers against the expected schema during ingestion and flag any unmapped columns. Custom fields in Metis are mapped to Odoo custom fields on the equivalent model. Fields that exist in Metis but have no Odoo equivalent are flagged for the customer's admin to configure post-migration if needed.

Migration approach

Six steps for a successful Metis CRM to Odoo CRM data migration

  1. Discovery and zone export coordination

    We audit the Metis account across all zones (Clients, Opportunities, Jobs, People, Timesheets, Expenses) to establish record counts, identify custom fields, and assess data quality. We coordinate with the customer to export each zone as a clean CSV from the Metis help center, validating column headers and flagging any renamed or missing fields. We also extract receipt image files from the Expenses zone for parallel transfer. The discovery output is a written scope document, a Metis field-to-Odoo field mapping draft, and an orphan time entry report.

  2. Schema design and Odoo module planning

    We design the destination schema in Odoo. This includes configuring CRM pipeline stages to match Metis opportunity stages, provisioning project.project stages to match Metis job statuses, configuring hr_expense sheet approval workflows, and planning any custom fields needed to carry Metis-specific data (e.g., client cost codes, job costing fields). We recommend which Odoo apps to install (CRM, Project, Timesheet, Expenses, and optionally Accounting) and whether Odoo Community or Enterprise is the appropriate destination edition based on the customer's module requirements.

  3. Sandbox migration and reconciliation

    We run a full migration into an Odoo test database using production-like data volume. The customer's team reconciles record counts (Clients in, People in, Opportunities in, Jobs in, Timesheets in, Expenses in), spot-checks 25-50 records against the Metis source, and validates that parent-record lookups (partner_id on opportunities, project_id on timesheets) resolve correctly. Orphan time entries are resolved according to the customer's chosen strategy from the scoping phase. Any mapping corrections happen in the test environment before production migration begins.

  4. Owner and user reconciliation

    We extract every distinct owner referenced on Opportunities, Jobs, and Timesheets and match by email against the Odoo destination's res.users table. Owners without a matching user go to a reconciliation queue. The customer's Odoo admin provisions any missing users (active or inactive depending on whether the original Metis user is still active). Migration cannot proceed past this step because timesheet lines, opportunity assignments, and project allocations all require a valid user_id in Odoo.

  5. Production migration in dependency order

    We run production migration in record-dependency order: res.partner records for Clients (first), res.partner records for People linked to Clients (second), crm.lead opportunities with partner_id and user_id resolved, project.project records with partner_id resolved, account.analytic.line timesheet entries with project_id and user_id resolved, hr_expense sheets with receipt attachments linked, and account.move central expense entries. Each phase emits a row-count reconciliation report before the next phase begins.

  6. Cutover, validation, and automation handoff

    We freeze Metis writes during the cutover window, run a final delta migration of any records modified during the migration window, then enable Odoo as the system of record. We deliver a written inventory of Metis automation equivalents for the customer's Odoo admin to rebuild using Odoo Studio or custom module development, including CRM automation rules, stage-change triggers, and timesheet approval workflows. We do not rebuild automations as code inside the migration scope; that is a separate engagement or an internal admin task.

Platform deep dives

Context on both ends of the pair

Metis CRM logo

Metis CRM

Source

Strengths

  • Unified CRM, project management, and time tracking for professional services workflows
  • Per-zone CSV export capability gives clean data extraction points for migration
  • Client-centric data model with Opportunities, Jobs, People, and Timesheets as first-class objects
  • Resource management and resourcing reports for tracking team utilization across jobs
  • Affordable positioning for freelancers, agencies, and SMBs without enterprise overhead

Weaknesses

  • No documented public REST API — all migrations rely on CSV zone exports
  • No clear pricing page or published tier structure in available sources
  • Receipt images and attachments stored as separate files outside the primary data export
  • Resourcing reports are view exports, not transactional objects — underlying data must be reconstructed
  • Limited integrations compared to established CRM platforms
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 Metis CRM and Odoo CRM.

B

Overall complexity

Standard migration

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

  • Object compatibility

    A

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

    Metis CRM: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

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

Book a free 30 minute consultation

Most migrations land between three and five weeks for accounts under 2,000 Clients, 3,000 Opportunities, and 500 Jobs with no orphan time-entry resolution complexity. Migrations with high timesheet volume (over 10,000 rows), multiple orphan entry resolution decisions, receipt image re-attachment for over 200 expenses, or a multi-company Odoo setup move to seven to eleven weeks because of CSV parsing overhead, parent-record lookup resolution across project and expense modules, and extended UAT sign-off cycles.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Metis CRM.
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