CRM migration
Field-level mapping, validation, and rollback between Selligent by Marigold and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Selligent by Marigold
Source
Odoo CRM
Destination
Compatibility
8 of 12
objects map 1:1 between Selligent by Marigold and Odoo CRM.
Complexity
BStandard
Timeline
4-8 weeks
Overview
Moving from Selligent by Marigold to Odoo CRM is a platform-category transition: Selligent is a B2C marketing automation platform whose contact model (Individual with behavioral properties) does not map to a single Odoo CRM object. Selligent Contacts with a prospect lifecycle map to Odoo crm.lead; Contacts tied to an organization map to res.partner as the Account equivalent. Action Lists (LISTID-keyed campaign member records) map to crm.lead or crm.lead.tag groups; the campaign audience migrates as an Odoo CRM Campaign with member contacts tagged by Selligent ACTIONCODE. Behavioral event history is not a standalone Selligent API object; we migrate the most recent event summary per contact as a text custom field and flag full behavioral event migration as a separate data warehouse engagement. Automated journey definitions, journey content, and campaign templates are not API-exportable from Selligent; we document every active journey for the customer's admin to rebuild in Odoo Studio or via server actions. Custom fields migrate fully. We use Odoo's xmlrpc API with batch processing, respecting its batch size limits and parent-record dependency ordering to preserve referential integrity through the migration.
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 Selligent by Marigold 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.
Selligent by Marigold
Contact (Individual)
Odoo CRM
crm.lead or res.partner
1:manySelligent Individual records map to Odoo crm.lead for unqualified prospects and to res.partner for qualified customers or contacts with an organizational affiliation. We apply a lifecycle-stage rule during scoping: Selligent contacts with a purchase history or organization association become res.partner records; all others become crm.lead. The Selligent USERID is preserved as a custom field selligent_userid__c on both crm.lead and res.partner for reconciliation. Email, mobile number, and address fields map to standard Odoo fields; behavioral properties (recency, frequency, engagement score) map to custom fields that we pre-create as char or integer fields before import.
Selligent by Marigold
Company (organization custom property)
Odoo CRM
res.partner (as Account)
1:1Selligent does not have a native company object; organizational affiliation is stored as a custom property or relation tag on the Individual. We extract the organization name from Selligent custom field arrays, deduplicate across all contact records, and create res.partner records with company_name set and is_company=True. These partner records become the Account parent for contacts that carry an organization association. Where Selligent stores multiple organization roles per contact (e.g., billing, shipping, decision-maker), we create separate partner contacts under the same company partner with the role stored in a custom function field.
Selligent by Marigold
Dynamic Segment
Odoo CRM
crm.lead.tag or ir.filters
1:1Selligent Dynamic Segments are defined by behavioral and demographic rules but the segment definitions themselves are not API-exportable. We export the member USERIDs for each segment and create corresponding crm.lead.tag records in Odoo (or ir.filters for more complex rule-based groups). The segment criteria (e.g., purchased in last 30 days, email opened more than twice) are documented in a segment inventory deliverable for the customer to rebuild as Odoo lead tags or filtered views.
Selligent by Marigold
Action List
Odoo CRM
crm.lead.tag + crm.opportunity (campaign audience)
1:manySelligent Action Lists (LISTID-keyed records with USERID, ACTIONCODE, and custom fields) are campaign member records. We map the Action List to an Odoo CRM Campaign and populate its member_lead_ids with crm.lead records tagged by the Selligent ACTIONCODE value. Custom fields on the Action List migrate as custom fields on the crm.lead. For Action Lists that represent a sales pipeline rather than a campaign audience, we map to crm.opportunity records with the LISTID stored as a custom field selligent_listid__c.
Selligent by Marigold
Tag
Odoo CRM
crm.lead.tag
1:1Selligent tags are multi-value assignments per contact that drive personalization and segmentation. We extract all tag values across the contact base, deduplicate into a canonical tag vocabulary, and create corresponding crm.lead.tag records. Each migrated contact receives the matching tags as tag_ids on crm.lead. Tags used for content classification (not audience segmentation) can alternatively map to mail.message.subtype for activity categorization.
Selligent by Marigold
Custom Fields (FieldsDefinition)
Odoo CRM
Custom ir.model.fields on crm.lead and res.partner
lossyWe extract the full FieldsDefinition array from Selligent's CreateActionList API payload during scoping, identify all custom field names and types, and generate Odoo field creation XML-RPC calls before any record import begins. Selligent's key-value prop arrays on Individual records require the destination schema to exist first; we enforce strict sequencing so that all field registration completes before contact import starts. Field types are inferred from Selligent data values (string, integer, float, boolean, date) and mapped to the closest Odoo field type.
Selligent by Marigold
Email Campaign (send history and engagement)
Odoo CRM
crm.activity (Note) + mail.message
1:1Selligent email campaign history (subject, send date, audience size, open/click metrics at the campaign level) migrates as a mail.message note on the CRM Campaign record with campaign metadata in custom fields. Contact-level engagement (open, click, bounce per USERID) migrates as crm.activity records of subtype email_attached on the crm.lead. Full campaign email content and templates are not migratable; we deliver a content inventory so the customer's admin can recreate templates in Odoo Mail Composer or a connected email marketing app.
Selligent by Marigold
SMS/Mobile Campaign
Odoo CRM
crm.activity (Note)
1:1Similar to email campaigns, Selligent SMS send history and engagement metrics per contact migrate as crm.activity records on the crm.lead. Message content and short code configuration are not API-exportable; we document the SMS configuration for the customer to re-establish in Odoo SMS or a connected SMS gateway. Odoo SMS requires the marketing module or a third-party SMS provider integration, which is outside the migration scope but documented in the handoff deliverable.
Selligent by Marigold
Behavioral Events (event summary)
Odoo CRM
Custom char field on crm.lead
1:1Selligent behavioral event data is available via integration endpoints but not as a standalone exportable object. The most recent event summary per contact (last viewed page, last purchase date, last email interaction) migrates as a text or char custom field on crm.lead (e.g., last_event_summary__c). Full event stream migration requires a separate data warehouse pipeline and is not included in standard scope. We flag the event migration gap in the discovery deliverable and provide a scoped estimate if the customer requires it.
Selligent by Marigold
Transactional Messages
Odoo CRM
crm.activity (Note)
1:1Transactional message templates and API trigger configurations are not exportable from Selligent. We migrate the contact list associated with each transactional flow as crm.lead records tagged by the flow name (e.g., tag: transactional-welcome). The trigger setup (API endpoint, event conditions, message content) is documented in the migration handoff so the customer can reconfigure transactional messaging in Odoo or a connected transactional email provider.
Selligent by Marigold
User Permissions (user accounts)
Odoo CRM
res.users
1:1Selligent user accounts and role assignments are organizational settings that we export by email address. We match Selligent user emails to Odoo res.users by email lookup and flag any Selligent user without a matching Odoo account in a reconciliation queue. The customer's Odoo admin provisions missing users and assigns them to appropriate sales teams (crm.team) before the contact migration phase. Active/inactive status in Selligent maps to Odoo active=True/False on res.users.
Selligent by Marigold
Webhooks
Odoo CRM
Webhook documentation (no automated migration)
lossySelligent webhook configurations are not API-exportable via the public REST API. We document webhook URLs, event subscriptions, and payload schemas during scoping and include them in the migration handoff deliverable as a recreation guide. The customer's admin recreates webhook subscriptions in Odoo using Odoo Webhook modules or an iPaaS connector (Zapier, Make) post-migration.
| Selligent by Marigold | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact (Individual) | crm.lead or res.partner1:many | Fully supported | |
| Company (organization custom property) | res.partner (as Account)1:1 | Fully supported | |
| Dynamic Segment | crm.lead.tag or ir.filters1:1 | Fully supported | |
| Action List | crm.lead.tag + crm.opportunity (campaign audience)1:many | Fully supported | |
| Tag | crm.lead.tag1:1 | Fully supported | |
| Custom Fields (FieldsDefinition) | Custom ir.model.fields on crm.lead and res.partnerlossy | Fully supported | |
| Email Campaign (send history and engagement) | crm.activity (Note) + mail.message1:1 | Fully supported | |
| SMS/Mobile Campaign | crm.activity (Note)1:1 | Fully supported | |
| Behavioral Events (event summary) | Custom char field on crm.lead1:1 | Fully supported | |
| Transactional Messages | crm.activity (Note)1:1 | Mapping required | |
| User Permissions (user accounts) | res.users1:1 | Fully supported | |
| Webhooks | Webhook documentation (no automated migration)lossy | Mapping required |
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.
Selligent by Marigold gotchas
API rate limits are documented but not fully quantified publicly
Enterprise contracts are non-cancelable with no refunds mid-term
Journeys and campaign templates are not API-exportable
SDC bulk message limit of 100 per request caps throughput
Custom field schema must be pre-created at destination before import
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 schema audit
We audit the source Selligent environment across all active Individual records, FieldsDefinition arrays, Action Lists, Dynamic Segments, tags, user accounts, and engagement history volume. We extract the full custom field schema from the CreateActionList API payload to generate Odoo field creation calls. We identify active journeys and campaign configurations for the rebuild inventory. Discovery output is a written migration scope with a record-count matrix, a custom field mapping table, a segment-to-tag mapping table, and an active journey inventory. We also confirm the customer's Selligent contract renewal date to advise on timing.
Schema design and field pre-creation in Odoo
We design the Odoo CRM schema based on the B2C-to-B2B split rule agreed during discovery. This includes creating all custom ir.model.fields on crm.lead and res.partner (matching Selligent field names and inferred types), creating crm.lead.tag records for each Selligent tag, configuring crm.team records to match Selligent user role groupings, and creating any required mail.message.subtype records for engagement type categorization. Schema changes deploy via XML-RPC into a Sandbox database first for validation before production.
Sandbox migration and reconciliation
We run a full migration into an Odoo Sandbox database using a representative data sample (at least 1,000 contacts, all action lists, all custom fields, and a subset of engagement history). The customer's CRM lead reconciles record counts, spot-checks 25-50 randomly sampled records against the Selligent source, and validates that tag assignments and custom field values are correct. Any mapping corrections (field type mismatches, split rule adjustments, tag normalization) are resolved in sandbox before production migration begins.
Owner reconciliation and user provisioning
We extract every distinct Selligent owner referenced on Individual records and match by email against Odoo res.users. Unmatched owners go to a reconciliation queue for the customer's admin to provision. User-to-team assignment (crm.team) maps from Selligent organizational role groups. This step gates the contact migration because OwnerId (user_id on crm.lead) is a required field for most Odoo CRM workflows.
Production migration in dependency order
We run production migration in record-dependency order: res.partner (organization parent records, from Selligent organization custom properties), crm.lead (all contacts with split rule applied), crm.lead.tag (tag assignments linked by USERID), crm.opportunity (action-list-as-pipeline records), crm.activity and mail.message (engagement history via Odoo XML-RPC with batch chunking), and finally custom field value population for any fields not handled in the initial import. Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and journey rebuild handoff
We freeze Selligent 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 validate record counts, custom field completeness, and tag assignments against the discovery baseline. We deliver the journey rebuild inventory, campaign content inventory, webhook recreation guide, and SMS configuration notes as written documentation. We offer a one-week hypercare window to resolve post-cutover reconciliation issues. Journey rebuild in Odoo Studio and post-migration admin support are outside standard scope and can be scoped as a separate engagement.
Platform deep dives
Selligent by Marigold
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between Selligent by Marigold and Odoo CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Selligent by Marigold and Odoo CRM.
Object compatibility
All 8 core objects map 1:1 between Selligent by Marigold 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
Selligent by Marigold: Not publicly quantified; connector documentation shows batched behavior at 2500 requests or 10-minute windows.
Data volume sensitivity
Selligent by Marigold 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 Selligent by Marigold to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Selligent by Marigold 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 Selligent by Marigold
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.