CRM migration
Field-level mapping, validation, and rollback between Splio and Freshsales. We move data and schema; workflows are rebuilt natively in Freshsales.
Splio
Source
Freshsales
Destination
Compatibility
3 of 8
objects map 1:1 between Splio and Freshsales.
Complexity
BStandard
Timeline
2-4 weeks
Overview
Splio and Freshsales serve different operational functions, and that mismatch shapes every migration. Splio is a retail-centric marketing automation and loyalty platform whose primary objects are Contacts, Orders, Products, Loyalty memberships, Rewards, Stores, and custom Interactions. Freshsales is a sales CRM built on the Leads-Contacts-Accounts-Deals-Activities model from the Freshworks suite. The migration is a structural translation: loyalty point balances, tier names, and card codes have no native Freshsales equivalent and migrate as custom fields on the Contact record; Splio Orders map to Deals with line-item Tasks to preserve purchase history; and Splio Interactions (custom events) map to Freshsales Tasks or Events depending on whether they represent point-in-time activities or tracked engagements. Splio's silent exclusion of contacts without list membership is the highest-severity gotcha in this pair—without a pre-export list-membership audit, a significant portion of the contact database is silently dropped. We do not migrate Splio campaigns, automation filters, or loyalty program rules as code; we deliver a written inventory of these for your admin to rebuild in Freshsales Workflows after cutover.
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 Freshsales, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
Splio
Contact
Freshsales
Lead and Contact (split required)
1:manySplio Contacts map to Freshsales Lead for unqualified prospects and Contact for qualified buyers or existing customers. We resolve the split using Splio's loyalty tier (if set) and order history presence as proxies: contacts with prior orders or loyalty memberships become Contacts attached to an Account; contacts without either become Leads. The original Splio contact_id is preserved in a custom field splio_contact_id__c on both objects. Pre-migration, we audit list membership and assign orphan contacts (those with no list) to a catch-all segment before export to avoid the silent exclusion gap.
Splio
Order
Freshsales
Deal (Opportunity)
1:1Splio Orders map to Freshsales Deal records. The Splio order_id becomes a custom field splio_order_id__c on the Deal for audit traceability. Order date becomes Deal Created Date; order total maps to Deal Amount; order status (pending, completed, cancelled) maps to a custom picklist field order_status__c. Splio supports order replacement on re-import with the same order_id; Freshsales Deals are unique by external_id__c so we use splio_order_id__c as the external_id to prevent duplication.
Splio
Order_item
Freshsales
Task or Product2 line
lossyOrder items (line items within a Splio Order) do not have a direct Freshsales equivalent. For migrations where line-item detail is critical for reporting, we create a Task per order item with a custom order_item_detail__c field carrying the product name, quantity, and price as a formatted string, or we map products to Freshsales Product2 records and link them via a Deal Product association if the customer is on a Freshsales plan that supports Products. The mapping strategy is confirmed during scoping.
Splio
Product
Freshsales
Product2
1:1Splio Products map to Freshsales Product2 records. Product code, name, and price migrate directly. Products must exist in Freshsales before any order item that references them, so we sequence Product migration before Order migration. Custom fields on Splio products (products scope) migrate as custom fields on Product2.
Splio
Loyalty membership
Freshsales
Contact custom fields + Loyalty lookup object
lossyLoyalty membership data (card_code, nq_points, q_points, tier, membership_start_date) has no native Freshsales equivalent and migrates as custom Contact fields: loyalty_card_code__c, loyalty_nq_points__c, loyalty_q_points__c, loyalty_tier__c, loyalty_start_date__c. If the customer requires a queryable loyalty history (reward attributions over time), we create a Loyalty_Activity__c custom object with a lookup to Contact and fields for activity_type, points_delta, and timestamp. We do not migrate loyalty program rules or tier logic as code; these are documented for admin rebuild in Freshsales Workflows.
Splio
Reward and reward attribution
Freshsales
Contact custom fields or Loyalty_Activity__c
lossyReward definitions at the program level are documented as a configuration inventory. Individual reward attributions (which contact received which reward and when) migrate as records in the Loyalty_Activity__c custom object with activity_type = 'Reward', points_delta (if points-based), reward_name__c, and attribution_date__c. The reward attribution history is preserved for reporting but does not trigger any automation in Freshsales without explicit workflow rebuild.
Splio
Store
Freshsales
Location or Account
1:1Splio Store records (physical retail locations and e-commerce sites) map to Freshsales Location records if the destination account has the Locations feature enabled, or to a custom Account record with a store_type__c picklist set to 'Physical Store' or 'E-commerce'. Store attributes (address, location, custom fields in the stores scope) migrate as typed fields on the destination record.
Splio
Interaction (custom events)
Freshsales
Task or Event
lossySplio Interactions are custom events sent via API for loyalty credits, purchase triggers, and behavioral tracking. Each Interaction type maps to either Task (if it represents a discrete action with an outcome, such as a loyalty point credit) or Event (if it represents a meeting or appointment-like occurrence). The original Splio interaction_id is preserved in a custom field splio_interaction_id__c. High-volume interaction event logs may exceed CSV import limits; for accounts with more than 100,000 interaction records, we use the Freshsales REST API with pagination and exponential backoff rather than the CSV import path.
| Splio | Freshsales | Compatibility | |
|---|---|---|---|
| Contact | Lead and Contact (split required)1:many | Fully supported | |
| Order | Deal (Opportunity)1:1 | Fully supported | |
| Order_item | Task or Product2 linelossy | Fully supported | |
| Product | Product21:1 | Fully supported | |
| Loyalty membership | Contact custom fields + Loyalty lookup objectlossy | Fully supported | |
| Reward and reward attribution | Contact custom fields or Loyalty_Activity__clossy | Fully supported | |
| Store | Location or Account1:1 | Fully supported | |
| Interaction (custom events) | Task or Eventlossy | 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
Freshsales gotchas
Freddy AI is Pro-tier only despite heavy marketing
Post-migration emails and sequences are disabled
Bot session credits are a one-time 500-session allocation
Phone credits charged per minute with no cap
File storage limits scale with plan tier
Pair-specific challenges
Migration approach
Discovery and list-membership audit
We audit the Splio account across all scopes (contacts, stores, products, orders, loyalty, rewards, interactions) and assess record volumes for each object. The first data-specific step is the list-membership audit: we pull the full contact list, cross-reference against list assignments, and identify orphan contacts. These are assigned to a catch-all segment or flagged explicitly before any export. We pair this with a Freshsales account assessment to confirm whether the destination is greenfield or has existing records, and we review the Freshsales plan tier to determine which features (Products, Locations, custom objects) are available for the migration mapping.
Schema design and custom field creation
We design the destination Freshsales schema before any data moves. This includes creating all custom fields on Contact (loyalty fields: loyalty_card_code__c, loyalty_nq_points__c, loyalty_q_points__c, loyalty_tier__c, loyalty_start_date__c), creating the Loyalty_Activity__c custom object if reward attribution history is in scope, configuring the Deals pipeline with stages mapped from Splio order status, and setting up Account Record Types if multiple business lines are present. Custom fields are created in Freshsales Admin Settings before migration begins and validated against the Splio field inventory.
Data export sequencing from Splio
We export from Splio in dependency order: Products first (required by order_items), then Stores, then Contacts (with list-membership remediation confirmed), then Orders (with order_id preserved), then Loyalty memberships and reward attributions, then Interaction event logs. Each export is validated against the Splio UI count before the next object begins. For Splio's undocumented API rate limits, we batch export requests and confirm ceiling behavior during the first export run. Filter exports follow the same validation protocol: manifest count versus UI count, with remediation triggered if the gap exceeds 2%.
Sandbox migration and reconciliation
We run a full migration into a Freshsales sandbox (or a parallel Freshsales account if the customer does not have sandbox enabled) using the same record volumes as production. The customer's RevOps or admin lead spot-checks 25-50 random records against the Splio source, verifies loyalty field accuracy, confirms order-Deal mapping, and validates interaction-to-Task mapping. Any field mapping corrections, type mismatches, or missing custom field additions are resolved in the sandbox before production migration begins.
Production migration in dependency order
We run production migration in record-dependency order: custom fields and schema (already validated in sandbox), Products, Stores or Locations, Accounts (derived from Stores if mapping to Accounts), Contacts (with the list-membership audit applied and the loyalty split resolved), Leads (for contacts without order history or loyalty membership), Deals (with splio_order_id__c as external_id), Loyalty_Activity__c records, and Interaction event logs via paginated REST API for high-volume histories. Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, delta sync, and automation handoff
We freeze writes in Splio during cutover, run a final delta migration of any records created or modified during the migration window, then enable Freshsales as the system of record. We deliver a written inventory of every Splio campaign, triggered automation, and loyalty rule requiring rebuild in Freshsales Workflows. The inventory includes trigger conditions, filter logic, and recommended Freshsales Workflow equivalent. We do not rebuild Splio campaigns, automation filters, or loyalty program logic as code inside the migration scope. We support a one-week post-cutover window for reconciliation issues raised by the customer's team.
Platform deep dives
Splio
Source
Strengths
Weaknesses
Freshsales
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 3 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 Freshsales.
Object compatibility
3 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 Freshsales migration scoping. Not seeing yours? Book a call.
Walk through your Splio to Freshsales 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 Freshsales
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.