CRM migration

Migrate from Prophet CRM to Odoo CRM

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

Prophet CRM logo

Prophet CRM

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

73%

11 of 15

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

Complexity

BStandard

Timeline

4-8 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from Prophet CRM to Odoo CRM is a structural migration driven by teams outgrowing the Outlook-only dependency and seeking a modular ERP backbone. Prophet CRM stores all data embedded inside Microsoft Outlook with an OData API that has no bulk export endpoint, so we paginate through records in batches of 500 to 1,000 using OData skip and top parameters. We audit the Prophet department template schema before export because custom fields are scoped per department and may not appear in the default view. We sequence the export in dependency order (Companies first, then Contacts, then Opportunities, then Activities) to preserve relational links in Odoo. Custom fields, pipeline stages, and department assignments map to their Odoo equivalents through a pre-built Studio schema. We do not migrate Prophet Workflows or email templates as code; we deliver a written inventory for the customer's admin to rebuild in Odoo Server Actions and Automated Actions.

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

Prophet CRM logo

Prophet CRM

What's pushing teams away

  • Prophet CRM runs embedded inside Microsoft Outlook only, so teams needing a true web-based CRM, native mobile apps, or cross-platform access find themselves constrained by that tight integration dependency.
  • Feature limitations in reporting, forecasting dashboards, and third-party integrations push growing teams toward CRMs with broader ecosystems and more modern API capabilities.
  • The advanced features that power pipeline management and forecasting require more training investment than the basic interface suggests, leading to uneven team adoption and underutilization of the platform's capabilities.
  • The tight Outlook dependency means the CRM experience is directly tied to desktop Outlook performance, and slow refresh or loading issues inside Outlook directly degrade the CRM experience.

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

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

Prophet CRM

Company

maps to

Odoo CRM

res.partner (company type)

1:1
Fully supported

Prophet Company records map to Odoo res.partner records with is_company=True. Standard fields (name, street, city, state, country, phone, website, industry, employee_count, annual_revenue) map to their Odoo partner equivalents. The industry classification from Prophet maps to partner.category_id as tags if the customer's Prophet industry list is a picklist; otherwise it maps to a custom field x_prophet_industry. Company records are inserted first in the migration sequence so that Contact imports can resolve the parent company_id lookup.

Prophet CRM

Contact

maps to

Odoo CRM

res.partner (contact type)

1:1
Fully supported

Prophet Contact records map to Odoo res.partner with is_company=False and parent_id pointing to the mapped Company partner. We freeze the Outlook bidirectional contact sync before extraction and re-enable it post-import to prevent duplicates. The Prophet contact email address is used as the Odoo partner dedupe key. Prophet contact title, phone, mobile, function (job title), and address fields map to their Odoo equivalents. Owner (assigned rep) maps to Odoo user_id via email match against Odoo res.users.

Prophet CRM

Opportunity

maps to

Odoo CRM

crm.lead (type=opportunity)

1:1
Fully supported

Prophet Opportunity records map to Odoo crm.lead with type='opportunity'. The opportunity name maps to Odoo name, expected_revenue maps to planned_revenue, close_date maps to date_deadline, probability maps to probability, and description maps to description. Stage assignments migrate as stage_id by resolving the Prophet stage name against the Odoo stage sequence. Prophet owner maps to Odoo user_id via email match. Pipeline stage values are captured during scoping and pre-created in Odoo as stage records within the relevant team before migration begins.

Prophet CRM

Pipeline Stage

maps to

Odoo CRM

crm.stage

lossy
Fully supported

Prophet pipeline stages are configurable per department, meaning stage names vary across organizations and across Prophet departments. We capture the full stage list during the scoping audit (including per-department stage variations), create each stage as an Odoo crm.stage record within the customer's pipeline, and map the stage probabilities to Odoo probability percentages. Stage ordering is preserved by setting the Odoo sequence field. If Prophet stages are department-scoped, we assign the relevant Odoo crm.team to each stage record.

Prophet CRM

Department

maps to

Odoo CRM

crm.team

lossy
Fully supported

Prophet departments are a first-class concept with custom field templates and configurable cross-department read/write access. We map each Prophet department to an Odoo crm.team record. Department assignments on records (Contact.owner_department, Opportunity.department) migrate as the Odoo team_id reference. Team members (users in the Prophet department) map to crm.team.member_ids via Odoo user_id email match. Custom field schema variations per department require the custom field audit step before migration to ensure all department-specific fields are represented in Odoo.

Prophet CRM

Activity: Email

maps to

Odoo CRM

mail.message

1:1
Fully supported

Prophet email tracking engagements (sent emails, tracked opens and clicks) map to Odoo mail.message records with message_type='email'. The message is linked to the parent crm.lead (Opportunity) and/or the related partner record via res_model='crm.lead' and res_id pointing to the migrated opportunity ID. Email body and subject transfer to body and subject fields. We do not migrate the full email thread chain as separate messages unless the customer specifically requests thread reconstruction; Prophet's OData export provides individual engagement records per email.

Prophet CRM

Activity: Call

maps to

Odoo CRM

crm.phone.call

1:1
Fully supported

Prophet call log engagements map to Odoo crm.phone.call records if the Odoo instance has the crm_phone module installed; otherwise they map to mail.activity records with activity_type='call'. Call duration, disposition (outcome), and direction (inbound/outbound) transfer to call_duration, disposition, and direction fields on crm.phone.call, or to custom fields on mail.activity. The related partner and opportunity are linked via res_model and res_id on the record.

Prophet CRM

Activity: Meeting / Appointment

maps to

Odoo CRM

calendar.event

1:1
Fully supported

Prophet appointment engagements map to Odoo calendar.event records. Start and end datetime preserve from Prophet, location transfers to location, and meeting title transfers to name. Attendees resolve by email match to Odoo res.partner records for contacts and crm.lead records for opportunities. If the Odoo instance has the calendar_sms or calendar module installed, the meeting links to the CRM record via calendar.event.res_id and res_model.

Prophet CRM

Activity: Task

maps to

Odoo CRM

mail.activity

1:1
Fully supported

Prophet task engagements (follow-up tasks) map to Odoo mail.activity records. Task subject maps to activity_type_id (or a custom activity type if the customer has configured one), due date maps to date_deadline, priority maps to priority, and outcome maps to a custom result field or note. Assignment (owner) resolves via email match to Odoo user_id. Activities are inserted after their parent Contact, Company, and Opportunity records to satisfy the res_model and res_id foreign key.

Prophet CRM

Custom Fields

maps to

Odoo CRM

ir.model.fields (custom)

lossy
Mapping required

Prophet custom fields on Companies, Contacts, and Opportunities (plus department-template-scoped fields) require a mandatory pre-migration audit. We enumerate every custom field name, data type, and which departments use which templates. In Odoo, custom fields are created via Odoo Studio or as Python-defined fields in a custom module. Field types map: Prophet text to Odoo char or text, Prophet number to Odoo float or integer, Prophet date to Odoo date, Prophet picklist to Odoo selection or many2one, and Prophet boolean to Odoo boolean. Department-scoped fields that do not appear in the default view are explicitly included in the export and created as custom fields in Odoo before import.

Prophet CRM

Attachment

maps to

Odoo CRM

ir.attachment

1:1
Fully supported

Prophet file attachments on Companies, Contacts, and Opportunities are extracted from the OData export as attachment metadata (filename, URL, mime_type, size) and stored in Odoo ir.attachment records linked via res_model and res_id to the migrated partner or crm.lead record. The actual file content is downloaded from Prophet's attachment URLs and uploaded to Odoo via xmlrpc/2/object using base64 encoding. If the attachment URL is inaccessible (expired token or deleted file), we record the attachment name and URL in a custom migration_notes field on the record for manual retrieval.

Prophet CRM

Owner / Assigned User

maps to

Odoo CRM

res.users

1:1
Fully supported

Prophet Owner (assigned rep) on Contact, Company, and Opportunity records resolves by email match against the Odoo res.users table. We extract every distinct Prophet owner referenced on records during scoping, match each by email, and provision any missing Odoo users into a reconciliation queue for the customer to resolve before migration. Active owners must have a matching Odoo user before record import proceeds because user_id is a required foreign key on crm.lead in Odoo.

Prophet CRM

Note

maps to

Odoo CRM

note.note

1:1
Fully supported

Prophet notes (free-text entries not tied to an engagement type) map to Odoo note.note records. The note body migrates as the Odoo note's content field. Notes linked to specific Contact, Company, or Opportunity records in Prophet migrate as note.note records with res_model and res_id linking to the corresponding Odoo partner or crm.lead. If the customer uses Prophet's internal messaging thread, those messages migrate as mail.message records.

Prophet CRM

Tag / Category

maps to

Odoo CRM

res.partner.category

lossy
Fully supported

Prophet tags on Contacts and Companies (industry tags, segment tags, custom labels) map to Odoo res.partner.category records as partner tags. Tags are created as category records in Odoo before the partner migration phase, and partner.category links are created via the Odoo partner category many2many field during partner import. Prophet tags that do not have an Odoo equivalent are flagged in the scoping report for the customer to confirm before creation.

Prophet CRM

Prophet Product (if used)

maps to

Odoo CRM

product.template

1:1
Fully supported

If the customer uses Prophet's product catalog for Opportunity line items, we map product records to Odoo product.template. Prophet product name, SKU, unit price, and description map to Odoo name, default_code (sku), list_price, and description. Product categories map to Odoo product.category. The migrated products are linked to Opportunity line items via the Odoo sale.order or crm.lead.line_ids mechanism depending on whether the customer uses Odoo CRM quoting.

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.

Prophet CRM logo

Prophet CRM gotchas

Medium

Prophet CRM renamed to Avid CRM mid-lifecycle

High

No bulk export API in Prophet CRM

Medium

Custom field audit required before export scoping

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 bulk export API in Prophet CRM requires paginated OData extraction

    Prophet CRM's OData API provides standard CRUD endpoints with no documented bulk or batch export endpoint. We paginate through the API using OData $skip and $top parameters in batches of 500 to 1,000 records, which increases extraction time for large databases. We sequence the export by object dependency order (Companies first, then Contacts, then Opportunities, then Activities) to preserve relational links and avoid orphan records. For customers with over 100,000 activity records, extraction can take multiple days and must be completed before the production migration window opens. The Outlook bidirectional sync must be frozen before extraction to prevent duplicates created by a live sync during the export.

  • Odoo Lead-to-Opportunity convert drops custom fields without Studio setup

    Odoo's native Lead-to-Opportunity convert action creates a partner record from Lead fields but does not automatically carry over custom fields from the Lead form to the created partner record. If Prophet Contacts or Opportunities carry custom fields that do not exist in the Odoo crm.lead schema, those values are silently dropped during convert. We handle this by pre-creating all custom fields in Odoo via Studio or a custom module before migration begins, and by using the Odoo XML-RPC API to write custom field values directly to the crm.lead and res.partner records rather than relying on the convert action for field population.

  • Odoo XML-RPC rate limits differ from REST conventions

    Odoo's xmlrpc/2/object endpoint has per-request rate limits that vary by Odoo hosting method (Odoo Online, On-Premise, Odoo.sh). Odoo Online typically enforces a request-per-minute limit that requires batch chunking (typically 100 records per request) with a small sleep between batches. We use Odoo's execute_kw with in_clause=ids for batch operations and apply exponential backoff on 403 (Access Forbidden) responses from the XML-RPC endpoint. Odoo On-Premise instances with direct database access can use PostgreSQL COPY commands for bulk inserts which bypass the XML-RPC throttling entirely, and we recommend this path for large migrations over 100,000 records.

  • Prophet department templates create schema variance that must be audited

    Prophet custom fields are created per object and per department template, meaning the effective field schema can vary by department even on the same object. A Contact record in the Sales department may have fields that do not appear in the default Contact view or in other department templates. Skipping the custom field audit step risks dropping department-specific fields that are invisible in the default Prophet UI but are present in the OData export. We include a mandatory custom field audit step in every Prophet CRM migration engagement, enumerating all field names, data types, and which departments use which templates, before any export begins.

  • Prophet CRM renamed to Avid CRM mid-lifecycle

    Avidian renamed Prophet CRM to Avid CRM. During migration scoping, the customer may reference the product under either name, and documentation, support tickets, and API references may split across both. We explicitly confirm the product version and current name with the customer at engagement kickoff. Searching for 'Prophet CRM' on Avidian's site redirects to Avid CRM, which we track as a known navigation gotcha. The OData API endpoint and base URL may differ between the old Prophet branding and the current Avid CRM version; we verify the correct API base URL during discovery.

Migration approach

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

  1. Discovery and custom field audit

    We audit the source Prophet CRM portal across tiers (Standard, Professional, Enterprise), all department templates, custom field schemas per object per department, pipeline and stage configurations, active owner list, engagement volume (email, call, meeting, task record counts), and any attachment storage volume. We pair this with Odoo edition confirmation: Odoo CRM Online (from ~$25/user/mo) for cloud-hosted; Odoo On-Premise for self-hosted. The discovery output is a written migration scope document including the custom field schema, stage mapping table, owner reconciliation list, and a go/no-go on the migration timeline based on data volume.

  2. Odoo Studio schema design and custom field creation

    We design the destination schema in Odoo using Studio or a custom module. This includes creating all custom fields discovered in the Prophet audit as typed Odoo fields on the relevant models (res.partner, crm.lead). We pre-create Odoo crm.team records for each Prophet department, crm.stage records for each Prophet pipeline stage (with correct sequence and probability), and res.partner.category tags for Prophet tag lists. Stage probabilities are set on each stage record. Schema is deployed into the destination Odoo environment before any data import begins.

  3. Outlook sync freeze and Prophet OData extraction

    We instruct the customer's admin to freeze the Outlook bidirectional contact sync before extraction begins to prevent the live sync from creating duplicate contact records during the export window. We then extract Prophet data via paginated OData requests in dependency order: Companies first (no foreign key dependencies), then Contacts (resolving parent_id against Companies), then Opportunities (resolving partner_id, user_id, and stage_id), then Activities (resolving res_model and res_id against the migrated records). Each object batch is validated for record count against the Prophet UI before proceeding.

  4. Odoo XML-RPC import in dependency order

    We import records into Odoo using xmlrpc/2/object with batch chunking of up to 100 records per request, applying rate-limit backoff on 403 responses. The sequence is: (1) res.partner.company records, (2) res.partner.contact records with parent_id resolved, (3) crm.team records for departments, (4) crm.stage records for stages, (5) crm.lead.opportunity records with user_id and partner_id resolved, (6) mail.message and mail.activity records with res_model and res_id pointing to the migrated records, (7) calendar.event records, (8) ir.attachment records with base64-encoded file content, (9) note.note records. Owner resolution (user_id) is validated before step 5.

  5. Reconciliation and validation

    We produce a row-count reconciliation report for each object, comparing the Prophet source count against the Odoo destination count. We flag any records rejected during import (due to validation rule failures, missing required fields, or type mismatches) and surface them to the customer for correction in Prophet before a correction run. We spot-check 25-50 migrated records manually against the Prophet source for field-level accuracy. Any attachment that could not be downloaded is flagged in the migration notes with the original URL for manual retrieval.

  6. Cutover, delta migration, and Workflow rebuild handoff

    We freeze Prophet writes during cutover, run a final delta migration of any records modified during the migration window, then re-enable the Outlook sync (if applicable) and designate Odoo as the system of record. We deliver a written inventory of all Prophet Workflows, automations, and email templates that do not migrate to Odoo, with a mapping to Odoo Server Actions and Automated Actions for the customer's admin or Odoo partner to rebuild. We support a one-week hypercare window for reconciliation issues. We do not rebuild Prophet Workflows as Odoo Server Actions inside the migration scope; that is a separate engagement.

Platform deep dives

Context on both ends of the pair

Prophet CRM logo

Prophet CRM

Source

Strengths

  • Embeds directly inside Microsoft Outlook with no separate application or browser tab required for daily CRM use.
  • Minimal training requirement for Outlook-native teams, with a straightforward UI for entering and viewing customer records.
  • Built-in sales pipeline management, opportunity tracking, forecasting, and analytics dashboards in higher tiers.
  • Group email sending with automated email and appointment tracking keeps all customer-facing activity within Outlook.

Weaknesses

  • The tight Outlook dependency limits access to desktop Outlook users, with no true web-based CRM interface or full-featured mobile app.
  • Reporting, forecasting, and analytics are basic compared to standalone CRM platforms, especially at the Standard tier.
  • The platform occupies a relatively small CRM market share, which limits available third-party integrations and community resources.
  • Advanced features like department templates, custom fields, and cross-department access require an initial learning investment and admin configuration.
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. 2 of 8 objects need a mapping; the rest are 1:1.

B

Overall complexity

Standard migration

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

  • Object compatibility

    B

    2 of 8 objects need a mapping; the rest are 1:1.

  • 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

    Prophet CRM: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

Walk through your Prophet 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 four and eight weeks for accounts under 15,000 Contacts and 3,000 Opportunities with a single department template and no custom objects. Migrations with multi-department Prophet templates, large engagement histories (over 300,000 activity records), or adjacent Odoo module scope (moving CRM alongside Odoo Accounting, Inventory, or Sales) move to ten to sixteen weeks because of Odoo Studio schema buildout, XML-RPC batch sequencing, and the custom field audit requirement per department.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Prophet 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