CRM migration
Field-level mapping, validation, and rollback between Splio and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Splio
Source
Odoo CRM
Destination
Compatibility
8 of 12
objects map 1:1 between Splio and Odoo CRM.
Complexity
BStandard
Timeline
4-6 weeks
Overview
Splio and Odoo CRM serve different primary functions: Splio is an omnichannel marketing automation and loyalty platform built for retail brands, while Odoo CRM is a sales pipeline and contact management system within the broader Odoo ERP suite. Migrating from Splio to Odoo CRM is primarily a data consolidation move for retail companies that have outgrown Splio's limited B2B and ERP-adjacent capabilities and want to unify sales, inventory, and CRM data under a single ERP roof. We extract Splio's contact-centric objects (Contacts, Orders, Products, Loyalty memberships, Rewards, Stores, Interactions) and map them to Odoo's partner-centric model. The most critical migration challenge is Splio's silent exclusion of contacts without list membership from exports — we audit for orphan contacts before every export run. Loyalty and reward data must migrate before any campaign target segments are rebuilt in Odoo, because Odoo segments reference migrated partner records. We do not migrate Splio campaign designs, automation filters, or loyalty program rule logic; we deliver a written inventory of these for your Odoo admin to rebuild using Odoo Studio or Odoo's Action Rules.
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 Splio 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.
Splio
Contact
Odoo CRM
res.partner
1:1Splio Contacts map to Odoo res.partner records. The primary mapping uses email as the dedupe key. Splio custom fields in the contacts scope declare as Odoo Studio custom fields on res.partner before import. Critical: we audit for orphan contacts (contacts without any list membership) before the Splio export, assign them to a catch-all Odoo partner tag, and verify post-export counts match the full Splio contact total. Odoo has no equivalent to Splio's list-membership gate; all active partners appear in reporting by default.
Splio
Contact segment
Odoo CRM
res.partner.category
lossySplio list memberships map to Odoo res.partner.category (tags). Each Splio list becomes an Odoo partner category, and membership is set during partner import via SQL or partner import tool. These tags are used to rebuild Splio filter-based campaign targets inside Odoo's segment filters and Action Rules post-migration.
Splio
Company / Store
Odoo CRM
res.partner (company_type=company)
1:1Splio Store records map to Odoo res.partner with company_type=company. The store's address, city, country, and location coordinates map to Odoo's street, city, country_id, and partner_latitude/longitude fields. Custom fields in the stores scope declare on res.partner using Odoo Studio before import. Stores with loyalty program assignments link to the relevant Odoo Loyalty program via a Many2one field.
Splio
Order
Odoo CRM
sale.order
1:1Splio Orders map to Odoo sale.order records. Each Splio order links to a contact (res.partner) and carries order_items referencing products. We resolve the partner_id from the contact migration before inserting sale.order records. Splio's order_id replacement on duplicate imports has no Odoo equivalent; we use the Splio external_id mapped to Odoo's client_order_ref field and rely on the customer's dedupe preference (upsert by client_order_ref or insert-only) during import. Order dates and confirm timestamps migrate as date_order and date_confirm.
Splio
Order_item
Odoo CRM
sale.order.line
1:1Splio order_items map to Odoo sale.order.line records. Each line requires a resolved product_id from the product migration and a resolved order_id from the sale.order parent migration. We validate product existence in Odoo before inserting lines; any order_item referencing a missing product is logged to a quarantine report for the customer's admin to resolve (either create the product or reassign the line). Quantity, unit_price, and discount migrate directly.
Splio
Product
Odoo CRM
product.product
1:1Splio Products map to Odoo product.product records. The product name, sku (product_code), and barcode migrate as name, default_code, and barcode respectively. Custom fields in the products scope declare on product.product via Odoo Studio before migration. Products are inserted before order_items so that the product_id lookup is satisfied at the moment of order line import.
Splio
Loyalty membership
Odoo CRM
loyalty.card
1:1Splio Loyalty memberships map to Odoo loyalty.card records within the Loyalty program. Each card carries the card_code (mapped to Odoo's code field), nq_points (non-quantized points, stored in Odoo's points field with decimal precision), q_points (quantized points), and the program tier mapped to Odoo's loyalty program level. The loyalty.card is linked to the migrated res.partner via partner_id. We sequence loyalty migration before campaign target rebuilding because Splio filter-based segments reference loyalty-tier data that must exist in Odoo first.
Splio
Reward
Odoo CRM
loyalty.reward
lossySplio Rewards (program-level reward definitions) and reward attributions (which contacts received which rewards) map to Odoo loyalty.reward records within the relevant loyalty.program. Each Splio reward maps to a configured Odoo loyalty reward of matching type (discount, free product, free shipping). The attribution history migrates as loyalty.card line records tracking reward redemption. We map reward attributions after loyalty.card is resolved, ensuring the contact relationship is satisfied.
Splio
Interaction (custom event)
Odoo CRM
mail.message or crm.track
lossySplio Interactions are custom events sent via API for loyalty point credits and campaign triggers. These map to Odoo mail.message records on the res.partner timeline, tagged with a custom subtype to distinguish them from standard activities. Event type, timestamp, and payload data migrate as custom message fields. Customers planning to use Odoo's CRM tracking instead reclassify these events during scoping.
Splio
Blocklist
Odoo CRM
mail.blacklist
1:1Splio blocklists migrate as Odoo mail.blacklist entries. Email addresses on the Splio blocklist insert into Odoo's blacklist table with active=True so that mass mailing respects suppression. We verify the blocklist is honored during any post-migration test email send before go-live.
Splio
Custom fields (contacts, stores, products, orders, rewards, loyalty)
Odoo CRM
ir.model.fields (Studio custom)
lossySplio's per-scope custom fields (contacts, stores, products, orders, rewards, loyalty) are declared in Odoo using Odoo Studio or the ir.model.fields API before data migration begins. Each scope's custom fields become custom fields on the relevant Odoo model (res.partner, product.product, sale.order, loyalty.card, loyalty.reward). We do not migrate Splio campaign filter logic as code; the customer uses migrated custom field data within Odoo's Action Rules and Studio filters to rebuild targeting logic.
Splio
Owner
Odoo CRM
res.users
1:1Splio Owners referenced on Contacts, Orders, and Loyalty memberships map to Odoo res.users by email match. Any Splio Owner without a matching Odoo User is held in a reconciliation queue; the customer's Odoo admin provisions missing users before the production migration begins. Owner resolution is required before sale.order import because Odoo requires an effective user_id on orders.
| Splio | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | res.partner1:1 | Fully supported | |
| Contact segment | res.partner.categorylossy | Fully supported | |
| Company / Store | res.partner (company_type=company)1:1 | Fully supported | |
| Order | sale.order1:1 | Fully supported | |
| Order_item | sale.order.line1:1 | Fully supported | |
| Product | product.product1:1 | Fully supported | |
| Loyalty membership | loyalty.card1:1 | Fully supported | |
| Reward | loyalty.rewardlossy | Fully supported | |
| Interaction (custom event) | mail.message or crm.tracklossy | Fully supported | |
| Blocklist | mail.blacklist1:1 | Fully supported | |
| Custom fields (contacts, stores, products, orders, rewards, loyalty) | ir.model.fields (Studio custom)lossy | Fully supported | |
| Owner | 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.
Splio gotchas
Contacts without list membership are silently excluded from exports
Filter preview counts differ from actual export counts
Campaign migration requires sequential data-then-filters ordering
API rate limits are not publicly documented
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 Splio audit
We audit the source Splio environment across all scopes: contact volume, list membership distribution, orphan contact count, order volume and structure, product catalog size, loyalty program tiers and point rules, reward definitions, store records, interaction event types, and blocklist size. We also extract every Splio custom field across all scopes (contacts, stores, products, orders, rewards, loyalty) with field type, required status, and picklist values. This audit output is a written migration scope that identifies any data requiring pre-cleanup before export.
Schema design and custom field declaration in Odoo
We design the destination Odoo schema. This includes creating Odoo custom fields via Odoo Studio (or ir.model.fields API) for every Splio custom field on the relevant models before any data import. We configure Odoo partner categories from Splio list memberships, configure the Odoo Loyalty program matching Splio's tier structure, create product.product records for the Splio product catalog, and define sale.order team and warehouse assignments. Schema design is validated in a staging Odoo database before production migration begins.
Data export and orphan contact resolution in Splio
We run the Splio export with full audit before every extract. The first pass identifies contacts without any list membership (orphans), assigns them to a catch-all partner category in Odoo, and documents the count. We then export all contact records and verify the post-export count matches Splio's total contact count. Any gap triggers a second export run with adjusted filter criteria. Products export second, then orders (parents only), then order_items, then loyalty memberships and reward attributions, then interaction events.
Staging migration and reconciliation
We run a full migration into a staging Odoo database (clone of production or separate test instance). Record counts are reconciled per object (contacts in vs. res.partner count, orders in vs. sale.order count, loyalty cards in vs. loyalty.card count). The customer's team spot-checks 25-50 records across objects against the Splio source. Custom field values are validated for data type consistency. Schema and mapping corrections happen in staging before production migration begins.
Production migration in dependency order
We run production migration in strict dependency order: products first (product.product), then partner categories (res.partner.category), then contacts (res.partner with company_type=contact), then stores (res.partner with company_type=company), then sale.order parents (with partner_id resolved), then sale.order.line records, then loyalty.program and loyalty.card records (with partner_id resolved), then loyalty.reward and reward attribution lines, then blocklist entries, then interaction event messages. Each phase emits a reconciliation report before the next phase begins. Owner resolution (Splio Owner to Odoo res.users by email) is completed before sale.order migration.
Cutover, validation, and automation inventory handoff
We freeze Splio writes during the cutover window, run a final delta migration of any records modified during migration, then set Odoo as the system of record. We deliver a written inventory of all Splio campaign filters, automation triggers, loyalty program rule configurations, and reward logic for the customer's Odoo admin to rebuild using Odoo Action Rules, Studio filters, and the Loyalty program configuration. We do not rebuild Splio campaigns, filters, or loyalty rule logic as Odoo code; that work is a separate scope for the customer's Odoo admin or an Odoo implementation partner. We support a one-week hypercare window for reconciliation issues raised during the first production week.
Platform deep dives
Splio
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 Splio 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
Splio: Not publicly documented in the developer hub — confirmed per integration during scoping.
Data volume sensitivity
Splio 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 Splio to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Splio 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 Splio
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.