CRM migration
Field-level mapping, validation, and rollback between Touchdown and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Touchdown
Source
Odoo CRM
Destination
Compatibility
9 of 13
objects map 1:1 between Touchdown and Odoo CRM.
Complexity
BStandard
Timeline
4-6 weeks
Overview
Moving from Touchdown to Odoo CRM is a marketing automation to operational CRM migration with two structural challenges. First, Touchdown does not publish a public API schema, so we perform authenticated API exploration during discovery to map the actual data model before any export. Second, Touchdown organizes contact data around marketing audience segments and campaign attribution, while Odoo CRM uses the Lead, Opportunity, and Contact pipeline model common to operational sales CRMs. We resolve the campaign-to-pipeline mapping during scoping, preserving campaign source information as a custom field on the Odoo Lead for attribution continuity. Custom fields in Odoo must be created via Odoo Studio before any record import; we handle that schema provisioning as a precondition of the data migration phase. Touchdown Segments do not have a direct Odoo equivalent, so we recreate segment logic as saved filter domains in Odoo and document the mapping for the customer's admin. Workflows, email sequences, and marketing automation rules do not migrate; we deliver a written inventory of every active automation requiring rebuild in Odoo Studio or Odoo's server actions.
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 Touchdown 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.
Touchdown
Contact
Odoo CRM
Lead
1:1Touchdown Contact records map to Odoo CRM Lead as the primary record type. Standard contact fields (name, email, phone, company name) map to Odoo's name, email_from, phone, and partner_name fields on crm.lead. We resolve the Touchdown company association from the contact's company_name property and carry it into the Lead's partner_name field for later Account creation. Any lifecycle stage or contact type property in Touchdown migrates as a custom Char or Selection field on the Lead for segmentation continuity.
Touchdown
Contact
Odoo CRM
Contact + Account (converted Lead)
1:manyTouchdown Contacts that represent active customers or qualified buyers map to Odoo Partner records attached to an Odoo Account (res.partner with partner_latitude populated to flag as a company). We apply a customer-type filter during migration: contacts with a campaign conversion event in Touchdown map directly to res.partner in customer mode. The customer's admin runs the Odoo Lead conversion (crm.lead convert_to_partner action) for in-progress Leads after migration, or we perform the conversion during migration if the customer provides a conversion rule during scoping.
Touchdown
Company/Account
Odoo CRM
Partner (company mode)
1:1Touchdown Company records map to Odoo res.partner records in company mode. The company name becomes the partner's name (displayed as company), and the company domain becomes the website field. Touchdown company custom properties migrate as custom fields on the res.partner record. We use company domain as the dedupe key during import. The Partner must exist before any Contact import that references it as a parent company.
Touchdown
Campaign
Odoo CRM
CRM Campaign
1:1Touchdown Campaign records map to Odoo CRM Campaign (utm.campaign). Campaign name, description, start and end dates, and status transfer directly. Touchdown campaign audience assignments (contacts associated with a campaign) map to Odoo CRM Campaign lines or to a Tag on the migrated Lead records so that campaign attribution is preserved without requiring a separate campaign-member object that Odoo CRM does not natively support in the same way Touchdown does.
Touchdown
Segment
Odoo CRM
Saved Filter (Domain)
lossyTouchdown audience segments do not have a direct Odoo CRM equivalent. We discover each segment's filter criteria via Touchdown's API during schema exploration, then recreate those criteria as saved filter domains in Odoo CRM (ir.filters). The segment name becomes the filter name, and the filter domain is translated from Touchdown's segment logic to Odoo's domain notation (e.g., Touchdown 'country = USA AND lifecycle_stage = MQL' becomes [('country', '=', 'USA'), ('lifecycle_stage', '=', 'mql')]). We document the translation for the customer's admin as a living reference for segment maintenance.
Touchdown
Email Template
Odoo CRM
Email Template (mail.template)
1:1Touchdown email templates with merge fields migrate to Odoo mail.template records. We export template body content (HTML), subject line, and merge field tokens, then map them to Odoo's subject and body_html fields using Odoo's QWeb template syntax where personalization tokens are represented as {{ object.field_name }}. The model's model_id on the mail.template record is set to crm.lead for Lead-facing templates or res.partner for Contact-facing templates.
Touchdown
Custom Field (Contact)
Odoo CRM
Custom Field (crm.lead or res.partner)
lossyTouchdown custom contact properties discovered during API exploration map to custom fields on Odoo crm.lead (for Lead-scoped properties) or res.partner (for Contact-scoped properties). We use Odoo Studio to pre-create each custom field before the production migration phase. Field type translation follows: Touchdown text becomes Char, long text becomes Text, number becomes Float or Integer, date becomes Date, and multi-select becomes Char (comma-separated) or a dedicated Selection field if the value set is known and bounded. The custom field must be created and deployed to the production Odoo instance before any records referencing it are imported.
Touchdown
Custom Field (Campaign)
Odoo CRM
Custom Field (utm.campaign)
lossyTouchdown custom campaign properties discovered via API exploration map to custom fields on Odoo utm.campaign via Odoo Studio. These fields are created during the schema provisioning phase. The same type-translation rules apply as for Contact custom fields.
Touchdown
Engagement: Email
Odoo CRM
Mail Message (mail.message)
1:1Touchdown email engagement history migrates to Odoo mail.message records attached to the relevant Lead or Partner (res.partner) record. The email subject, body (HTML), sender, and recipient addresses transfer directly. Activity timeline ordering is preserved by setting mail.message's date field to the original Touchdown timestamp. We link messages to the crm.lead or res.partner record using the model and res_id fields on mail.message.
Touchdown
Engagement: Call
Odoo CRM
CRM Lead / Note with subtype
1:1Touchdown call engagements map to Odoo CRM Lead's activity log or to a Note (note.note) attached to the Lead or Partner record. Call duration, disposition, and outcome properties from Touchdown migrate as custom fields on the activity or note. The original call timestamp is preserved in the activity or note body for audit continuity.
Touchdown
Engagement: Meeting
Odoo CRM
Calendar Event (calendar.event)
1:1Touchdown meeting engagements map to Odoo calendar.event records. Start datetime, end datetime, location, and description transfer directly. Attendee information from Touchdown migrates to calendar.attendee records linked to the event, with attendee email matched against migrated res.partner or res.users records by email address.
Touchdown
Engagement: Task
Odoo CRM
CRM Activity / Project Task
1:1Touchdown task engagements migrate to Odoo CRM Activity records (mail.activity) linked to the Lead or Partner. Task subject, due date, priority, and status transfer directly. Owner assignment resolves Touchdown owner email to Odoo res.users and sets the activity's user_id accordingly. Tasks without a due date or future date become note-style records attached to the Lead.
Touchdown
Owner / User
Odoo CRM
User (res.users)
1:1Touchdown Owner records map to Odoo res.users. We resolve each Touchdown owner by email match against the destination Odoo res.users table. Any Touchdown owner without a matching Odoo user is held in a reconciliation queue for the customer's admin to provision before record import resumes. Odoo does not support inactive users on imported records in the same way Salesforce does, so we require active res.users records for all Touchdown owners referenced in the migration scope.
| Touchdown | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | Lead1:1 | Fully supported | |
| Contact | Contact + Account (converted Lead)1:many | Fully supported | |
| Company/Account | Partner (company mode)1:1 | Fully supported | |
| Campaign | CRM Campaign1:1 | Fully supported | |
| Segment | Saved Filter (Domain)lossy | Fully supported | |
| Email Template | Email Template (mail.template)1:1 | Fully supported | |
| Custom Field (Contact) | Custom Field (crm.lead or res.partner)lossy | Fully supported | |
| Custom Field (Campaign) | Custom Field (utm.campaign)lossy | Fully supported | |
| Engagement: Email | Mail Message (mail.message)1:1 | Fully supported | |
| Engagement: Call | CRM Lead / Note with subtype1:1 | Fully supported | |
| Engagement: Meeting | Calendar Event (calendar.event)1:1 | Fully supported | |
| Engagement: Task | CRM Activity / Project Task1: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.
Touchdown gotchas
Catalog website appears mismatched
Touchdown stores its data inside the Dynamics 365 / Dataverse tenant
SMS data and consent records require careful handling
Templates and landing pages reference Microsoft-hosted assets
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 Touchdown API schema exploration
We audit the customer's Touchdown instance via authenticated API exploration to discover the actual data model: all Contact fields (standard and custom), Company fields, Campaign fields, Segment definitions with their filter criteria, email template structures, engagement object schemas (email, call, meeting, task), and Owner records. We simultaneously review the customer's Odoo instance for existing custom fields, active modules, and user count. The discovery output is a written migration scope document that includes the discovered Touchdown schema, the proposed Odoo schema mapping, and a list of Touchdown custom fields that require Odoo Studio provisioning before import. This step takes one to two weeks.
Schema provisioning and sandbox preparation
We create all required custom fields in the customer's Odoo instance using Odoo Studio (or direct XML-RPC field creation if Studio is unavailable). We configure the Odoo CRM pipeline stages, sales team structure, and tag taxonomy to align with Touchdown's campaign and segment organization. We create a sandbox or staging Odoo environment for migration testing. Any Odoo custom fields that reference selection lists or related models are configured before the migration script is written. This step requires Odoo admin credentials and typically takes one week.
Sandbox migration and reconciliation
We run a full migration into the staging Odoo environment using production-like data volume. The customer reviews record counts, spot-checks fifteen to twenty random migrated records against the Touchdown source, and validates that custom fields populated correctly. Any field mapping corrections, data type issues, or segment translation problems are resolved in this phase. The customer signs off the sandbox validation before we proceed to production migration. This step takes one to two weeks.
Owner and user provisioning reconciliation
We extract every distinct Touchdown Owner referenced on Contacts, Companies, Campaigns, and Engagement records and match by email against the Odoo res.users table. Owners without a matching Odoo user go to a reconciliation queue. The customer's Odoo admin provisions any missing users before production migration begins. Odoo requires active res.users records for owner assignment on Leads and Opportunities, so this step must be completed before the production migration run. This step typically takes one to three days depending on how many users need provisioning.
Production migration in dependency order
We run production migration in record-dependency order: Odoo Users validated first, then Company records (res.partner in company mode), then Contact records (Lead and Partner), Campaigns (utm.campaign), Email Templates (mail.template), Custom field values populated on Leads and Partners, Activity history (mail.message, calendar.event, mail.activity via XML-RPC batch), and Segments (ir.filters as saved domains). Each phase emits a row-count reconciliation report. We use XML-RPC batch operations (default 100 records per batch) with exponential backoff on rate-limit responses. This step takes one to three weeks depending on total record volume.
Cutover, validation, and automation rebuild handoff
We freeze Touchdown writes during the cutover window, run a final delta migration of any records modified during the migration, then enable Odoo CRM as the system of record. We deliver the Segment translation document (Touchdown segment name to Odoo saved filter domain), the Workflow and automation inventory (Touchdown sequences and campaign rules requiring Odoo Studio rebuild), and the custom field reference guide. We provide a one-week hypercare window for reconciliation issues. We do not rebuild Touchdown automations as Odoo server actions or Studio workflows inside the migration scope; that work is documented and handed off as a separate admin task.
Platform deep dives
Touchdown
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 Touchdown 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
Touchdown: Governed by Dataverse Web API service protection limits (per-user/per-app rate ceilings published by Microsoft). Touchdown does not impose additional documented limits on top..
Data volume sensitivity
Touchdown 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 Touchdown to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Touchdown 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 Touchdown
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.