CRM migration

Migrate from erxes to Freshsales

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

erxes logo

erxes

Source

Freshsales

Destination

Freshsales logo

Compatibility

75%

6 of 8

objects map 1:1 between erxes and Freshsales.

Complexity

BStandard

Timeline

2-4 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from erxes to Freshsales is a platform architecture shift from self-hosted open-source to cloud-native SaaS. erxes organizes data around Contacts, Companies, Deals in Pipelines, and Tasks under a plugin-based XOS architecture with no native bulk export; all extraction runs through GraphQL queries against plugin-activated modules. Freshsales uses the Freshworks CRM model with Leads, Contacts, Accounts, Deals, and Tasks, offering CSV import and a built-in CRM Migration tool for supported sources. We handle the schema translation between erxes plugin modules and Freshsales object types, map custom fields to Freshsales properties, and migrate engagement history through CSV with the activity timeline preserved. Automations, Channels, and plugin-specific configurations do not migrate; we deliver a written inventory for manual rebuild. The pricing shift from erxes Community (free self-hosted) to Freshsales Growth ($9/user/month) or Pro ($39/user/month) introduces per-seat cost that erxes self-hosted deployments avoid, and the customer manages infrastructure directly in erxes versus Freshsales managing availability.

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

erxes logo

erxes

What's pushing teams away

  • Steep learning curve for non-technical teams who expect a point-and-click CRM without touching code or GraphQL
  • Limited enterprise-grade documentation and support outside the paid Enterprise tier leaves self-hosted teams troubleshooting alone
  • Plugin ecosystem lacks the third-party integrations available on established platforms, requiring custom development for niche tools
  • Mobile app has stability issues according to App Store reviews, with login failures reported by multiple users
  • Performance and stability can degrade with large datasets when running on underpowered self-hosted infrastructure

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 erxes objects map to Freshsales

Each row shows how a erxes 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.

erxes

Contact

maps to

Freshsales

Lead or Contact (split based on lifecycle status)

1:1
Fully supported

erxes Contacts map to Freshsales Lead if the contact represents an unqualified prospect, or to Freshsales Contact if the contact is associated with a company and represents an active sales relationship. We determine the split by examining erxes custom fields for lifecycle status indicators, or by applying a default rule (all erxes Contacts migrate as Freshsales Contacts unless the customer specifies a Lead qualification criteria). The erxes primaryEmail becomes the Freshsales email field, used as the dedupe key. Custom field values on erxes Contacts map to Freshsales custom properties on the corresponding object.

erxes

Company

maps to

Freshsales

Account

1:1
Fully supported

erxes Company records map directly to Freshsales Account. The Company name becomes Account Name, and the primaryEmail or website maps to the corresponding Freshsales Account fields. erxes Companies linked to Contacts via companyId create the Account-Contact relationship in Freshsales during the Contact import phase. We resolve the Account record first so that the AccountId lookup is satisfied when Contacts are imported.

erxes

Deal

maps to

Freshsales

Deal

1:1
Fully supported

erxes Deals map to Freshsales Deals. The erxes deal amount, stage name, and pipeline assignment migrate to Freshsales Deal amount, deal stage, and pipeline. We map erxes Pipeline and Stage names to Freshsales pipeline and stage configurations that the customer pre-configures in Freshsales before migration. Closed-won and closed-lost statuses from erxes map to Freshsales deal statuses with probability percentages preserved.

erxes

Pipeline

maps to

Freshsales

Pipeline

lossy
Fully supported

erxes Pipelines define the sales workflow stages for Deals. We map erxes pipeline configurations including stage order, stage names, and probability mappings to Freshsales pipeline and stage configurations. The customer configures the Freshsales pipeline structure before migration, and we map the erxes stage IDs to the corresponding Freshsales stage IDs during import. Stage sequence and probability percentages transfer directly.

erxes

Task

maps to

Freshsales

Task

1:1
Fully supported

erxes Tasks migrate to Freshsales Tasks with title, description, due date, status, and owner assignment preserved. The erxes userId mapping resolves to Freshsales User records by email match. Tasks linked to specific Deals or Contacts carry the corresponding Freshsales lookup ID after parent record resolution. Task priority and status (open, completed) map directly to Freshsales Task fields.

erxes

Conversation

maps to

Freshsales

Note or Custom Object

1:1
Fully supported

erxes multi-channel Conversations (email, SMS, chat, WhatsApp) migrate to Freshsales as Notes attached to the corresponding Contact or Account record, or to a custom Conversation object if the customer configures one at Enterprise tier. The Conversation body, channel type, and customer association transfer, but channel-specific metadata (WhatsApp template IDs, SMS carrier information) does not have a Freshsales equivalent and is flagged in the migration report. Message threading order depends on erxes server timestamps, which we preserve as Note createdAt values.

erxes

Custom Field (on Contact, Company, Deal, Task)

maps to

Freshsales

Custom Field

lossy
Fully supported

erxes custom fields defined on Contacts, Companies, Deals, and Tasks migrate to Freshsales custom fields on the corresponding objects. We map the erxes field schema (field name, data type) to Freshsales field types: text fields to Text, date fields to Date, dropdowns to Picklist, multi-select to Multi-select Picklist. The customer pre-creates the destination custom fields in Freshsales before migration so that the field API names are available for mapping. erxes custom fields have no type enforcement on ingest, so we validate against erxes field definitions before mapping to prevent type mismatches in Freshsales.

erxes

User/Team Member

maps to

Freshsales

User

1:1
Fully supported

erxes Users map to Freshsales User records by email match. Role and permission configurations in erxes (team-based access control) do not have a direct Freshsales equivalent because Freshsales uses a simpler role-permission model (Admin, Standard). We migrate User records with name, email, and active status, and the customer's Freshsales admin reviews role assignments post-migration. Any erxes User without a matching Freshsales User email goes to a reconciliation queue for manual provisioning.

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.

erxes logo

erxes gotchas

High

No native bulk export in Community edition

Medium

Plugin activation state affects data visibility

Medium

Custom fields have no type enforcement during import

Low

Conversation message ordering depends on server timestamps

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

  • No native bulk export in erxes Community requires GraphQL pagination

    erxes does not ship a bulk export UI or API endpoint in its open-source edition. All data must be extracted via paginated GraphQL queries against the erxes API. For very large datasets (50,000+ records), we implement cursor-based pagination with chunking and rate-limit handling to avoid timeouts. We confirm all relevant erxes plugins are active during pre-migration audit because deactivated plugins hide their data objects even if records exist. Extraction time scales with dataset size and requires careful orchestration for large accounts.

  • Lead versus Contact split requires pre-migration rule definition

    erxes uses a single Contact object without a Lead concept. Freshsales separates unqualified prospects (Lead) from qualified buyers (Contact attached to Account). We define the split rule during scoping based on erxes contact properties such as lifecycle stage custom fields, tag values, or conversation activity counts. Without a defined rule, all erxes Contacts migrate as Freshsales Contacts, which may leave some unqualified prospects in the wrong object and require manual reclassification post-migration.

  • Freshsales CRM Migration tool does not support erxes natively

    Freshsales provides a built-in CRM Migration tool only for specific supported sources (Salesforce, Pipedrive, Zoho, Insightly, SalesforceIQ). erxes is not among the supported sources, so the migration cannot use Freshsales' guided migration wizard. We handle the migration through Freshsales CSV import, which requires pre-formatting all data with correct column headers and custom field names matching the Freshsales field API names. Custom field creation must precede data import.

  • Channel credentials and communication integrations do not migrate

    erxes Channels (email accounts, SMS providers, WhatsApp Business, chat widgets) store credentials and webhook URLs that are platform-specific and not portable. We do not migrate channel credentials. We deliver a written inventory of every erxes Channel configuration including provider type, email addresses, phone numbers, and webhook endpoints, so the customer's admin can reconfigure these in Freshsales or the appropriate third-party tool. Email deliverability testing and SMS sender registration remain the customer's responsibility post-migration.

  • erxes plugin activation state affects data visibility during extraction

    erxes modules (Sales, Marketing, Operations) must be activated in the plugin configuration for their data objects to be accessible via the API. If a customer deactivates a plugin before migration, related Deals, Tasks, or Conversations become inaccessible even if records exist in the database. We confirm all relevant plugins are active during the pre-migration audit and document any deactivated modules that may contain inaccessible data.

Migration approach

Six steps for a successful erxes to Freshsales data migration

  1. Pre-migration audit and plugin activation check

    We audit the source erxes instance to identify all active plugins, data volumes per object (Contacts, Companies, Deals, Tasks, Conversations), custom field definitions, pipeline configurations, and user accounts. We confirm that all plugins relevant to the migration scope are active before extraction begins. We document any deactivated plugins and flag inaccessible data for the customer to activate or manually export.

  2. Freshsales account provisioning and custom field creation

    The customer provisions a Freshsales account at the appropriate tier (Growth, Pro, or Enterprise) and configures the pipeline and stage structure before migration. We provide a custom field manifest listing every erxes custom field that needs a corresponding Freshsales property, with the recommended Freshsales field type for each. The customer creates these custom fields in Freshsales before data import begins so that the field API names are available for mapping.

  3. GraphQL extraction with pagination and chunking

    We extract data from erxes via GraphQL queries against the plugin-activated API endpoints. Extraction runs in pagination batches (typically 100-500 records per query) with cursor-based navigation for large datasets. We implement rate-limit handling with exponential backoff and retry logic to manage API throttling. Conversation messages extract separately with server timestamp preservation for timeline ordering. The extraction outputs CSV files per object type ready for Freshsales import formatting.

  4. Data transformation and field mapping

    We transform extracted data into Freshsales CSV format with correct column headers, field type validation, and the Lead-Contact split rule applied to Contact records. Custom field values map from erxes field names to Freshsales custom property API names. Owner resolution matches erxes user emails to Freshsales User emails. Any records with missing required fields or invalid data formats go to an error queue for customer review before import.

  5. Sandbox import validation and reconciliation

    If the customer has a Freshsales sandbox or is willing to provision one for validation, we run a test import with a representative data subset to verify mapping accuracy, identify field mismatches, and confirm that custom fields accept the mapped values. We generate a reconciliation report comparing record counts between erxes source and Freshsales destination, and spot-check 25-50 records field by field. Any corrections to the mapping or Freshsales custom field configuration happen at this stage.

  6. Production import and cutover

    We run the full production import into Freshsales in dependency order: Accounts (from Companies), Users (validated by email match), Contacts (with AccountId resolved), Deals (with pipeline and stage mapped), Tasks, and Conversation history (as Notes or custom Conversation records). Each phase emits a reconciliation report. We freeze erxes writes during the final delta migration window, import any records modified during the migration window, then hand off to the customer for Freshsales go-live. We do not migrate Automations, Channels, or Workflows; we deliver a written inventory of these for the customer's admin to rebuild.

Platform deep dives

Context on both ends of the pair

erxes logo

erxes

Source

Strengths

  • True open-source with MIT license gives full code access and modification rights without vendor lock-in
  • Self-hosting option on DigitalOcean, AWS, or on-premise infrastructure provides complete data residency control
  • All-in-one platform consolidating marketing, sales, operations, and customer service modules
  • Plugin-based architecture allows activating only needed functionality without paying for unused features
  • Free Community edition offers generous feature set comparable to paid SaaS CRM tiers

Weaknesses

  • Steep technical learning curve requiring GraphQL knowledge and React familiarity for deep customization
  • Limited third-party integration marketplace compared to established CRM platforms
  • Documentation gaps make self-service troubleshooting difficult outside of paid support tiers
  • Mobile application stability issues reported in user reviews with authentication failures
  • Performance can degrade with large data volumes on underpowered self-hosted deployments
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 erxes 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

    erxes: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

Walk through your erxes 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 two and four weeks for accounts under 10,000 Contacts and 2,000 Deals with straightforward custom field schemas. Migrations with large Conversation histories (50,000+ messages), complex custom field configurations across multiple plugin modules, or distinct pipeline structures per team move to five to eight weeks because of GraphQL extraction orchestration, field mapping complexity, and Conversation message reconciliation. Timeline assumes the customer has provisioned the Freshsales account and created custom fields before extraction begins.

Adjacent paths

Related migrations to explore

Ready when you are

Move from erxes.
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