CRM migration
Field-level mapping, validation, and rollback between Swift Digital Suite and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Swift Digital Suite
Source
Odoo CRM
Destination
Compatibility
7 of 12
objects map 1:1 between Swift Digital Suite and Odoo CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from Swift Digital Suite to Odoo CRM is a structural migration from a marketing automation-centric data model to a sales-and-ERP relational model. Swift Digital Suite organises data around Contacts with engagement scoring and Campaign membership; Odoo CRM expects Contacts to be children of Companies/Accounts with a separate CRM pipeline of Opportunities. We handle the Account-Contact parent resolution during import, collapse the separate email and SMS opt-out flags into Odoo's single opt-out field, and sequence the dashboard-based export through paginated record retrieval because Swift Digital Suite has no publicly documented bulk API. Survey question branching, automation workflows, and engagement score algorithms do not migrate as code; we deliver a written inventory of these for the customer's admin to rebuild in Odoo Studio or the CRM module's action-automation tools.
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 Swift Digital Suite 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.
Swift Digital Suite
Contact
Odoo CRM
Contact + res.partner
1:1Swift Digital Suite Contacts map to Odoo res.partner records of type 'contact'. The Contact's primary email address becomes res.partner.email, phone becomes phone, and custom property values map to custom res.partner fields pre-created in Odoo. A critical dependency: Odoo requires Contacts to be associated with a parent Company (res.partner of type 'company') unless the contact is a private individual. We resolve this by creating a placeholder Company record for each unique domain in the contact email list during import, then linking all contacts from that domain to the resolved Company record.
Swift Digital Suite
Segment
Odoo CRM
Contact Tags (mailing.contact)
1:manySwift Digital Suite Segments are named behavioural or demographic groupings applied to contacts. Odoo CRM does not have a native segment object; segments map to Contact Tags via the mailing.contact model. Each segment name becomes a tag. Contacts with multiple segment memberships receive all corresponding tags. If the destination Odoo instance also uses the Odoo Marketing Automation app, segments can alternatively map to mailing.list membership records.
Swift Digital Suite
Campaign
Odoo CRM
crm.tag or utm.source + utm.campaign
1:1Swift Digital Suite Campaigns (email, event, and SMS types) map to Odoo utm.campaign records for attribution tracking. The campaign name, type, created date, and status migrate as fields on utm.campaign. Active or paused campaign state is preserved as a campaign_status field. Odoo CRM's Opportunities reference utm.campaign via the campaign_id link, enabling revenue attribution to the original Swift Digital Suite campaign.
Swift Digital Suite
Email Sends / Email History
Odoo CRM
mail.message + utm.mixin (on Contact)
1:manyIndividual email send events (send timestamp, open, click, bounce, unsubscribe per contact-campaign pair) map to Odoo mail.message records linked to the Contact. The message type is 'email', the body contains a plain-text summary of the send event, and a custom field records the campaign reference. Open and click events that are tracked separately in Swift Digital Suite are stored as separate mail.message records with a reference back to the original send event. This preserves the full engagement timeline but requires careful ordering to maintain chronological sequence.
Swift Digital Suite
Survey
Odoo CRM
survey.survey + survey.user_input (responses)
1:1Survey definitions (question text, answer type, answer options) migrate to Odoo survey.survey records. Individual survey responses migrate as survey.user_input records tied to the Contact who responded. Conditional branching and skip logic defined inside Swift Digital Suite are not exposed in the export and cannot be migrated automatically; we deliver a survey structure document listing every question, its conditional dependencies, and the recommended Odoo survey builder equivalent so the customer's admin rebuilds branching manually. Multi-page surveys map to Odoo sections.
Swift Digital Suite
Event
Odoo CRM
event.event + event.registration
1:1Swift Digital Suite Events (name, date, venue, ticket type) map to Odoo event.event records. Registration records, attendance status, and RSVP history map to event.registration records linked to the event and the Contact. Event-level custom fields migrate to event.event custom fields. Swift Digital Suite event check-in timestamps map to event.registration.registration_date and event.registration.attendance state fields. Ticket type from Swift Digital Suite migrates to event.event event_ticket_ids.
Swift Digital Suite
SMS Record
Odoo CRM
sms.sms (if SMS module installed) + mail.message on Contact
1:1SMS sends tied to contacts and campaigns migrate to Odoo sms.sms records (when the Odoo SMS module is active) or to mail.message records with a custom sms_content field when SMS is not installed. The contact's SMS consent flag from Swift Digital Suite maps to res.partner.sms_opt_out. Outbound and inbound message content migrates as separate records with direction distinguished by a custom field.
Swift Digital Suite
Engagement Score
Odoo CRM
Custom numeric field on res.partner (score value only)
lossySwift Digital Suite engagement scores are computed using the platform's proprietary algorithm based on open, click, and conversion events. We export the current score value as a static numeric contact property (e.g., x_engagement_score). Odoo does not have a native equivalent; the exported score serves as a historical reference value. The destination's own scoring model (if Odoo Marketing Automation is installed) recalculates independently. We document the original score alongside the new Odoo score so the customer's admin can evaluate whether the two scoring systems produce comparable outputs.
Swift Digital Suite
Custom Properties
Odoo CRM
Custom res.partner fields
lossySwift Digital Suite supports custom properties on Contact and Campaign records. We extract all active custom property names, infer their data types (string, number, date, boolean, multi-select), and pre-create identically named custom fields on res.partner in Odoo before import. Where the destination field type does not support the source type directly (e.g., Swift Digital Suite multi-select becomes Odoo many2many or char with comma-separated values), we document the transformation and confirm the format with the customer before applying.
Swift Digital Suite
Automation Workflows
Odoo CRM
No direct migration (inventory document only)
1:1Swift Digital Suite workflow definitions (trigger conditions, time delays, action steps) are documented as structured records showing the trigger, each step, and its conditions. Odoo Studio and Odoo Marketing Automation use a different automation model (server actions, automated actions, and activity templates) that does not accept workflow definitions as importable code. We deliver a written automation inventory covering every active workflow with its trigger type, conditions, and recommended Odoo automated action or Studio server action equivalent. The customer's Odoo admin rebuilds the automations post-migration.
Swift Digital Suite
Channel Opt-Out (email + SMS separately)
Odoo CRM
res.partner.opt_out (single field)
1:manySwift Digital Suite tracks unsubscribe status independently for email and SMS channels. Odoo CRM uses a single opt_out boolean on res.partner that applies across all channels. We apply the more restrictive opt-out state across both channels during migration: if a contact has opted out of SMS but not email in Swift Digital Suite, we set opt_out=True in Odoo to prevent accidental re-engagement on SMS. The original channel-specific flags are preserved as custom fields x_email_unsubscribed and x_sms_unsubscribed for audit purposes.
Swift Digital Suite
Owner / User
Odoo CRM
res.users
1:1Swift Digital Suite users referenced on contact and campaign records are matched by email against Odoo res.users. Any Swift Digital Suite owner without a matching Odoo user is flagged in a reconciliation queue. The customer's Odoo admin provisions any missing users before record import resumes, as OwnerId references are required on Odoo CRM activities and Opportunities.
| Swift Digital Suite | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | Contact + res.partner1:1 | Fully supported | |
| Segment | Contact Tags (mailing.contact)1:many | Fully supported | |
| Campaign | crm.tag or utm.source + utm.campaign1:1 | Fully supported | |
| Email Sends / Email History | mail.message + utm.mixin (on Contact)1:many | Fully supported | |
| Survey | survey.survey + survey.user_input (responses)1:1 | Fully supported | |
| Event | event.event + event.registration1:1 | Fully supported | |
| SMS Record | sms.sms (if SMS module installed) + mail.message on Contact1:1 | Fully supported | |
| Engagement Score | Custom numeric field on res.partner (score value only)lossy | Fully supported | |
| Custom Properties | Custom res.partner fieldslossy | Mapping required | |
| Automation Workflows | No direct migration (inventory document only)1:1 | Mapping required | |
| Channel Opt-Out (email + SMS separately) | res.partner.opt_out (single field)1:many | Fully supported | |
| Owner / User | res.users1: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.
Swift Digital Suite gotchas
No publicly documented bulk API
Email and SMS opt-out flags are separate
Survey conditional logic is not exportable as-is
Engagement scores are platform-specific snapshots
Annual pricing model requires contract alignment
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 data audit
We audit the Swift Digital Suite instance across active contacts, segments, campaigns, engagement history (email sends, opens, clicks, bounces), survey definitions and response volumes, event records, SMS sends, custom properties, and owner assignments. We document the current export method available through the platform dashboard and agree on a scope-cut date for databases exceeding 50,000 contacts. We simultaneously review the destination Odoo instance for installed apps (CRM, Survey, Event, SMS), existing contact and company records, and custom field definitions to determine what schema work must precede import.
Schema design and parent-company resolution plan
We design the Odoo CRM schema before any data moves. This includes creating custom fields on res.partner to accommodate Swift Digital Suite custom properties, creating utm.campaign records for each Swift Digital Suite campaign, pre-creating placeholder Company records for each unique email domain, and creating survey.survey records from the Swift Digital Suite survey definitions. The parent-company resolution plan is documented as a domain-to-company mapping table and validated with the customer before import begins. All schema changes are deployed into a Sandbox or staging Odoo instance first.
Dashboard export sequencing
We extract Swift Digital Suite data through the platform's reporting dashboard and paginated record retrieval in batches of 5,000 contacts to avoid session timeouts. Each batch includes contact profiles, segment membership, campaign history, engagement events, and custom property values. We run extraction in parallel across object types (contacts first, then campaign history, then events, then surveys) to maximise throughput within the session-window constraints. The cut-off date is locked before extraction begins so that records created during the migration window are excluded from the initial pass and reconciled as a delta at cutover.
Data transformation and opt-out collapse
We transform the exported Swift Digital Suite data into Odoo-compatible format. The critical transforms are: collapsing email and SMS opt-out flags into a single opt_out value using the more restrictive state, resolving email domains to parent Company records, mapping segment names to mailing.contact tags, converting survey question branching to flat question lists with a rebuild guide, and mapping engagement scores to a static custom field. Custom property values are mapped to pre-created Odoo custom fields by name and type. Each transform is validated against a 5-percent sample before full apply.
Staging import and reconciliation
We run a full import into the staging Odoo instance. Record counts are reconciled per object type: contacts imported versus contacts exported, companies created versus unique domains resolved, email events imported versus send records exported, survey responses imported versus response records exported. We spot-check 25-50 random records against the Swift Digital Suite source data for field-level accuracy. The customer reviews the staging import and signs off before production migration begins. Any mapping corrections are applied in staging, not production.
Production migration and cutover
We run production migration in dependency order: Company records first (from resolved email domains), then Contacts with AccountId links resolved, then utm.campaign records, then engagement history (mail.message records via Odoo's XML-RPC API), then survey responses, then event registrations. We freeze Swift Digital Suite writes during the cutover window, run a final delta migration of any records modified during the window, then set Odoo CRM as the system of record. We deliver the automation inventory document and survey rebuild guide to the customer's admin. We do not rebuild Swift Digital Suite automations or survey branching in Odoo; those are separate configuration tasks handled by the customer's admin or an Odoo partner.
Platform deep dives
Swift Digital Suite
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between Swift Digital Suite and Odoo CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Swift Digital Suite and Odoo CRM.
Object compatibility
All 8 core objects map 1:1 between Swift Digital Suite and Odoo CRM.
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
Swift Digital Suite: Not publicly documented in the v3 API reference.
Data volume sensitivity
Swift Digital Suite exposes a bulk API — large-volume migrations stream efficiently.
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 Swift Digital Suite to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Swift Digital Suite 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 Swift Digital Suite
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.