CRM migration
Field-level mapping, validation, and rollback between ActiveDEMAND and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
ActiveDEMAND
Source
Odoo CRM
Destination
Compatibility
11 of 14
objects map 1:1 between ActiveDEMAND and Odoo CRM.
Complexity
BStandard
Timeline
4-8 weeks
Overview
Moving from ActiveDEMAND to Odoo CRM restructures how your data is organized. ActiveDEMAND centers on Contacts with a flat relationship to Companies and a layered set of marketing objects (Campaigns, Funnels, Call Tracking, Appointments). Odoo CRM uses a Lead-Contact-Company-Opportunity model with separate objects for each, and it enforces Company as a parent entity that must exist before a Contact can reference it. We resolve this hierarchy during scoping: we export Companies first, create them in Odoo, then cascade Contacts with their resolved Company references. Call Tracking records (source number, destination, duration, recording URL) migrate as Odoo CRM Lead or Contact activities with custom fields carrying the call metadata. Funnel stages map to Odoo CRM pipeline stages in the Opportunities model. ActiveDEMAND's Brand Custom Fields vary per account and per tenant in multi-community setups — we extract the schema definition before exporting any data and reproduce the equivalent custom fields in Odoo as the first step in the destination workspace. Automated Workflows, Forms, and Landing Pages do not migrate as code; we deliver written inventories for manual rebuild in Odoo Studio or through the Odoo Apps store.
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 ActiveDEMAND 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.
ActiveDEMAND
Contact
Odoo CRM
Contact
1:1ActiveDEMAND Contacts map directly to Odoo CRM Contacts. Standard fields (name, email, phone, company) migrate 1:1. We resolve the Company reference to an Odoo Contact Company record using the Contact's company name as the dedupe key. Brand Custom Field values migrate to Odoo custom Contact fields that we pre-create during schema setup. Multi-community assignments (Senior Living) migrate to an Odoo custom field ad_community__c and are also applied as Tags on the Contact record.
ActiveDEMAND
Company
Odoo CRM
Company
1:1ActiveDEMAND Companies map to Odoo CRM Companies. The company name becomes the Company Name field and is used as the dedupe key. Address fields (street, city, state, country, zip) map to Odoo Company address fields. If a Contact has a company reference, the Company record must be created before the Contact so that the Contact's company_id field can be set during import.
ActiveDEMAND
Campaign
Odoo CRM
Campaign
1:1ActiveDEMAND Campaigns (email, funnel, multi-channel) migrate to Odoo CRM Campaigns with campaign name, start and end dates, and status preserved. Campaign type distinction (email vs funnel vs event) maps to Odoo's campaign Type field. Campaign membership (which Contacts were in which Campaign) migrates as Odoo CRM Campaign Subscriptions or Tags on the Contact record.
ActiveDEMAND
Funnel
Odoo CRM
Opportunity (Pipeline Stage)
lossyActiveDEMAND Funnels (multi-stage buyer journey builder) map to Odoo CRM Opportunity pipeline stages. We export each Funnel's stage definitions and contact-stage assignments, then create Odoo CRM pipeline stages matching the funnel labels. If multiple Funnels exist, each becomes a separate Odoo CRM pipeline (requires Odoo Sales app) or stage group within a single pipeline.
ActiveDEMAND
Deal
Odoo CRM
Opportunity
1:1ActiveDEMAND Deals map to Odoo CRM Opportunities. Deal name becomes Opportunity name, amount maps directly, closed date maps to Odoo Expected Closing Date, and stage maps to Odoo Stage. If ActiveDEMAND Deals reference a funnel stage, the mapping routes to the corresponding Odoo pipeline stage we created during funnel setup.
ActiveDEMAND
Call Tracking Record
Odoo CRM
Lead / Contact Activity (custom fields)
1:1ActiveDEMAND Call Tracking records include source number, destination number, duration, recording URL, and linked Contact. We create Odoo custom fields on the Contact and Lead models (ad_call_source_number__c, ad_call_duration__c, ad_call_recording_url__c) and populate them from the Call Tracking records linked to each Contact. Recording URLs are preserved as text fields. If the customer uses an Odoo VoIP integration, we document the mapping for the integration partner.
ActiveDEMAND
Appointment / Tour Booking
Odoo CRM
Calendar Event or Task
1:1ActiveDEMAND Appointments (date, time, status, linked Contact, community reference) migrate to Odoo CRM Calendar Events or Tasks depending on whether the customer has the Odoo Calendar app enabled. Original appointment date and time preserve in the Event start_datetime and stop_datetime fields. Community reference from the Appointment migrates to the ad_community__c field on the related Contact.
ActiveDEMAND
Chat Conversation
Odoo CRM
Lead / Contact Activity (note)
1:1ActiveDEMAND Chat Virtual Assistant conversations (timestamps, message text, visitor contact info) migrate as Odoo CRM Lead or Contact notes. We export conversation metadata (date, duration, message count) as a Note body, with the linked Contact resolved via email match. Full chat transcript text migrates as Note content attached to the Contact record.
ActiveDEMAND
Brand Custom Fields
Odoo CRM
Contact custom fields
lossyActiveDEMAND Brand Custom Fields are account-specific schemas that must be exported before Contact records. We reproduce the field structure as Odoo custom fields on the crm.lead model (for Leads) and res.partner model (for Contacts) before any data load. Field types (text, number, date, dropdown) map to the nearest Odoo field type. Multi-community schemas (Senior Living) may have different field sets per community — we handle these as conditional field creations based on the community property.
ActiveDEMAND
List / Segment
Odoo CRM
Tag
1:manyActiveDEMAND Contact Lists and Segments are static lists of Contact IDs. We export each list's member IDs and apply the list name as an Odoo Tag on each Contact record. For segments with dynamic membership criteria, we document the criteria in the handoff inventory so the customer's Odoo admin can recreate the segment using Odoo CRM's domain-based filtering or a saved filter.
ActiveDEMAND
Form
Odoo CRM
Metadata inventory (no code)
1:1ActiveDEMAND Form definitions and field names migrate as a written metadata inventory (form name, field list, field types, submission mapping). The form body (HTML/CSS) is not migrated. We recommend Odoo Website Forms or a third-party form tool (Typeform, JotForm) as the replacement, and we document the field-level mapping so the admin can configure the equivalent field routing in the replacement form tool.
ActiveDEMAND
Landing Page
Odoo CRM
Metadata inventory (no code)
1:1ActiveDEMAND Landing Page templates and URL references migrate as a written inventory (page name, URL, funnel association, form embedded). The page HTML/CSS and script embeds do not migrate. We recommend Odoo Website as the replacement CMS and document the page-to-page mapping with field routing notes.
ActiveDEMAND
Automated Workflow
Odoo CRM
Metadata inventory (no code)
1:1ActiveDEMAND Automated Workflow definitions (triggers, conditions, steps, actions) export as a written workflow inventory document. Odoo Studio automations use a different event model (action-motif-based triggers) and are not a direct equivalent. We deliver the inventory with each workflow's trigger type, conditions, and actions described in Odoo-compatible language, and the customer's Odoo partner or admin rebuilds them in Odoo Studio post-migration.
ActiveDEMAND
Attachment
Odoo CRM
Attachment (IR Attachment)
1:1File attachments linked to ActiveDEMAND Contacts, Campaigns, or Forms are exported by URL reference. We download files from ActiveDEMAND's media server to local storage, then re-upload to Odoo as IR Attachment records linked to the equivalent Contact or Lead. Filename and MIME type preserve throughout.
| ActiveDEMAND | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | Contact1:1 | Fully supported | |
| Company | Company1:1 | Fully supported | |
| Campaign | Campaign1:1 | Fully supported | |
| Funnel | Opportunity (Pipeline Stage)lossy | Fully supported | |
| Deal | Opportunity1:1 | Fully supported | |
| Call Tracking Record | Lead / Contact Activity (custom fields)1:1 | Fully supported | |
| Appointment / Tour Booking | Calendar Event or Task1:1 | Fully supported | |
| Chat Conversation | Lead / Contact Activity (note)1:1 | Fully supported | |
| Brand Custom Fields | Contact custom fieldslossy | Mapping required | |
| List / Segment | Tag1:many | Fully supported | |
| Form | Metadata inventory (no code)1:1 | Fully supported | |
| Landing Page | Metadata inventory (no code)1:1 | Fully supported | |
| Automated Workflow | Metadata inventory (no code)1:1 | Fully supported | |
| Attachment | Attachment (IR Attachment)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.
ActiveDEMAND gotchas
API access requires Developer Partner Program enrollment
Brand Custom Field schemas vary per account and must be exported first
Report dashboards and analytics aggregates are not portable
Multi-tenant community structure requires explicit mapping
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 API enrollment
We audit the source ActiveDEMAND account across object types (Contacts, Companies, Campaigns, Deals, Call Tracking, Appointments, Chat Conversations, Funnels), custom field schema definitions, community/tenant list, active workflow inventory, and engagement volume estimates. If the account does not yet have API access via the Developer Partner Program, we initiate enrollment on day one because approval timelines can range from three to ten business days. The discovery output is a written migration scope document that lists every object to migrate, every custom field to create in Odoo, and the chosen community-mapping strategy for Senior Living accounts.
Schema design in Odoo CRM
We design the destination schema in the customer's Odoo database. This includes creating all custom Contact fields (ad_community__c, ad_call_duration__c, ad_call_recording_url__c, ad_lifecycle_stage__c, ad_original_create_date__c), configuring pipeline stages matching the ActiveDEMAND funnel definitions, and creating Sales Teams per community for multi-tenant accounts. If Odoo ERP is also in scope, we map the Company object to the Odoo res.partner model and confirm that the company_type distinction (person vs company) aligns with the customer's data. Schema is configured in Odoo via Settings > Technical before any data import begins.
Test migration and reconciliation
We run a full migration into a staging or sandbox copy of the Odoo database using production-like data volume. The customer's Odoo admin reconciles record counts (Companies in, Contacts in, Opportunities in, Activities in), spot-checks 25-50 random records against the ActiveDEMAND source, and confirms that custom field data is landing in the correct Odoo fields. Community assignments and call tracking metadata receive specific validation checks. Any mapping corrections are documented and applied before production migration begins.
Dependency-ordered production migration
We run production migration in record-dependency order: Companies first (as parent records), then Contacts with company_id resolved, then Opportunities (with pipeline and stage mapped), then Call Tracking metadata (as Contact custom fields), then Appointments as Calendar Events, then Chat history as Notes, then Campaign membership as Tags, then Lists as Tag assignments. Each phase emits a row-count reconciliation report before the next phase begins. If the ActiveDEMAND API is unavailable (pending partner enrollment), we use the CSV export path for Contacts and Companies and document which object types fall back to manual extraction.
Cutover, validation, and workflow rebuild handoff
We freeze ActiveDEMAND writes during cutover, run a final delta migration of any records modified during the migration window, then enable Odoo CRM as the system of record. We deliver the Automated Workflow inventory, Form metadata inventory, and Landing Page inventory to the customer's admin team. We support a one-week hypercare window where we resolve any reconciliation issues raised by the customer's team. We do not rebuild ActiveDEMAND Workflows as Odoo Studio automations inside the migration scope; that is a separate engagement or an internal Odoo admin task.
Platform deep dives
ActiveDEMAND
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 1 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 ActiveDEMAND and Odoo CRM.
Object compatibility
1 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
ActiveDEMAND: Not publicly documented.
Data volume sensitivity
ActiveDEMAND 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 ActiveDEMAND to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your ActiveDEMAND 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 ActiveDEMAND
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.