CRM migration

Migrate from erxes to Salesforce Sales Cloud

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

erxes logo

erxes

Source

Salesforce Sales Cloud

Destination

Salesforce Sales Cloud logo

Compatibility

42%

5 of 12

objects map 1:1 between erxes and Salesforce Sales Cloud.

Complexity

BStandard

Timeline

4-6 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from erxes to Salesforce is a multi-phase extraction and re-platforming. erxes organizes data around Contacts, Companies, Deals in Pipelines, and multi-channel Conversations without a native bulk export endpoint—all data must be extracted via paginated GraphQL queries against the API. We handle the erxes plugin-activation dependency chain during pre-migration audit to ensure all relevant modules are accessible before extraction begins. Deals map to Salesforce Opportunities with pipeline stages rebuilt as Record Types and Sales Processes in the destination org. Conversations (email, SMS, chat, WhatsApp) migrate as EmailMessage and Task records linked to the parent Contact or Account. Custom fields transfer with type validation; erxes enforces no schema constraints on ingest, so we validate field types against erxes field definitions before import to prevent Salesforce validation rule rejections. Workflows, automations, and Channel credentials do not migrate; we deliver a written inventory of every automation and integration point requiring manual rebuild or reconfiguration post-migration.

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

Salesforce Sales Cloud logo

Salesforce Sales Cloud

What's pulling them in

  • The AppExchange marketplace with 5,000+ prebuilt apps gives enterprises integrations for nearly every business workflow without custom development.
  • Native Einstein AI for lead scoring, opportunity insights, and predictive forecasting adds intelligence without a separate platform purchase.
  • Territory management, multi-currency support, and advanced forecasting satisfy the needs of complex B2B sales organizations with structured revenue teams.
  • Slack, Tableau, and CPQ are deeply integrated into the core platform, keeping the sales stack unified for teams already in the Salesforce ecosystem.
  • Organizations with a large, established Salesforce implementation choose it because switching costs — integrations, custom code, trained admins — are prohibitive.

Object mapping

How erxes objects map to Salesforce Sales Cloud

Each row shows how a erxes object lands in Salesforce Sales Cloud, 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

Salesforce Sales Cloud

Lead or Contact (split required)

1:many
Fully supported

erxes Contacts with no associated Company record or with a lifecycle indicator of 'prospect' map to Salesforce Lead. erxes Contacts with an associated Company record and a lifecycle indicator of 'customer' or 'active' map to Salesforce Contact attached to an Account. We apply the split rule at migration time using erxes custom property values, and preserve the original erxes contactId in a custom field erxes_original_id__c on both Lead and Contact for reconciliation.

erxes

Company

maps to

Salesforce Sales Cloud

Account

1:1
Fully supported

erxes Company records map directly to Salesforce Account. The Company domain field maps to Account Website. We use erxes companyId as the externalId for deduplication during import. Account must be created before any Contact import so that the AccountId Lookup is satisfied at Contact insert.

erxes

Deal

maps to

Salesforce Sales Cloud

Opportunity

1:1
Fully supported

erxes Deals map to Salesforce Opportunity. The erxes pipeline stage assignment maps to Salesforce StageName, and the pipelineId maps to a Salesforce Record Type and Sales Process that we configure before migration. Deal amount, close date, and ownerId migrate directly with the erxes ownerId resolved to the Salesforce OwnerId via User email matching.

erxes

Pipeline

maps to

Salesforce Sales Cloud

Record Type + Sales Process

lossy
Fully supported

Each erxes pipeline becomes a Salesforce Record Type on Opportunity with a corresponding Sales Process that whitelists the stage values from the erxes pipeline. Stage probability percentages migrate from erxes to Salesforce StageProbability rounded to the nearest integer. We configure Page Layouts per Record Type so that stage-specific fields display correctly for each pipeline in the destination org.

erxes

Pipeline Stage

maps to

Salesforce Sales Cloud

Opportunity Stage

lossy
Fully supported

erxes pipeline stages map to Salesforce Opportunity Stage values within the corresponding Sales Process. The stage order and probability are preserved. Any erxes stage with a closed-won or closed-lost status maps to Salesforce Closed Won or Closed Lost, with the erxes close reason stored in a custom field erxes_close_reason__c.

erxes

Task

maps to

Salesforce Sales Cloud

Task

1:1
Fully supported

erxes Tasks migrate to Salesforce Task with Status, Priority, Subject, and ActivityDate preserved. Task assignment migrates by resolving erxes ownerId to Salesforce OwnerId via User email matching. erxes Cycles and Teams do not have a direct Salesforce equivalent; we map cycle-based task grouping to a custom field erxes_cycle__c and flag team-assigned tasks with the erxes team name in a custom field erxes_team__c.

erxes

Conversation

maps to

Salesforce Sales Cloud

EmailMessage + Task

1:many
Fully supported

erxes Conversations split by channel during migration. Email messages migrate as Salesforce EmailMessage records linked to the parent Contact or Account via WhoId and WhatId. SMS, chat, and WhatsApp messages migrate as Task records with TaskSubtype=Chat and the original channel stored in a custom field erxes_channel__c. Message ordering is preserved using the original erxes server timestamp (createdAt) as ActivityDate.

erxes

User / Team Member

maps to

Salesforce Sales Cloud

User

1:1
Fully supported

erxes Users migrate to Salesforce User records by email match. We resolve every distinct erxes ownerId referenced on Contact, Company, Deal, Task, and Conversation records and match against the Salesforce org's User table. Users without a matching Salesforce User are held in a reconciliation queue for the customer's admin to provision before record import resumes. Role and permission configurations require manual review post-migration because erxes role models do not map directly to Salesforce Profiles and Permission Sets.

erxes

Custom Field (Contacts)

maps to

Salesforce Sales Cloud

Custom Field (Lead or Contact)

lossy
Fully supported

erxes custom fields on Contacts map to Salesforce custom fields on Lead and Contact with type mapping: erxes text fields become Text (255), long text become TextArea, date fields become Date, number fields become Number, and select fields become Picklist. We validate field types against erxes field definitions before import because erxes does not enforce type constraints on ingest—a text field in erxes may contain a date value that Salesforce would reject on a Date field. Any type mismatches are flagged and mapped to Text fields in Salesforce to prevent import failures.

erxes

Custom Field (Companies)

maps to

Salesforce Sales Cloud

Custom Field (Account)

lossy
Fully supported

erxes custom fields on Companies map to Salesforce custom fields on Account with the same type-mapping logic as Contacts. We validate erxes field definitions against Salesforce field types before import. Any custom fields referencing erxes-specific picklist values are mapped to Salesforce Picklist with the same value set or to Text if the value set does not fit a picklist model.

erxes

Custom Field (Deals)

maps to

Salesforce Sales Cloud

Custom Field (Opportunity)

lossy
Fully supported

erxes custom fields on Deals map to Salesforce custom fields on Opportunity with type validation. We map all custom field values and preserve the erxes field label in the Salesforce field description for admin reference.

erxes

Channel

maps to

Salesforce Sales Cloud

Email-to-Case or Omni-Channel Configuration

1:1
Fully supported

erxes Channels define communication mediums (email, SMS, chat, WhatsApp) connected to the platform. Channel credentials such as API keys, webhook URLs, and third-party service tokens do not migrate. We flag every Channel for manual reconfiguration in Salesforce Omni-Channel or email routing rules post-migration. The channel type (email, SMS, chat, WhatsApp) is preserved as a custom field on the migrated Conversation records.

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

Salesforce Sales Cloud logo

Salesforce Sales Cloud gotchas

High

Workflow Rules and Process Builder are retired

High

Bulk API batch quota exhaustion during large imports

Medium

Storage overage billing is non-obvious

Medium

Account-Contact many-to-many relationship mapping

Low

Territory and team member import ordering dependencies

Pair-specific challenges

  • No bulk export endpoint requires GraphQL extraction with chunking

    erxes does not ship a bulk export UI or API endpoint in its open-source edition. All data must be extracted via individual GraphQL queries against the API with pagination. We paginate through query results programmatically, but datasets exceeding 100,000 records require chunking strategies, cursor-based pagination handling, and careful rate-limit management to avoid timeouts during extraction. The extraction phase typically takes two to three times longer than a platform with a native bulk export, and we include buffer time for this in the migration schedule.

  • Plugin activation state gates 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 phase. If deactivated plugins are discovered, we require reactivation and a data integrity check before extraction proceeds. This can add one to three days to the pre-migration timeline if plugins need to be re-enabled and validated.

  • erxes custom field type enforcement gap requires pre-import validation

    erxes custom fields are schema-less on ingest—any value can be written to any custom field regardless of the field type defined in the UI. This means a date-formatted field in erxes may contain free-text values, and a numeric field may contain string values. Salesforce enforces field types at import time and will reject records with format mismatches on Date, Number, or Picklist fields. We validate all erxes custom field values against the erxes field definitions before loading and map any mismatched values to Text fields in Salesforce. This pre-validation step prevents silent record rejections during import and typically requires one to two days of data analysis per custom object.

  • Salesforce validation rules and field-level security block imports without pre-configuration

    Salesforce orgs commonly enforce validation rules (required formats, conditional required fields, picklist whitelists) and field-level security that prevent records from being inserted during migration. We coordinate with the customer's Salesforce admin to grant the migration user Modify All Data and Bulk API permissions, and we either temporarily disable active validation rules during the load phase or add a migration-context exclusion to each rule. Skipping this step typically results in 5-30 percent record rejection on the first import attempt, particularly on Contact and Opportunity objects where custom validation rules are most common.

  • Workflows, automations, and Channel credentials do not migrate

    erxes automations define trigger-action sequences for customer journeys that do not have a direct Salesforce Flow equivalent. We extract the automation structure including triggers, conditions, and actions and deliver a written inventory with recommended Salesforce Flow rebuild steps for each automation. Channel credentials (API keys, webhook URLs, email routing tokens) are environment-specific and cannot migrate. We flag every Channel for manual reconfiguration in Salesforce Omni-Channel or email-to-case routing rules. This inventory work is included in the migration scope; the actual rebuild is outside standard scope and requires the customer's admin or a Salesforce partner.

Migration approach

Six steps for a successful erxes to Salesforce Sales Cloud data migration

  1. Pre-migration audit and plugin activation confirmation

    We audit the source erxes instance across plugin activation state (confirming Sales, Tasks, and Conversations plugins are active), custom field definitions on Contacts, Companies, Deals, and Tasks, pipeline and stage count, user count and email addresses, and estimated record volumes per object. We run discovery GraphQL queries against the erxes API to confirm data accessibility before extraction begins. The audit output is a written scope document with record counts, custom field type inventory, and a list of any plugins requiring reactivation before extraction.

  2. Schema design and Salesforce configuration

    We design the destination schema in Salesforce. This includes provisioning custom fields on Account, Contact, Lead, and Opportunity with type-mapped Salesforce field types validated against erxes field definitions, Record Types and Sales Processes per erxes pipeline, Page Layouts per Record Type, and a custom erxes_original_id__c field on each standard object for reconciliation. We disable active validation rules and adjust field-level security for the migration user before any data loads. Schema is deployed into a Salesforce Sandbox first for validation with the customer's RevOps lead before production migration begins.

  3. GraphQL extraction with pagination and type validation

    We extract erxes data via paginated GraphQL queries in chunks of 500 records per request. Each extraction pass includes type validation against erxes field definitions before the data is staged for import. Very large datasets (100k+ records) are extracted in multiple passes with cursor-based pagination. We extract in dependency order: Users first (for OwnerId resolution), then Companies, then Contacts, then Deals, then Tasks, then Conversations. Each extraction pass emits a row count and a type-mismatch report for any custom field values that will require Text-field mapping in Salesforce.

  4. Owner reconciliation and User provisioning

    We extract every distinct erxes ownerId referenced on Contact, Company, Deal, Task, and Conversation records and match by email against the Salesforce destination org's User table. Owners without a matching User go to a reconciliation queue. The customer's Salesforce admin provisions any missing Users and confirms role assignments. Migration cannot proceed past User provisioning because OwnerId references are required on most standard objects and opportunities.

  5. Production migration in dependency order via Bulk API 2.0

    We run production migration in record-dependency order: Users (validated by admin), Accounts (from erxes Companies with erxes companyId as externalId), Contacts (with AccountId resolved from Company mapping, Lead-Contact split applied), Leads (with erxes contactId preserved in erxes_original_id__c), Opportunities (with AccountId, OwnerId, and RecordTypeId resolved, stage mapped via Sales Process), Custom field values (validated against field types, mismatches mapped to Text), Tasks (with OwnerId resolved via User mapping), Conversation history (EmailMessages and Tasks via Bulk API 2.0 with parent-record WhoId and WhatId resolution). Each phase emits a row-count reconciliation report before the next phase begins.

  6. Cutover, delta sync, and automation inventory handoff

    We freeze erxes writes during cutover, run a final delta migration of any records modified during the migration window, then enable Salesforce as the system of record. We deliver the Automation and Workflow inventory document to the customer's admin team with trigger descriptions, condition logic, and recommended Salesforce Flow equivalents. We deliver the Channel reconfiguration checklist for manual setup in Salesforce Omni-Channel. We support a one-week hypercare window where we resolve any reconciliation issues raised by the customer's team. We do not rebuild erxes automations as Salesforce Flow inside the migration scope; that is a separate engagement or an internal admin task.

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
Salesforce Sales Cloud logo

Salesforce Sales Cloud

Destination

Strengths

  • Largest enterprise app ecosystem in CRM with 5,000+ AppExchange integrations covering nearly every vertical workflow.
  • Native Einstein AI delivers lead scoring, opportunity insights, and predictive forecasting without a third-party layer.
  • Advanced territory management, multi-currency, and flexible forecasting satisfy complex B2B revenue structures.
  • Deep platform extensibility: Custom Objects, Apex, Flow, and the Metadata API allow full schema customization.
  • Well-documented REST API, Bulk API, and Composite API with published rate limits for programmatic migration.

Weaknesses

  • Pricing model is layered and opaque in practice: per-seat fees plus storage overages, add-on subscriptions, and annual uplifts compound to 30–40% above sticker price.
  • Workflow Rules and Process Builder are deprecated, forcing all orgs onto Salesforce Flow — a migration task that catches many teams by surprise.
  • Steep administrative complexity: meaningful configuration requires a dedicated Salesforce admin or consultant.
  • API rate limits are edition-gated (100k/day base for Enterprise) and easily exhausted by large historical imports without throttling.
  • Data export is exportable via Data Loader but preserving relationship integrity across 30+ objects requires careful ETL sequencing.

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 Salesforce Sales Cloud.

  • 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 Salesforce Sales Cloud 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 Salesforce Sales Cloud data migrations

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

Can't find your answer?

Walk through your erxes to Salesforce Sales Cloud migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Most migrations land between four and six weeks for accounts under 30,000 Contacts and 8,000 Deals with no custom objects and a single pipeline. Migrations with multiple erxes pipelines requiring Record Type and Sales Process reconstruction, large conversation histories (over 200,000 messages), extensive custom field type validation work, or multi-object custom schemas move to eight to twelve weeks because of GraphQL extraction chunking, plugin-audit time, validation rule pre-configuration, and the pipeline schema rebuild in Salesforce.

Adjacent paths

Related migrations to explore

Ready when you are

Move from erxes.
Land in Salesforce Sales Cloud, 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