CRM migration
Field-level mapping, validation, and rollback between Splio and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
Splio
Source
Twenty CRM
Destination
Compatibility
9 of 11
objects map 1:1 between Splio and Twenty CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from Splio to Twenty CRM is a structural migration that trades a B2C retail and loyalty platform for a self-hosted open-source CRM. Splio's contact-centric data model—where loyalty points, tier memberships, and reward attributions are attached directly to contacts—requires custom field and custom object work in Twenty since Twenty has no native loyalty engine. We audit Splio's list membership before export, assign orphan contacts to a catch-all segment, and migrate products before contacts before orders so that Splio's order-item-to-product references resolve correctly. Engagement events (loyalty interactions, point credits) migrate as Task or Note records. Splio's campaigns, filters, and loyalty program rules do not migrate as code; we deliver a written inventory of every active campaign and automation requiring rebuild in Twenty's settings UI. Self-hosting Twenty eliminates Splio's recurring enterprise license cost, but the customer's team assumes infrastructure ownership and manual configuration of everything Splio managed.
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 Twenty 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
Twenty CRM
People
1:1Splio Contacts map directly to Twenty People records. We audit list membership before export and assign orphan contacts (those with no list assignment) to a catch-all tag so they are not silently excluded. Contact custom fields (scope: contacts) pre-created in Twenty Settings → Data Model before import. Email, phone, address, and date fields are type-mapped directly; Splio loyalty properties (card_code, nq_points, q_points, tier) migrate to custom fields on People.
Splio
Company
Twenty CRM
Company
1:1Splio Company records map to Twenty Company records. The company name becomes the Company name field; domain and website migrate to standard Company fields. Companies are created before People so that the workspace relationship on People resolves correctly during import.
Splio
Order
Twenty CRM
Opportunity
1:1Splio Orders map to Twenty Opportunity records. The order total maps to Opportunity Amount; order date maps to Opportunity close date; contact reference maps to the related People record. Splio's order status (pending, confirmed, shipped, cancelled) maps to a custom Opportunity status field. Orders are migrated after both Products and Contacts exist in Twenty so that the line-item references resolve correctly.
Splio
Order Item
Twenty CRM
Custom Object (Line Item)
1:1Splio Order Items (individual line items within an order) map to a custom object (LineItem__c) that we create in Twenty. Each LineItem__c record links to its parent Opportunity via a lookup relationship and to the Product via a ProductId lookup. Splio requires the parent order to exist before accepting line items; we enforce the same dependency by migrating LineItem__c after Opportunity creation completes. Quantity and unit price map to custom numeric fields.
Splio
Product
Twenty CRM
Standard Product (if available) or Custom Object
1:1Splio Products map to a custom Product__c object in Twenty (Twenty's standard product model is evolving; we use a consistent custom object approach). Product name, SKU (hs_sku equivalent), price, and category migrate as text and numeric fields. Products are migrated before Order Items so that product references are valid at line-item import time. Product custom fields (scope: products) are pre-created in Twenty before import.
Splio
Loyalty Membership
Twenty CRM
Custom Fields on People
lossySplio Loyalty Membership records carry card_code, nq_points (non-quantized points), q_points (quantized points), and tier. We migrate these as custom fields on the People object: loyalty_card_code__c, loyalty_nq_points__c, loyalty_q_points__c, and loyalty_tier__c. Fractional point values are preserved as numeric (decimal) fields. If the customer uses multi-tier loyalty rules, we document the tier thresholds as a written inventory for the customer to implement as custom logic in Twenty.
Splio
Reward Definition
Twenty CRM
Custom Object (Reward__c)
1:1Splio Reward definitions (what rewards exist in the program) map to a custom Reward__c object in Twenty. Fields include reward_name__c, reward_type__c (discount, free product, points multiplier), point_cost__c, and expiry_days__c. Reward definitions are migrated before reward attributions so that the lookup relationship is satisfied.
Splio
Reward Attribution
Twenty CRM
Custom Object (RewardAttribution__c)
1:1Splio reward attributions (which contacts received which rewards) map to a custom RewardAttribution__c object linked to People (the contact) and Reward__c (the reward definition). Fields include attribution_date__c, points_redeemed__c, and reward_status__c. This object is migrated after both People and Reward__c exist in Twenty.
Splio
Store
Twenty CRM
Company or Custom Object
1:1Splio Store records represent physical retail locations and e-commerce sites. We map stores to Twenty Company records with a custom store_type__c field (physical, ecommerce, hybrid) or to a custom Store__c object if the customer needs to preserve store-specific attributes (region, manager, hours). The choice is made during scoping based on whether store records need to participate in reports alongside account data.
Splio
Interaction (custom events)
Twenty CRM
Task or Note
1:1Splio Interactions are custom API events used to trigger loyalty point credits, milestone celebrations, and programmatic use cases. We export interaction event logs and migrate them as Task records attached to the relevant People record. The task subject carries the interaction type; the task description carries event metadata and timestamp. Large-volume interaction migrations (over 100,000 events) are chunked and batch-loaded via Twenty's import API.
Splio
List Membership
Twenty CRM
Tag
lossySplio Lists drive contact segmentation and export eligibility. We preserve list memberships as Tags in Twenty. Each Splio list name becomes a tag label; contacts with multiple list memberships receive multiple tags. Blocklists are mapped to a suppression flag (opt_out__c = true) on the People record so that Twenty respects the suppression across all channels.
| Splio | Twenty CRM | Compatibility | |
|---|---|---|---|
| Contact | People1:1 | Fully supported | |
| Company | Company1:1 | Fully supported | |
| Order | Opportunity1:1 | Fully supported | |
| Order Item | Custom Object (Line Item)1:1 | Fully supported | |
| Product | Standard Product (if available) or Custom Object1:1 | Fully supported | |
| Loyalty Membership | Custom Fields on Peoplelossy | Fully supported | |
| Reward Definition | Custom Object (Reward__c)1:1 | Fully supported | |
| Reward Attribution | Custom Object (RewardAttribution__c)1:1 | Fully supported | |
| Store | Company or Custom Object1:1 | Fully supported | |
| Interaction (custom events) | Task or Note1:1 | Fully supported | |
| List Membership | Taglossy | 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
Twenty CRM gotchas
Import order is enforced and critical
Export limited to 20,000 records and visible columns only
Soft-deleted records count toward uniqueness and trigger restores
API rate limits cap at 200 req/min on Organization tier
No native email sequences — follow-up cadences require external tools
Pair-specific challenges
Migration approach
Splio data audit and list-membership remediation
We export a full Splio contact list and cross-reference it against list membership. Any contact without a list assignment is flagged as an orphan and assigned to a catch-all tag before export. We also audit loyalty membership records (card_code, nq_points, q_points, tier), reward definitions, store records, and interaction event volumes. This audit produces the migration scope, the orphan-contact remediation plan, and the field count for custom object design in Twenty.
Twenty workspace schema design
We design the destination schema in Twenty. This includes creating custom fields on People (loyalty fields, opt_out flag), creating custom objects (Reward__c, RewardAttribution__c, LineItem__c, Product__c, and optionally Store__c), configuring lookups between objects, and defining tag labels from Splio list names. Schema is validated in a Twenty sandbox before production. If the customer uses the Twenty Cloud tier, we configure the workspace via Settings → Data Model; for self-hosted, we can also use the database directly if the customer prefers.
Sandbox migration and reconciliation
We run a full migration into Twenty's sandbox environment (or a staging instance) using production-like data volume. The customer's operations lead reconciles record counts against Splio source totals, spot-checks 25-50 records across each object type, and validates that loyalty fields (points, tier, card_code) are populated correctly. Tag mappings from Splio list names are verified. Any mapping corrections happen in this phase before production migration begins.
Production migration in dependency order
We run production migration in record-dependency order: Product__c (first, because LineItem__c references it) → People (with loyalty fields, after Companies exist) → Company → Opportunity (order records) → LineItem__c (with Opportunity and Product lookups resolved) → Reward__c → RewardAttribution__c → Interaction history as Task records → Tags and blocklist flags. Each phase emits a row-count reconciliation report before the next phase begins. Orphan contacts from step one are included in the People import with their catch-all tag.
Campaign and loyalty automation inventory delivery
We deliver a written inventory of every active Splio campaign, filter condition, loyalty trigger rule, and reward program configuration. Each entry describes the trigger, conditions, actions, and a recommended Twenty equivalent (a View definition, a manual workflow note, or an external automation script). We do not rebuild these in Twenty as part of the migration scope. The customer's admin uses this document to recreate the campaign logic post-migration.
Cutover, delta sync, and post-migration validation
We freeze Splio writes during the cutover window, run a final delta migration of any records created or modified since the last sync, then enable Twenty as the system of record. We deliver a migration summary report showing record counts per object, tag assignments, and any records that could not be migrated (with reason codes). We support a five-business-day hypercare window where we resolve reconciliation issues raised by the customer's team. We do not provide ongoing admin support, training, or workflow rebuild as standard scope; these are separate engagements.
Platform deep dives
Splio
Source
Strengths
Weaknesses
Twenty CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 2 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 Twenty CRM.
Object compatibility
2 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 Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your Splio to Twenty 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 Twenty 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.