CRM migration
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
Source
Salesforce Sales Cloud
Destination
Compatibility
5 of 12
objects map 1:1 between erxes and Salesforce Sales Cloud.
Complexity
BStandard
Timeline
4-6 weeks
Overview
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.
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 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
Salesforce Sales Cloud
Lead or Contact (split required)
1:manyerxes 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
Salesforce Sales Cloud
Account
1:1erxes 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
Salesforce Sales Cloud
Opportunity
1:1erxes 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
Salesforce Sales Cloud
Record Type + Sales Process
lossyEach 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
Salesforce Sales Cloud
Opportunity Stage
lossyerxes 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
Salesforce Sales Cloud
Task
1:1erxes 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
Salesforce Sales Cloud
EmailMessage + Task
1:manyerxes 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
Salesforce Sales Cloud
User
1:1erxes 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)
Salesforce Sales Cloud
Custom Field (Lead or Contact)
lossyerxes 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)
Salesforce Sales Cloud
Custom Field (Account)
lossyerxes 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)
Salesforce Sales Cloud
Custom Field (Opportunity)
lossyerxes 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
Salesforce Sales Cloud
Email-to-Case or Omni-Channel Configuration
1:1erxes 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.
| erxes | Salesforce Sales Cloud | Compatibility | |
|---|---|---|---|
| Contact | Lead or Contact (split required)1:many | Fully supported | |
| Company | Account1:1 | Fully supported | |
| Deal | Opportunity1:1 | Fully supported | |
| Pipeline | Record Type + Sales Processlossy | Fully supported | |
| Pipeline Stage | Opportunity Stagelossy | Fully supported | |
| Task | Task1:1 | Fully supported | |
| Conversation | EmailMessage + Task1:many | Fully supported | |
| User / Team Member | User1:1 | Fully supported | |
| Custom Field (Contacts) | Custom Field (Lead or Contact)lossy | Fully supported | |
| Custom Field (Companies) | Custom Field (Account)lossy | Fully supported | |
| Custom Field (Deals) | Custom Field (Opportunity)lossy | Fully supported | |
| Channel | Email-to-Case or Omni-Channel Configuration1:1 | 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.
erxes gotchas
No native bulk export in Community edition
Plugin activation state affects data visibility
Custom fields have no type enforcement during import
Conversation message ordering depends on server timestamps
Salesforce Sales Cloud gotchas
Workflow Rules and Process Builder are retired
Bulk API batch quota exhaustion during large imports
Storage overage billing is non-obvious
Account-Contact many-to-many relationship mapping
Territory and team member import ordering dependencies
Pair-specific challenges
Migration approach
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.
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.
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.
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.
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.
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
erxes
Source
Strengths
Weaknesses
Salesforce Sales Cloud
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 erxes and Salesforce Sales Cloud.
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
erxes: Not publicly documented.
Data volume sensitivity
erxes 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 erxes to Salesforce Sales Cloud migration scoping. Not seeing yours? Book a call.
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 consultationAdjacent paths
Other ways to leave erxes
Other ways to arrive at Salesforce Sales Cloud
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.