CRM migration

Migrate from Factoreal to Odoo CRM

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

Factoreal logo

Factoreal

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

54%

7 of 13

objects map 1:1 between Factoreal and Odoo CRM.

Complexity

BStandard

Timeline

3-5 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from Factoreal to Odoo CRM is a structural migration, not a record copy. Factoreal organizes data around Contacts, Segments, Campaigns, and Automations with a marketing-first data model and built-in e-commerce tracking; Odoo CRM uses a res.partner model where individual contacts and company records are both stored as partners with a company_type flag, and pipeline opportunities live in crm.lead. The critical migration decision is how Factoreal Contacts relate to Companies and whether the customer needs Odoo Sales and Inventory apps for order history. We extract all Factoreal data via CSV export cycles (no REST API is documented publicly), resolve the partner-type classification for each record, map campaign structure to CRM pipeline stages and tags, and migrate e-commerce orders to sale.order if the Sales app is in scope. We do not migrate automation workflows as executable rules; we deliver a written workflow inventory with Odoo automated-action recommendations for your admin to rebuild.

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

Factoreal logo

Factoreal

What's pushing teams away

  • The platform lacks a documented public REST API, which limits automation capabilities and makes integrations with custom tooling difficult to maintain over time.
  • Customer base is small — only two verified reviews on major platforms as of early 2026 — which means limited community resources, third-party integrations, and peer knowledge to draw on.
  • Some customers report that switching contacts from a prior contact management platform required manual data cleaning and was a multi-step process despite support team involvement.
  • The flat-rate pricing model may become less attractive as teams scale beyond the feature set included at the $89 tier, with no clear upgrade path documented publicly.

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

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

Factoreal

Contact

maps to

Odoo CRM

res.partner

1:1
Fully supported

Factoreal contacts map to Odoo res.partner records. We determine partner_type (individual vs company) by checking Factoreal's contact type or company association field. If a contact is associated with a Factoreal Company record, we link it via parent_id to the corresponding partner. The Factoreal contact ID is stored in a custom field (x_factoreal_id) as a dedupe key. The original HubSpot lifecycle stage analog (if used) is preserved in a custom stage field on the partner for audit and segmentation continuity. Email, phone, address, and custom field values migrate per the field mapping defined during discovery.

Factoreal

Company

maps to

Odoo CRM

res.partner (company_type = company)

1:1
Fully supported

Factoreal company records map to Odoo res.partner with company_type set to company. The domain name from Factoreal becomes the partner's website field and serves as a dedupe key. Companies are imported before contacts so that the parent_id lookup is satisfied at the moment of contact insert. If two Factoreal companies share the same domain, they are deduplicated and consolidated into one partner record with a note documenting the merge.

Factoreal

Deal

maps to

Odoo CRM

crm.lead

1:1
Fully supported

Factoreal deals map to Odoo crm.lead records with type set to opportunity. The deal name becomes the lead name, the deal amount maps to expected_revenue, and dealstage maps to the nearest Odoo stage_id via a stage mapping table built during discovery. Owner assignment migrates by email-to-user resolution. Closed-won and closed-lost status from Factoreal maps to the equivalent Odoo stage in the target pipeline.

Factoreal

Campaign

maps to

Odoo CRM

crm.lead (UTM fields + tag)

1:many
Fully supported

Factoreal campaigns have no direct Odoo CRM equivalent; we reconstruct them as crm.lead records with utm_source, utm_medium, and utm_campaign fields set from the campaign name, and a tag (e.g., campaign-name) applied for grouping. Campaign send history and aggregate engagement metrics are stored as a custom field block on each lead so that individual open and click records can be referenced in reporting. This approach preserves campaign context but not the granular per-campaign engagement analytics that Factoreal's campaign dashboard provides.

Factoreal

Automation

maps to

Odoo CRM

Documentation (no executable migration)

lossy
Fully supported

Factoreal automation workflows define trigger conditions and multi-step action sequences across email, SMS, and WhatsApp channels. Odoo automated actions are scoped to single-record triggers (on-create, on-write, on-delete) and do not support the branching, delays, and cross-channel orchestration that Factoreal workflows implement. We capture the full workflow graph — triggers, conditions, delays, and actions — in a written specification document with an Odoo automated-action and Studio rule recommendation per workflow. The customer's Odoo admin rebuilds the workflow logic post-migration; we do not write Odoo automated actions as part of the migration scope.

Factoreal

Email Template

maps to

Odoo CRM

mail.template

1:1
Fully supported

Factoreal email templates with HTML content and merge field placeholders migrate to Odoo mail.template. We extract template HTML and convert Factoreal merge field syntax (e.g., {{contact.first_name}}) to Odoo's QWeb field interpolation format (object.partner_id.name or {{object.partner_id.name}} depending on the template engine version). Visual rendering differences between Factoreal's email builder and Odoo's QWeb renderer are documented as a post-migration review item. Static assets (logos, images) embedded in templates are exported as file attachments and re-uploaded to Odoo's document management system.

Factoreal

Tag

maps to

Odoo CRM

res.partner (x_factoreal_tags field)

lossy
Fully supported

Factoreal contact tags are stored as comma-separated values in a custom Char field (x_factoreal_tags) on the res.partner record. A dedicated Odoo tags infrastructure (mail.followers or crm.tag) requires additional module installation and configuration and is not included in the base CRM migration scope unless scoped during discovery. The customer chooses between plain-text storage and a formal tag model before migration begins.

Factoreal

Custom Field

maps to

Odoo CRM

ir.model.fields (pre-create) + migration

lossy
Fully supported

Factoreal custom fields on contact and company records require pre-creation in Odoo before their values can be imported. We identify all Factoreal custom field definitions during discovery, select the nearest Odoo field type (Char, Selection, Integer, Float, Date, etc.), create the field via Odoo Studio or XML during the schema design phase, then import values per record during the data import phase. Fields with a many-to-many relationship (e.g., a contact tagged with multiple categories) are stored as Char with comma-separated values unless the customer requests a dedicated Many2many field setup.

Factoreal

SMS / WhatsApp Message History

maps to

Odoo CRM

mail.message (sms / whatsapp subtype)

1:1
Mapping required

Factoreal SMS and WhatsApp message logs — send timestamp, direction, content, and recipient — migrate to Odoo mail.message records with a custom subtype (sms or whatsapp) so that channel history is visually distinguishable in the Odoo Discuss timeline. Delivery status from Factoreal (sent, delivered, failed) is stored as a custom field on the message record because Odoo mail.message does not expose a standard delivery status field. Inbound and outbound direction is preserved. Message content is stored as body text in mail.message.

Factoreal

Social Marketing Data

maps to

Odoo CRM

crm.lead (UTM fields)

lossy
Mapping required

Factoreal social campaign metrics (impressions, engagement, clicks per post) are mapped to Odoo crm.lead records with utm_source set to the social channel name and utm_medium set to social. Individual post performance is stored as a custom field block because Odoo CRM does not have a native social post performance object. The customer reviews post-level metrics in Odoo's CRM reporting by filtering on the UTM source and date range.

Factoreal

E-commerce Data (Orders, Products)

maps to

Odoo CRM

sale.order + product.template

1:1
Mapping required

Factoreal order records and product SKUs migrate to Odoo sale.order and product.template only if the Odoo Sales and Inventory apps are in scope for this migration. The sale.order partner_id links to the corresponding res.partner contact; order lines map to sale.order.line with product_id, product_uom_qty, and price_unit preserved. Odoo CRM does not include order management by default, so the need for Sales app activation is confirmed during discovery scoping. If the Sales app is not activated, order and product records are excluded from migration scope with a written rationale delivered to the customer.

Factoreal

Segment

maps to

Odoo CRM

res.partner (filter criteria as x_segment_notes)

lossy
Fully supported

Factoreal segments are defined by filter rules on contact attributes and behavioral events. We export the full segment definition — name, filter criteria, and contact count at migration time — and store it as a custom text field (x_segment_notes) on each contact record that belonged to the segment. A companion Segment Definitions document lists each segment name, its rule logic, and the Odoo CRM filter or segmentation tool the admin can use to reproduce the segment in Odoo. Segments are not migrated as live segmentation rules.

Factoreal

Website Visitor

maps to

Odoo CRM

Not migratable

1:1
Fully supported

Factoreal website visitor session data — page views, visit frequency, browsing behavior — is cookie-based and tied to its own JavaScript embed. Session records cannot be exported as structured data and are not portable to Odoo or any external platform. We scope this as a known gap and recommend exporting aggregate metrics manually from Factoreal's reporting UI if historical web engagement data is needed in the destination. The customer documents the aggregate figures in Odoo's custom fields or a reporting spreadsheet post-migration.

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.

Factoreal logo

Factoreal gotchas

High

No public REST API for automated migration

High

Website visitor session data is not exportable

Medium

Contact migration required hands-on support in practice

Medium

Automation workflows do not migrate as executable rules

Low

Limited third-party integration ecosystem

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

  • Factoreal has no public REST API — all extraction is CSV-based

    Factoreal does not publish a REST API for developer access. All contact, deal, campaign, and behavioral data must be extracted via CSV exports generated from the application UI. There is no bulk endpoint, no webhook export, and no programmatic way to pull data at scale. We plan for CSV-based extraction cycles and advise customers to request a full data export early in the project so they can review the data shape before migration begins. This constraint extends the discovery phase compared to API-based migrations and requires explicit customer action to generate exports for each data type.

  • Factoreal contacts map to a single res.partner model in Odoo

    Odoo does not have separate Contact and Company objects; both are res.partner records distinguished by a company_type flag. Factoreal's separate Contact and Company structure means we must classify each record as individual or company at migration time and establish parent_id links between contacts and their associated company partner. Contact deduplication is required because a Factoreal export may contain the same person under multiple records. We resolve the partner_type classification using Factoreal's contact-type field or company association data and run deduplication against email as the primary key before importing.

  • Campaigns require Odoo-native reconstruction as CRM leads

    Factoreal campaigns hold subject lines, send history, and engagement metrics for email, SMS, and WhatsApp channels. Odoo CRM has no native campaign object; campaigns must be reconstructed as CRM leads with UTM fields (utm_source, utm_medium, utm_campaign) and a tag applied per campaign name. Aggregate engagement metrics (open rate, click rate) from Factoreal are stored as custom fields on each lead. Individual send-level records for SMS and WhatsApp migrate as mail.message but are not linked to a campaign entity. The customer's admin creates pipeline stages or sales team filters in Odoo to group leads by their original campaign for reporting purposes.

  • Odoo automations cannot replicate Factoreal multi-step workflows

    Factoreal automation workflows support branching conditions, time delays, and cross-channel action sequences (email followed by SMS followed by a task). Odoo's Automated Actions are limited to single-record triggers on create, write, or delete with simple field updates and server actions. Studio-based rules offer a broader UI but still lack the multi-step branching and cross-channel orchestration that Factoreal workflows provide. We document the full Factoreal workflow graph as a written specification and deliver it during the handoff phase; the customer rebuilds equivalent logic in Odoo Studio as a parallel workstream. This limitation is inherent to Odoo CRM and is not resolvable through configuration.

  • Order and product data require Odoo Sales app activation

    Factoreal includes order and product data as part of its standard data model without additional modules. Odoo CRM does not include order management; sale.order and product.template are part of the Odoo Sales app, which requires separate activation and licensing. If the customer wants to preserve order history and product SKUs, we must confirm Sales app scope during discovery and factor in the additional configuration time and approximately $48 per month in Odoo subscription cost for Sales plus Inventory apps. Excluding order data from scope is a valid decision but must be explicit in the signed migration scope.

Migration approach

Six steps for a successful Factoreal to Odoo CRM data migration

  1. Discovery and Factoreal export coordination

    We audit the Factoreal account across contacts, companies, deals, campaigns, automations, segments, and e-commerce data (orders and products). Because Factoreal has no REST API, the customer must generate CSV exports from the application UI for each data type. We provide a structured export checklist specifying which fields to include, which export order to follow (companies before contacts to satisfy parent_id lookups), and the file naming convention to use. We also collect a representative sample export to validate the data shape and identify missing required fields, duplicates, and encoding issues before the full export is requested. The discovery output is a written scope document confirming which data types are in scope, which are excluded, and which are documented as not migratable.

  2. Odoo schema design and pipeline configuration

    We configure the destination Odoo CRM instance before any data is imported. This includes activating the CRM app (and Sales app if order history is in scope), designing the pipeline stages to mirror Factoreal deal stages or campaign categories, creating custom fields on res.partner and crm.lead that correspond to Factoreal custom fields identified during discovery, and defining the contact-to-company parent_id relationship rules. If Odoo Sales is in scope, we also pre-create product.template records and set up the sale.order import template. All schema configuration is validated in an Odoo test database before the production import begins. We provide a schema design document for the customer's Odoo admin to review and approve before proceeding.

  3. Data preprocessing and partner deduplication

    We preprocess each Factoreal CSV export before Odoo import. Steps include encoding normalization (UTF-8 enforcement), duplicate detection on email as the primary key (merging duplicates with a completeness-based master-record rule), date format standardization, and phone number formatting. We apply the contact-to-company classification logic to assign company_type on res.partner and resolve parent_id links between contacts and their Factoreal company. Automations are parsed into a written specification document with trigger-condition-action steps enumerated per workflow. E-commerce orders are mapped to sale.order format with line items restructured to Odoo's order-line schema. Preprocessed files are validated against the Odoo import template format before staging import begins.

  4. Staging migration and reconciliation

    We run a full migration into an Odoo staging environment using production-like data volume. The customer reviews 25-50 randomly sampled records per object type against the source Factoreal exports, verifying field values, parent-child relationships, and activity timelines. We run row-count reconciliation after each import phase (partners, leads, orders, messages) and resolve any discrepancies before the production migration. Any field mapping corrections, deduplication rule adjustments, or data quality exceptions are documented and applied to the production import plan. The customer formally signs off the staging results before production migration begins.

  5. Production migration in dependency order

    We run production migration in record-dependency order: res.partner company records first (as parent references), res.partner individual contacts second (with parent_id resolved), crm.lead deals and campaign-leads third (with user_id resolved by email match), sale.order and product.template fourth (if Sales app is in scope), mail.message for SMS and WhatsApp history fifth, and custom field values last. Each phase emits a row-count reconciliation report and a sample record validation checklist. Any Factoreal records modified during the migration window are delta-migrated in a final pass before cutover. Owner reconciliation queues any Factoreal owner without a matching Odoo user for the customer's admin to provision before the final phase resumes.

  6. Cutover, handoff, and automation rebuild support

    We freeze Factoreal write access during cutover, execute the final delta migration, validate critical record counts in Odoo, and confirm that all automations and integrations are live. We deliver the Automation Specification document listing every Factoreal workflow with its trigger, conditions, actions, and a recommended Odoo automated-action or Studio rule equivalent. We deliver a Reconciliation Report showing record counts by object, duplicates resolved, and records excluded with rationale. We offer a one-week hypercare window to resolve any post-cutover data issues raised by the sales or operations team. We do not rebuild Factoreal automations as Odoo automated actions; that work is documented for the customer's admin to execute as a separate, scoped effort.

Platform deep dives

Context on both ends of the pair

Factoreal logo

Factoreal

Source

Strengths

  • Unified omnichannel delivery across email, SMS, WhatsApp, and social from one dashboard.
  • E-commerce data (orders, products) is natively available without requiring a separate integration.
  • ML-driven customer insights are surfaced automatically from behavioral data.
  • Email builder is accessible to non-designers with reusable template management.
  • Website visitor tracking via cookie-based session monitoring is included.

Weaknesses

  • No publicly documented REST API limits programmatic access and third-party tooling.
  • Very small market footprint with minimal independent reviews or community resources.
  • Platform lacks transparency on tier-specific feature gating and upgrade paths.
  • E-commerce tracking is built-in but limited to Factoreal's own integration ecosystem.
  • Website visitor session data is not exportable for use in external BI tools.
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 Factoreal 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

    Factoreal: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

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

Book a free 30 minute consultation

Straightforward migrations with under 25,000 contacts, a single pipeline, and no e-commerce data typically land in three to five weeks. Migrations with multiple pipelines, large engagement histories (SMS, WhatsApp, emails), e-commerce order data requiring Odoo Sales app activation, or a large custom field inventory move to eight to twelve weeks. The primary timeline driver is the CSV preprocessing and deduplication work required because Factoreal has no REST API for automated extraction.

Adjacent paths

Related migrations to explore

Ready when you are

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