CRM migration
Field-level mapping, validation, and rollback between X2CRM and Freshsales. We move data and schema; workflows are rebuilt natively in Freshsales.
X2CRM
Source
Freshsales
Destination
Compatibility
8 of 10
objects map 1:1 between X2CRM and Freshsales.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from X2CRM to Freshsales is a shift from a self-hosted open-source CRM with per-admin pricing to a cloud-native SMB platform with per-user tiers and built-in AI. X2CRM organizes data across eight unified modules (Marketing, Sales, Service, and others) with X2Flow as the automation engine; Freshsales uses the standard CRM triad of Contacts, Accounts, and Deals with Freddy AI for lead scoring. We extract via the X2CRM REST API handling the Platinum-tier rate limit gate, map each X2CRM module to its Freshsales equivalent, and preserve Activity timeline records (calls, emails, meetings, tasks) through Freshsales API imports. X2Flow workflows and self-hosted file attachments require special handling: workflow logic is documented for manual rebuild, and self-hosted file stores are accessed via coordinated IT access before re-upload to Freshsales.
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 X2CRM 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.
X2CRM
Contacts
Freshsales
Contact
1:1X2CRM Contacts map directly to Freshsales Contact records via the X2CRM REST API contacts endpoint using application/json payloads. We preserve name fields (firstName, lastName), email, phone, address, and any custom contact fields discovered during schema scoping. Email serves as the dedupe key during Freshsales import. Historical tags applied to X2CRM Contacts migrate as Freshsales contact tags via the tag reapplication phase after initial import.
X2CRM
Accounts
Freshsales
Account
1:1X2CRM Accounts (companies and organizations) map to Freshsales Account. We preserve company name, website, industry, annual revenue, employee count, and linked contact relationships. Account-Contact linkage is maintained by resolving the X2CRM accountId foreign key to the corresponding Freshsales Account record ID at import time. X2CRM's lifetime value field on Account maps to a Freshsales custom numeric field created during schema setup.
X2CRM
Deals
Freshsales
Deal
1:1X2CRM Deals map to Freshsales Deal records. We preserve deal name, amount, stage, probability, expected close date, owner, and linked Account. X2CRM pipeline stage names are mapped to Freshsales Deal stages during configuration, and deal probability percentages transfer directly. Activity history logs attached to X2CRM Deals migrate as Freshsales Deal activities (calls, emails, meetings, tasks) linked via the deal relationship ID.
X2CRM
Products
Freshsales
Product
1:1X2CRM Products catalog items map to Freshsales Product records, preserving SKU (mapped from X2CRM productCode), name, unit price, and description. Products are imported before Deals so that Deal-Product line-item associations can be resolved during Deal import. X2CRM price book associations transfer as Freshsales Product pricing records.
X2CRM
Services
Freshsales
Deal
lossyX2CRM Services track recurring service contracts or subscriptions linked to Accounts. Since Freshsales does not have a native Services module, we map Services to Deals with a custom Service Contract record type. Renewal dates, contract status, and associated Account links are preserved in custom Deal fields created during schema setup.
X2CRM
Marketing Campaigns
Freshsales
Contacts (with Tag)
lossyX2CRM Marketing Campaigns (name, type, status, mailing lists) have no direct Freshsales equivalent. We migrate campaign names as Freshsales contact tags prefixed with Campaign: and document the campaign list membership for the customer to rebuild using Freshsales Lists or Freshmarketer. Email campaign templates migrate as static HTML documents delivered in the handoff package.
X2CRM
Activities (Calls, Meetings, Tasks)
Freshsales
Activities (Calls, Meetings, Tasks)
1:1X2CRM Activity records (calls, meetings, tasks with timestamps, owners, and related Contacts or Deals) map to Freshsales Activity records. We sequence Activities in chronological order and resolve related record IDs to their new Freshsales Contact and Deal IDs. Call duration and disposition from X2CRM migrate as Freshsales activity custom fields. Meeting location and attendee information preserves.
X2CRM
Tags
Freshsales
Tag
1:1Tags are standalone label records in X2CRM that apply across multiple object types. We migrate all Tags as Freshsales Tag records and then reapply them to target Contacts, Accounts, and Deals post-import using the Freshsales API. The many-to-many tag associations are preserved in a tag-mapping table during migration scoping.
X2CRM
Custom Fields
Freshsales
Custom Fields
1:1X2CRM custom fields added via the module builder vary by module and require field-level mapping during scoping. We inspect the X2CRM field schema via API discovery and align each custom field to an equivalent Freshsales custom field, creating the destination field in Freshsales before import begins. Field types (text, number, date, dropdown, checkbox) are mapped to Freshsales field types at configuration time.
X2CRM
Attachments
Freshsales
Attachments
1:1X2CRM attachments are stored as file references or blobs linked to records. We download files via X2CRM API or file store access and re-upload to Freshsales via the Freshsales file attachment API, linking each file to the target Contact, Account, or Deal record. For self-hosted X2CRM instances, we coordinate SSH or admin panel access with the customer's IT team to expose the upload directory for file extraction.
| X2CRM | Freshsales | Compatibility | |
|---|---|---|---|
| Contacts | Contact1:1 | Fully supported | |
| Accounts | Account1:1 | Fully supported | |
| Deals | Deal1:1 | Fully supported | |
| Products | Product1:1 | Fully supported | |
| Services | Deallossy | Fully supported | |
| Marketing Campaigns | Contacts (with Tag)lossy | Fully supported | |
| Activities (Calls, Meetings, Tasks) | Activities (Calls, Meetings, Tasks)1:1 | Fully supported | |
| Tags | Tag1:1 | Fully supported | |
| Custom Fields | Custom Fields1:1 | Mapping required | |
| Attachments | Attachments1:1 | 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.
X2CRM gotchas
Rate limiting is gated behind Platinum Edition
Workflow automation (X2Flow) does not export as portable data
API requires Content-Type: application/json on all write requests
Data validation errors return HTTP 422 and may halt batch imports
Self-hosted attachment storage may require manual file extraction
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 license sizing
We audit the source X2CRM instance across edition (Starter, Business, Platinum), active user count versus admin-seat count, custom field schema per module, X2Flow workflow count and complexity, attachment volume and storage backend (cloud-hosted vs self-hosted), and record counts for Contacts, Accounts, Deals, Products, Services, and Activities. We also confirm whether the instance is self-hosted (requiring IT coordination) or cloud-hosted. The discovery output is a written migration scope and a Freshsales plan recommendation (Growth at $9/user for teams needing built-in phone/email/chat; Pro at $39/user for advanced automation; Enterprise at $59/user for full customization).
Schema design and field mapping
We design the destination schema in Freshsales, creating custom fields to capture X2CRM data that does not have a direct Freshsales equivalent. This includes mapping X2CRM custom module fields to Freshsales custom contact, account, and deal fields. We configure Deal stages to match the X2CRM pipeline stage names, probabilities, and order. Tag structures from X2CRM are designed as Freshsales Tags. Services module data is mapped to a Deal record type with custom renewal and contract fields.
Attachment extraction (self-hosted coordination)
If the X2CRM instance is self-hosted, we coordinate with the customer's IT team to establish secure access to the file attachment storage backend. We extract all linked files, validate file integrity, and organize them for re-upload to Freshsales. This step is sequential with schema design and must complete before the production migration phase begins.
Dry-run migration and reconciliation
We run a full migration into a Freshsales trial or sandbox environment using production-like data volume. The customer's operations lead reconciles record counts (Contacts in, Accounts in, Deals in, Activities in), spot-checks 25-50 random records against the X2CRM source, and validates that tag associations, deal-owner assignments, and activity timelines are correct. Any field mapping corrections happen during this phase. X2Flow workflow logic is documented during discovery and reviewed by the customer before production migration.
Production migration in dependency order
We run production migration in record-dependency order: Tags (established first for tag reapplication later), Accounts (from X2CRM Accounts), Contacts (with email dedupe and tag application), Deals (with AccountId and OwnerId resolved), Products (for deal line-item association), Activities (calls, emails, meetings, tasks with parent-record IDs resolved), and Custom Fields (mapped at field level per module). Attachments are uploaded via the Freshsales file attachment API after parent records are confirmed. Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and workflow handoff
We freeze X2CRM writes during cutover, run a final delta migration of any records modified during the migration window, then enable Freshsales as the system of record. We deliver the X2Flow Workflow Reconstruction Document to the customer's admin team, mapping each X2Flow trigger and action to an equivalent Freshsales Workflow Automation. We support a one-week hypercare window where we resolve any reconciliation issues. We do not rebuild X2Flow workflows inside the migration scope; that is a separate engagement or an internal admin task.
Platform deep dives
X2CRM
Source
Strengths
Weaknesses
Freshsales
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 X2CRM and Freshsales.
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
X2CRM: Not publicly documented. X2CRM is an open-source / self-hosted CRM, so practical throughput is bounded by the customer's PHP/MySQL deployment rather than a vendor-imposed limit. We benchmark export queries against the customer's hosted instance before the cutover sync..
Data volume sensitivity
X2CRM doesn't expose a bulk API — REST + parallelization used for high-volume runs.
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 X2CRM to Freshsales migration scoping. Not seeing yours? Book a call.
Walk through your X2CRM 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 X2CRM
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.