CRM migration
Field-level mapping, validation, and rollback between FunnelMaker and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
FunnelMaker
Source
Odoo CRM
Destination
Compatibility
7 of 12
objects map 1:1 between FunnelMaker and Odoo CRM.
Complexity
BStandard
Timeline
4-6 weeks
Overview
Moving from FunnelMaker to Odoo CRM is a structural migration driven by FunnelMaker's absence of a public API and Odoo CRM's open-source extensibility and per-user pricing model. FunnelMaker provides no REST endpoint for programmatic export, so we work with its in-product CSV export tools to extract Contacts, Companies, Opportunities, and Activities before transforming and loading via Odoo's XML-RPC External API. Odoo CRM's External API is available only on Custom pricing plans; Standard plan customers must upgrade to access write API. We reconstruct FunnelMaker's drag-and-drop pipelines as Odoo CRM team pipelines with matching stage values, preserve lead scores as a custom Float field on the Partner model, and document drip campaign and workflow sequences for manual rebuild in Odoo's Automations or a third-party marketing automation app. Call recordings and transcription text do not migrate from FunnelMaker's built-in voice features.
Every standard and custom field arrives verified.
AI proposes the map; you confirm before any record moves.
Parent–child, lookups, and ownership stay linked.
Calls, emails, meetings — with original timestamps.
Documents, uploads, and inline notes move with the record.
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
Each row shows how a FunnelMaker 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.
FunnelMaker
Contact
Odoo CRM
Partner (res.partner)
1:1FunnelMaker Contact records map to Odoo res.partner with address-type roles (contact, invoice address, delivery address) preserved via partner_id and address_type fields. All standard fields (name, email, phone, website) map directly. FunnelMaker user-defined contact fields map to Odoo custom fields on res.partner. We set type=contact by default and preserve the FunnelMaker contact owner as a many2one to res.users via the assigned_user_id field.
FunnelMaker
Company
Odoo CRM
Company (res.partner with type=company)
1:1FunnelMaker Company records map to Odoo res.partner with type=company and child_contact records for individual contacts linked as children. The company name maps to partner.name, industry to industry_id, and domain (website) to website. Custom company-level fields from FunnelMaker migrate to custom fields on the res.partner record.
FunnelMaker
Opportunity
Odoo CRM
CRM Lead (crm.lead)
1:1FunnelMaker Opportunity records map to Odoo CRM Lead. FunnelMaker's pipeline stage maps to Odoo's stage_id with the pipeline mapped to a crm.team record. Expected revenue maps to Odoo planned_revenue; FunnelMaker's deal value maps to Odoo's amount_total if Products are present or stays as planned_revenue if standalone. Owner assignment resolves via email match to res.users.
FunnelMaker
Pipeline
Odoo CRM
CRM Team + Stage (crm.team, crm.stage)
lossyFunnelMaker's drag-and-drop pipelines map to Odoo crm.team records, each with its own stage sequence. We preserve FunnelMaker stage names, probabilities, and sequence order in Odoo stage records. The FunnelMaker pipeline-to-stage relationship migrates as a many2one on the Lead record. If FunnelMaker had multiple pipelines, each becomes a separate crm.team in Odoo.
FunnelMaker
Activity (calls, emails, tasks, notes)
Odoo CRM
Mail Message / Note (mail.message, note.note)
1:1FunnelMaker activity records (calls, emails, tasks, notes) map to Odoo mail.message records linked to the parent res.partner or crm.lead via model and res_id fields. Email content migrates as body HTML in mail.message; tasks migrate as mail.activity with activity_type_id resolved to Odoo's standard task types. Activity date and author preserve from FunnelMaker. Call duration and disposition migrate to custom fields on the mail.message record.
FunnelMaker
Lead Scoring
Odoo CRM
Custom Float field on Partner (x_lead_score)
lossyFunnelMaker lead scores are calculated using customizable rules. We migrate the numeric score value as a custom Float field (x_lead_score) on res.partner. The scoring rule logic is documented in a written reference sheet so the customer's admin can rebuild the scoring rules using Odoo Automations or a third-party scoring app. Score values themselves migrate without recalculation.
FunnelMaker
Drip Campaign
Odoo CRM
Automation / Email Campaign (mailing.mailing)
lossyFunnelMaker drip campaigns are email sequences tied to contact segments. We map campaign structure, step timing, and associated contact segments to Odoo Email Campaigns (mailing.mailing) with a written sequence map. Each drip step becomes a separate mailing record within the campaign. The Odoo Automations module (included in CRM) can replicate trigger conditions; we document the equivalent trigger logic for the admin to configure post-migration.
FunnelMaker
Workflow
Odoo CRM
Automation (base.action.rule)
lossyFunnelMaker workflow rules trigger CRM actions based on contact behavior. We document every active workflow during discovery as a written automation map covering trigger condition, filter criteria, time delay, and action type. Odoo's Automations module (CRM included) provides equivalent record-triggered and scheduled actions. We do not migrate workflow logic as code; the admin reviews the map and configures Odoo Automations manually using the documented equivalents.
FunnelMaker
Tag / Group
Odoo CRM
Tag (res.partner.category)
1:1FunnelMaker Tags and Groups segment contacts into lists. We map tag names to res.partner.category records in Odoo and create tag_ids many2many relations on the res.partner record during migration. Group memberships with hierarchy (FunnelMaker Groups contain sub-Groups) flatten to a flat tag list in Odoo since Odoo does not natively support tag hierarchy.
FunnelMaker
Custom Object
Odoo CRM
Custom Model (ir.model) / Custom Fields
lossyFunnelMaker unlimited custom objects map to Odoo custom fields on standard models (res.partner, crm.lead) when the custom object is contact-linked, or to a custom ir.model if it has standalone records. We inspect the FunnelMaker custom object schema during discovery, map field types to Odoo field types (char, float, integer, selection, many2one, etc.), and pre-create the Odoo schema before migration. Custom model ir.actions and views require Custom plan or Odoo Studio app.
FunnelMaker
Document / Signature Request
Odoo CRM
Attachment (ir.attachment) linked to document.model
1:1FunnelMaker document signature requests and stored documents migrate as Odoo ir.attachment records linked to the parent res.partner or crm.lead record via res_model and res_id. Document metadata (filename, create date, create uid) preserve. File content migrates where accessible; binary files requiring FunnelMaker-specific viewer are documented with a reference link for manual retrieval.
FunnelMaker
Owner (User)
Odoo CRM
User (res.users)
1:1FunnelMaker Owners (assigned to contacts, companies, opportunities) map to Odoo res.users by email match. We extract all distinct owner email addresses during scoping and match against the destination Odoo instance's user list. Any Owner without a matching Odoo user is held in a reconciliation queue for the admin to provision before record import. This is a required pre-condition before Opportunities can be imported with owner assignment.
| FunnelMaker | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | Partner (res.partner)1:1 | Fully supported | |
| Company | Company (res.partner with type=company)1:1 | Fully supported | |
| Opportunity | CRM Lead (crm.lead)1:1 | Fully supported | |
| Pipeline | CRM Team + Stage (crm.team, crm.stage)lossy | Fully supported | |
| Activity (calls, emails, tasks, notes) | Mail Message / Note (mail.message, note.note)1:1 | Fully supported | |
| Lead Scoring | Custom Float field on Partner (x_lead_score)lossy | Mapping required | |
| Drip Campaign | Automation / Email Campaign (mailing.mailing)lossy | Fully supported | |
| Workflow | Automation (base.action.rule)lossy | Fully supported | |
| Tag / Group | Tag (res.partner.category)1:1 | Fully supported | |
| Custom Object | Custom Model (ir.model) / Custom Fieldslossy | Fully supported | |
| Document / Signature Request | Attachment (ir.attachment) linked to document.model1:1 | Fully supported | |
| Owner (User) | User (res.users)1:1 | Fully supported |
Gotchas + challenges
Platform-specific issues from each side, plus the pair-specific challenges that don't show up on either platform's page on its own.
FunnelMaker gotchas
Contact tier limits are hard caps, not soft limits
No publicly documented API for direct export
Workflow and drip campaign migration requires manual sequencing
Built-in phone features do not export call recordings or transcription text
Odoo CRM gotchas
Odoo.sh version gating blocks assisted migrations from trial
Enterprise modules fail to install on Community after database restore
Custom module view inheritance breaks between Odoo major versions
Custom fields risk losing their application context on Community
API access for Community is gated behind the Custom Plan
Pair-specific challenges
Migration approach
Discovery and export scaffolding
We audit the FunnelMaker account across plan tier, contact count, pipeline count, custom field definitions, custom object schemas, active workflows, drip campaigns, and activity volume. Because FunnelMaker has no API, we provision an export scaffolding environment using its in-app CSV export tools and document every export pass required. We simultaneously confirm the Odoo plan (Standard or Custom) to determine whether XML-RPC API write access is available. The discovery output is a written migration scope, an export pass list, and an Odoo plan recommendation if Custom is not yet active.
Schema design and custom field provisioning in Odoo
We design the Odoo destination schema. This includes creating custom fields on res.partner (for FunnelMaker contact fields), crm.lead (for opportunity fields), and res.partner.category (for tags). If FunnelMaker has standalone custom objects, we create corresponding custom ir.model records in Odoo on the Custom plan or document the configuration for Standard plan. We create crm.team records for each FunnelMaker pipeline, with stage records preserving FunnelMaker stage names and probabilities. All schema work deploys to a Sandbox environment first for validation before production migration begins.
CSV extraction and transformation
We extract FunnelMaker data via in-product CSV exports in dependency order: Contacts first (with company associations), then Companies, Opportunities, Activities, Tags, and Custom Object records. Each CSV pass is validated for encoding consistency, multi-value field parsing (tags, custom checkboxes), date format normalization, and owner email resolution. We transform field values to match Odoo's expected formats (phone number formatting, email lowercase normalization, date strings to Odoo's datetime format) before staging for API write-in.
Sandbox migration and reconciliation
We run a full migration into an Odoo Sandbox using production-like data volume. The customer's Odoo admin reconciles record counts across all object types, spot-checks 25-50 records per object against FunnelMaker source data, and validates that contact-company associations and opportunity-company links resolved correctly. Pipeline stage mapping and lead score preservation are validated at this stage. Any mapping corrections are made in the transformation layer before production migration begins.
Production migration in dependency order
We run production migration in record-dependency order: res.users (Owner mapping validated), res.partner companies (type=company, from FunnelMaker Company records), res.partner contacts (linked to company parent), crm.lead opportunities (with team_id, stage_id, and user_id resolved), mail.message activities (linked to partner or lead via model and res_id), res.partner.category tags (created and linked via tag_ids), and custom object records (last, because they often have many2one lookups to partner or lead). Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and automation rebuild handoff
We freeze FunnelMaker write access during cutover and run a final delta migration of any records modified during the migration window. We then enable Odoo CRM as the system of record. We deliver the Workflow and Drip Campaign inventory document to the customer's admin team with Odoo Automations equivalents documented step-by-step. We support a one-week hypercare window for reconciliation issues raised by the sales team. Rebuilding FunnelMaker workflows as Odoo Automations is outside the standard migration scope and is handled as a separate admin task or engagement.
Platform deep dives
FunnelMaker
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 2 of 8 objects need a mapping; the rest are 1:1.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across FunnelMaker and Odoo CRM.
Object compatibility
2 of 8 objects need a mapping; the rest are 1:1.
Field mapping clarity
Field mapping is derived from defaults — final spec confirmed during the sample migration.
Timeline complexity
8-object category — typical timelines run 2–7 days end-to-end.
API constraints
FunnelMaker: Not publicly documented.
Data volume sensitivity
FunnelMaker doesn't expose a bulk API — REST + parallelization used for high-volume runs.
Estimator
Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.
Step 1
Pick a category, then your source and destination platforms.
Category
FAQ
Answers to the questions buyers ask most during FunnelMaker to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your FunnelMaker to Odoo CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave FunnelMaker
Other ways to arrive at Odoo CRM
Ready when you are
Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.