CRM migration

Migrate from Splio to Twenty CRM

Field-level mapping, validation, and rollback between Splio and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.

Splio logo

Splio

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

82%

9 of 11

objects map 1:1 between Splio and Twenty CRM.

Complexity

BStandard

Timeline

3-5 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

Field-level fidelity

Every standard and custom field arrives verified.

Schema-aware mapping

AI proposes the map; you confirm before any record moves.

Relationships preserved

Parent–child, lookups, and ownership stay linked.

Full activity history

Calls, emails, meetings — with original timestamps.

Attachments & notes

Documents, uploads, and inline notes move with the record.

Why teams make this switch

Two sides of the same decision

Leaving

Splio logo

Splio

What's pushing teams away

  • Steep onboarding curve—multiple users report it took significant time to train team members, especially for advanced features beyond basic automation.
  • Data integration complexity—contacts and sales data require list membership to be included in exports, which is not immediately obvious and causes unexpected data gaps.
  • Social media integration is limited compared to dedicated social tools, making cross-channel social posting and monitoring difficult within Splio.
  • Limited B2B functionality since the platform is primarily designed for retail and DTC brands, making it a poor fit for companies with complex B2B sales cycles.

Choosing

Twenty CRM logo

Twenty CRM

What's pulling them in

  • Top open-source CRM on GitHub with 40.6K stars, giving teams full source code access and infrastructure ownership without per-feature licensing surprises.
  • Free self-hosting under AGPL-3.0 means unlimited users and custom objects for the cost of cloud infrastructure alone, typically $20–100/month.
  • Pricing page explicitly mocks competitors for charging add-on fees for API access, webhooks, and workflows — transparency that resonates with RevOps teams burned by Salesforce.
  • Unlimited custom objects and fields with no price impact, letting teams shape the data model to their business rather than forcing business into rigid schemas.
  • Modern TypeScript/React/PostgreSQL stack means developer-led teams can extend, self-host, or integrate without fighting legacy architecture.

Object mapping

How Splio objects map to Twenty CRM

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

maps to

Twenty CRM

People

1:1
Fully supported

Splio 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

maps to

Twenty CRM

Company

1:1
Fully supported

Splio 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

maps to

Twenty CRM

Opportunity

1:1
Fully supported

Splio 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

maps to

Twenty CRM

Custom Object (Line Item)

1:1
Fully supported

Splio 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

maps to

Twenty CRM

Standard Product (if available) or Custom Object

1:1
Fully supported

Splio 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

maps to

Twenty CRM

Custom Fields on People

lossy
Fully supported

Splio 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

maps to

Twenty CRM

Custom Object (Reward__c)

1:1
Fully supported

Splio 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

maps to

Twenty CRM

Custom Object (RewardAttribution__c)

1:1
Fully supported

Splio 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

maps to

Twenty CRM

Company or Custom Object

1:1
Fully supported

Splio 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)

maps to

Twenty CRM

Task or Note

1:1
Fully supported

Splio 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

maps to

Twenty CRM

Tag

lossy
Fully supported

Splio 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.

Gotchas + challenges

What specifically takes care here

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 logo

Splio gotchas

High

Contacts without list membership are silently excluded from exports

Medium

Filter preview counts differ from actual export counts

Medium

Campaign migration requires sequential data-then-filters ordering

Low

API rate limits are not publicly documented

Twenty CRM logo

Twenty CRM gotchas

High

Import order is enforced and critical

High

Export limited to 20,000 records and visible columns only

Medium

Soft-deleted records count toward uniqueness and trigger restores

Medium

API rate limits cap at 200 req/min on Organization tier

Low

No native email sequences — follow-up cadences require external tools

Pair-specific challenges

  • Splio silently excludes contacts without list membership from exports

    Splio's standard export skips any contact not assigned to at least one list. This is documented behavior but catches most migration teams off guard. We run a list-membership audit during scoping, assign orphan contacts to a catch-all tag before export, and verify the post-export contact count matches the full Splio contact total. Without this step, 10-30 percent of a database can be lost silently. This is a source-platform gotcha that applies regardless of destination, so we treat it as pair-specific because the remediation (catch-all tag assignment) affects the downstream Twenty schema design.

  • Twenty requires all custom fields pre-created before CSV import

    Twenty's CSV import creates records, not fields. We create all custom fields in Settings → Data Model before importing any data. This includes loyalty fields on People (nq_points, q_points, tier, card_code), custom Opportunity status fields, LineItem__c with its lookups, Reward__c, RewardAttribution__c, and any store-specific fields. Skipping this step causes the import to silently ignore unmapped columns or fail on required field errors. We validate the schema in a Twenty sandbox before production import.

  • Order items require parent order and product records to exist first

    Splio rejects any order_item record if the linked order does not already exist. Twenty enforces similar referential integrity for custom object lookups. We sequence the migration as Products → Contacts → Orders → LineItem__c, with each phase validated before the next begins. A typical order volume of 5,000-20,000 records with line items makes this sequencing the longest phase of a Splio migration. If Splio order IDs are not globally unique (they are scoped to contact in some configurations), we generate a composite key during transformation.

  • Loyalty and reward objects have no native Twenty equivalent

    Splio's loyalty engine (points, tiers, rewards, attributions) has no direct Twenty CRM object. We implement this as custom fields on People and custom objects (Reward__c, RewardAttribution__c). Tier-based discount logic, point expiration rules, and loyalty campaign triggers are not migrated. We deliver a written loyalty program inventory documenting each reward, its point cost, tier eligibility, and expiry policy so the customer's admin can rebuild the program logic in Twenty's Settings or via an external script.

  • Splio campaigns, filters, and automation rules do not migrate

    Splio campaign targeting, filter logic, and loyalty trigger automations are campaign-layer features that have no direct Twenty CRM equivalent. Twenty supports Views (filtered record lists) and webhook-based automations, but Splio's trigger-campaign and AI-driven personalization are managed migration work. We deliver a written inventory of every active Splio campaign, filter condition, and loyalty trigger rule with a recommended Twenty equivalent (View, manual workflow, or external automation). The customer's team rebuilds these in Twenty's Settings UI post-migration.

Migration approach

Six steps for a successful Splio to Twenty CRM data migration

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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

Context on both ends of the pair

Splio logo

Splio

Source

Strengths

  • Native loyalty engine combining points, tiers, and rewards with campaign automation in a single platform.
  • Acquired Tinyclues AI for predictive targeting and product recommendation within the campaign builder.
  • Omnichannel reach across email, SMS, push notifications, and mobile wallet passes.
  • GDPR and consent management tooling built into the platform for EU market compliance.
  • Managed migration services available for campaign design, filter creation, and responsive email coding.

Weaknesses

  • Requires significant onboarding investment; advanced features require technical knowledge beyond the standard UI.
  • Export behavior silently excludes contacts without list membership, causing unexpected data gaps during migration.
  • Social media integration is limited and not competitive with dedicated social management tools.
  • Primarily designed for B2C retail; B2B use cases require significant customization and may not fit well.
  • Pricing is not publicly documented, making budget planning and vendor comparison difficult without direct sales engagement.
Twenty CRM logo

Twenty CRM

Destination

Strengths

  • AGPL-3.0 open-source license with full source code on GitHub — no vendor lock-in, no sunset risk.
  • Unlimited users and unlimited custom objects on self-hosted, with no feature gating based on headcount.
  • REST and GraphQL APIs available on all paid tiers, not locked behind an enterprise add-on fee.
  • MCP server and webhooks shipped as standard features, not premium upgrades.
  • Modern PostgreSQL-backed data model that developer teams can query, extend, and self-host.

Weaknesses

  • Recent v1.0 release means limited production hardening compared to CRMs with multi-year operational track records.
  • No native email sequencing or sales engagement tools — follow-up cadences require a separate platform.
  • No native two-way email sync or inbox integration, requiring third-party connectors for full activity logging.
  • Self-hosting 'free' pricing hides real infrastructure and DevOps costs that stack up over time.
  • Workflow automation is functional but lacks the complexity needed for sophisticated multi-step sales motions.

Complexity grading

How hard is this migration?

Standard CRM migration. 2 of 8 objects need a mapping; the rest are 1:1.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across Splio and Twenty CRM.

  • Object compatibility

    B

    2 of 8 objects need a mapping; the rest are 1:1.

  • Field mapping clarity

    C

    Field mapping is derived from defaults — final spec confirmed during the sample migration.

  • Timeline complexity

    B

    8-object category — typical timelines run 2–7 days end-to-end.

  • API constraints

    B

    Splio: Not publicly documented in the developer hub — confirmed per integration during scoping.

  • Data volume sensitivity

    A

    Splio exposes a bulk API — large-volume migrations stream efficiently.

Estimator

Estimate your Splio to Twenty CRM migration cost

Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.

Step 1

What are you migrating?

Pick a category, then your source and destination platforms.

Category

FAQ

Frequently asked questions about Splio to Twenty CRM data migrations

Answers to the questions buyers ask most during Splio to Twenty CRM migration scoping. Not seeing yours? Book a call.

Can't find your answer?

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 consultation

Migrations under 15,000 Contacts with straightforward loyalty fields (no fractional points, no tier rules) and under 10,000 Orders typically land between three and five weeks. Migrations with complex loyalty structures, large order volumes (over 20,000 line items), or multiple store locations move to six to ten weeks because of custom object schema design, dependency sequencing, and sandbox validation. Timeline assumes the customer's team is available to review sandbox results and approve the production cutover within a few business days per phase.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Splio.
Land in Twenty CRM, intact.

Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.

Accuracy guarantee Rollback included Quote in 1 business day