CRM migration

Migrate from X2CRM to Freshsales

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

X2CRM logo

X2CRM

Source

Freshsales

Destination

Freshsales logo

Compatibility

80%

8 of 10

objects map 1:1 between X2CRM and Freshsales.

Complexity

BStandard

Timeline

3-5 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

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

X2CRM logo

X2CRM

What's pushing teams away

  • Customer support quality is frequently criticized as underwhelming and slow to respond, with users citing difficulty reaching knowledgeable staff for technical issues.
  • The platform lacks the ecosystem depth of larger CRMs—no extensive marketplace of third-party integrations, and fewer pre-built connectors than HubSpot or Salesforce.
  • Documentation and community resources are thin compared to competitors, making self-service troubleshooting difficult for non-standard use cases.
  • Scaling to larger teams reveals UI performance issues and limited reporting depth, with users noting the analytics dashboard feels basic for enterprise forecasting needs.

Choosing

Freshsales logo

Freshsales

What's pulling them in

  • Lowest barrier to entry among major CRMs — the free tier supports up to 3 users and includes core CRM functionality before committing to per-seat pricing.
  • Built-in chat, email, and phone reduce reliance on third-party integrations for basic sales communication and contact management.
  • Freddy AI contact scoring and deal insights are included on Pro plans at a lower price than comparable HubSpot tiers.
  • Kanban pipeline views across Contacts, Accounts, and Deals provide visual deal management without requiring custom configuration.
  • Integration with the broader Freshworks ecosystem (Freshdesk, Freshchat, Freshservice) reduces tool sprawl for teams already using Freshworks.

Object mapping

How X2CRM objects map to Freshsales

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

maps to

Freshsales

Contact

1:1
Fully supported

X2CRM 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

maps to

Freshsales

Account

1:1
Fully supported

X2CRM 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

maps to

Freshsales

Deal

1:1
Fully supported

X2CRM 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

maps to

Freshsales

Product

1:1
Fully supported

X2CRM 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

maps to

Freshsales

Deal

lossy
Fully supported

X2CRM 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

maps to

Freshsales

Contacts (with Tag)

lossy
Fully supported

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

maps to

Freshsales

Activities (Calls, Meetings, Tasks)

1:1
Fully supported

X2CRM 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

maps to

Freshsales

Tag

1:1
Fully supported

Tags 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

maps to

Freshsales

Custom Fields

1:1
Mapping required

X2CRM 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

maps to

Freshsales

Attachments

1:1
Mapping required

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

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.

X2CRM logo

X2CRM gotchas

High

Rate limiting is gated behind Platinum Edition

High

Workflow automation (X2Flow) does not export as portable data

Medium

API requires Content-Type: application/json on all write requests

Medium

Data validation errors return HTTP 422 and may halt batch imports

Low

Self-hosted attachment storage may require manual file extraction

Freshsales logo

Freshsales gotchas

Medium

Freddy AI is Pro-tier only despite heavy marketing

High

Post-migration emails and sequences are disabled

Medium

Bot session credits are a one-time 500-session allocation

Medium

Phone credits charged per minute with no cap

Low

File storage limits scale with plan tier

Pair-specific challenges

  • X2Flow workflows do not export as portable data

    X2Flow stores automation logic as trigger-action pairs with UI configuration that is not accessible via the X2CRM REST API in a portable format. Customers moving to Freshsales must rebuild their workflows manually or commission a consultant to reverse-engineer the logic from screenshots and notes. We extract every workflow trigger type, condition criteria, and action sequence during discovery and produce a Workflow Reconstruction Document that maps each X2Flow rule to equivalent Freshsales Workflow Automation logic. The customer's admin rebuilds the automations post-migration using Freshsales workflow builder.

  • Self-hosted X2CRM requires IT coordination for attachment extraction

    X2CRM deployments on self-hosted infrastructure store file attachments as local disk paths rather than in a cloud object store. If migrating from a self-hosted X2CRM instance, the file store must be accessible for extraction, typically requiring SSH or admin panel access to expose the upload directory. We coordinate with the customer's IT team during discovery to confirm the attachment backend, assess the file store volume, and establish secure file transfer before scoping begins. Cloud-hosted X2CRM instances do not have this constraint.

  • X2CRM API requires Content-Type: application/json on all write requests

    The X2CRM REST API returns HTTP 415 (Unsupported Media Type) when a request body is sent without the Content-Type header set to application/json. This is a common mistake when using generic HTTP clients or CSV-to-API import tools. We enforce the application/json header on every X2CRM API write request during export and validate each payload schema before submission to avoid 415 errors during import. This applies to both the source read (X2CRM export) and the destination write (Freshsales import) phases.

  • Platinum-tier rate limiting gate requires scoping confirmation

    The X2CRM REST API returns HTTP 429 (Too Many Requests) only when rate limiting is explicitly enabled in API settings, and this feature is gated behind the Platinum tier. Non-Platinum instances have no documented rate limit, which creates a migration risk: bulk exports against a Platinum-tier X2CRM can be throttled mid-migration without warning. We negotiate a dedicated API token with a raised or disabled rate limit window before migration begins and monitor for 429 responses during the export phase to adjust pacing.

  • X2CRM per-admin pricing shift changes user-account structure in Freshsales

    X2CRM uses a per-admin pricing model where multiple shared-login accounts may operate under a single admin license. Freshsales uses per-user pricing where each seat requires a license. Migrations from X2CRM often reveal more active users than the license count suggests. We audit all X2CRM user records during discovery, flag any discrepancy between admin-seat count and active-user count, and produce a Freshsales license sizing recommendation before migration scoping finalizes. This prevents a scenario where the Freshsales destination is under-licensed for the actual team size.

Migration approach

Six steps for a successful X2CRM to Freshsales data migration

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

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

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

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

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

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

Context on both ends of the pair

X2CRM logo

X2CRM

Source

Strengths

  • Drag-and-drop X2Flow workflow builder accessible to non-developers for basic automation sequences.
  • All-in-one platform includes marketing, sales, and service modules without requiring separate product purchases.
  • Self-hosted and cloud deployment options give organizations control over where their CRM data resides.
  • Open-source codebase with modern language implementation for teams that need code-level customization.

Weaknesses

  • Thin third-party integration ecosystem limits connectivity to tools outside the core CRM modules.
  • Limited review volume on G2 and Capterra (17 reviews) makes it difficult to assess long-term reliability compared to higher-volume competitors.
  • Support responsiveness issues documented across multiple review sources raise risk for teams needing reliable escalation paths.
  • Smaller market presence means fewer certified implementation partners and less community-generated content, tutorials, and troubleshooting guides.
Freshsales logo

Freshsales

Destination

Strengths

  • Generous free tier for small teams with core CRM functionality without per-seat costs.
  • All-in-one sales CRM with built-in telephony, chat, and email reducing third-party tool dependency.
  • Freddy AI contact scoring and deal predictions available on Pro tier.
  • Multiple pipeline views with Kanban and list options across all plans.

Weaknesses

  • Reports lack depth compared to competitors like HubSpot, with limited customization options.
  • Integration setup is poorly documented with no clear guides for connecting third-party tools.
  • AI features gated behind $39/user/month Pro tier despite marketing emphasis on Freddy AI.
  • Bot sessions limited to 500 one-time allocation with no monthly refresh.

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 X2CRM and Freshsales.

  • 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

    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

    B

    X2CRM doesn't expose a bulk API — REST + parallelization used for high-volume runs.

Estimator

Estimate your X2CRM to Freshsales 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 X2CRM to Freshsales data migrations

Answers to the questions buyers ask most during X2CRM to Freshsales migration scoping. Not seeing yours? Book a call.

Can't find your answer?

Walk through your X2CRM to Freshsales migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Most migrations land between three and five weeks for accounts under 15,000 Contacts and 3,000 Deals with a cloud-hosted X2CRM instance. Migrations from self-hosted X2CRM instances where IT coordination is required for attachment extraction, or where custom module fields need extensive mapping, move to eight to ten weeks because of file extraction coordination, custom field schema discovery, and X2Flow reconstruction documentation scope.

Adjacent paths

Related migrations to explore

Ready when you are

Move from X2CRM.
Land in Freshsales, 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