CRM migration
Field-level mapping, validation, and rollback between erxes and Microsoft Dynamics 365 Sales . We move data and schema; workflows are rebuilt natively in Microsoft Dynamics 365 Sales .
erxes
Source
Microsoft Dynamics 365 Sales
Destination
Compatibility
5 of 9
objects map 1:1 between erxes and Microsoft Dynamics 365 Sales .
Complexity
BStandard
Timeline
4-6 weeks
Overview
Moving from erxes to Microsoft Microsoft Dynamics 365 Sales is a cross-platform structural migration that requires transforming erxes plugin-based object schemas into the Microsoft Dataverse data model. erxes exposes all data through GraphQL endpoints with no native bulk export utility, so we paginate through query results programmatically and chunk large record sets before loading into Dynamics 365. The erxes Company object maps to Dynamics 365 Account; erxes Deal maps to Dynamics 365 Opportunity with pipeline stages translated into Sales Process stage values. Multi-channel Conversations (email, SMS, chat, WhatsApp) migrate as EmailMessage and Task records linked to the parent Contact and Account. We do not migrate erxes Automations or custom plugin workflows; we deliver a written inventory documenting each automation's trigger, conditions, and actions for the customer's Dynamics administrator to rebuild in Power Automate or model-driven flows 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.
Source platform
erxes platform overview
Scorecard, SWOT, gotchas, and pricing for erxes.
Destination platform
Microsoft Dynamics 365 Sales platform overview
Scorecard, SWOT, gotchas, and pricing for Microsoft Dynamics 365 Sales .
Data migration guide
The complete Microsoft Dynamics 365 Sales migration guide
Data model, import mechanisms, field mapping strategy, pitfalls, and cutover — by the engineers running it.
Destination checklist
Microsoft Dynamics 365 Sales migration checklist
Pre- and post-cutover tasks for moving onto Microsoft Dynamics 365 Sales .
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 Microsoft Dynamics 365 Sales , including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
erxes
Contact
Microsoft Dynamics 365 Sales
Contact
1:1erxes Contact records map directly to Dynamics 365 Contact. Standard fields (firstname, lastname, email, phone, address) transfer 1:1. Custom fields on erxes Contacts map to typed Dataverse columns that we provision before migration, but erxes enforces no field type at ingest, so we validate date formats, numeric strings, and picklist values against the erxes field schema before writing to Dynamics 365 and flag any mismatches for customer resolution.
erxes
Company
Microsoft Dynamics 365 Sales
Account
1:1erxes Company maps to Dynamics 365 Account, not a custom object. The HubSpot-era naming convention (Company = Account) differs from erxes but the Dataverse schema uses Account as the standard business-entity record. We use the erxes company domain as the Account Website field and apply a case-insensitive dedupe key on company name and domain to prevent duplicate Account creation during import. The erxes companyId becomes a custom field erxes_company_id__c for source-reference auditing.
erxes
Deal
Microsoft Dynamics 365 Sales
Opportunity
1:1erxes Deal maps to Dynamics 365 Opportunity. Deal amount, close date, and stage assignment transfer directly. The erxes pipelineId maps to a Microsoft Dynamics 365 Sales Process (Record Type-scoped stage whitelist) that we configure before migration. If erxes Deals are attached to Companies, we resolve the AccountId from the prior Account import phase before inserting Opportunities. Closed-won and closed-lost reasons from erxes custom fields become Dynamics custom fields for loss reason and win reason.
erxes
Pipeline
Microsoft Dynamics 365 Sales
Record Type + Sales Process
lossyerxes Pipelines define Deal workflow stages and map to Dynamics 365 Record Types on Opportunity, each paired with a Sales Process that restricts StageName picklist values to the stages in that pipeline. Stage probabilities migrate from erxes to Dynamics StageProbability. Teams that use erxes pipeline branching (e.g., different stages per product line) map to separate Record Types in Dynamics. We configure these in a Sandbox org before production migration.
erxes
Task
Microsoft Dynamics 365 Sales
Task
1:1erxes Tasks migrate to Dynamics 365 Task with Status, Priority, and ActivityDate preserved. Task titles and descriptions transfer as Subject and Description. Owner assignment resolves by matching erxes userId to the Dynamics User ID via the User lookup table created during the owner reconciliation phase. Tasks without a resolvable owner land in a held queue for admin review before insert.
erxes
Conversation (multi-channel)
Microsoft Dynamics 365 Sales
EmailMessage + Task (calls)
1:manyerxes multi-channel Conversations require a split: email messages migrate to Dynamics 365 EmailMessage records linked to the parent Contact or Account via the Regarding (object) lookup; SMS, chat, and WhatsApp messages migrate as Task records with custom TaskType values since Dynamics 365 lacks a native SMS/chat message object. Conversation metadata (channel, timestamp, customer reference) preserves in custom fields on both the EmailMessage and Task. Message ordering depends on the erxes server-side createdAt timestamp, which we carry forward to maintain chronological sequence.
erxes
User (Team Member)
Microsoft Dynamics 365 Sales
User
1:1erxes Users map to Dynamics 365 Users for owner assignment resolution. We extract all erxes users referenced on Contacts, Companies, Deals, and Tasks and match by email address against the Dynamics User table. Any erxes user without a matching Dynamics User goes to a reconciliation queue; the customer's admin provisions the missing User before record migration resumes. Role and permission structures are documented separately as they require manual rebuild in Dynamics security roles.
erxes
Custom Fields (Contacts, Companies, Deals, Tasks)
Microsoft Dynamics 365 Sales
Custom Columns (Dataverse)
lossyerxes custom fields on any supported object map to typed Dataverse columns on the corresponding Dynamics entity. We provision the Dataverse column schema (name, type, required flag, picklist values) before data migration begins. erxes custom fields have no type enforcement at ingest, so we validate values against the erxes field type definition and flag mismatches rather than allowing Dynamics to reject the record. The migration is blocked on custom field provisioning; columns must exist in Dataverse before any mapped records insert.
erxes
Automation Workflows
Microsoft Dynamics 365 Sales
Power Automate (documented rebuild)
lossyerxes Automation Workflows (trigger-action sequences defined in the plugin modules) do not migrate as code. The trigger logic, conditions, and actions are documented in a written inventory that we deliver to the customer's Dynamics administrator. This inventory includes the automation name, the object it operates on, the trigger type, all conditions and branches, and a recommended Power Automate or model-driven Flow equivalent. Rebuild is outside standard migration scope.
| erxes | Microsoft Dynamics 365 Sales | Compatibility | |
|---|---|---|---|
| Contact | Contact1:1 | Fully supported | |
| Company | Account1:1 | Fully supported | |
| Deal | Opportunity1:1 | Fully supported | |
| Pipeline | Record Type + Sales Processlossy | Fully supported | |
| Task | Task1:1 | Fully supported | |
| Conversation (multi-channel) | EmailMessage + Task (calls)1:many | Fully supported | |
| User (Team Member) | User1:1 | Fully supported | |
| Custom Fields (Contacts, Companies, Deals, Tasks) | Custom Columns (Dataverse)lossy | Fully supported | |
| Automation Workflows | Power Automate (documented rebuild)lossy | 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.
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
Microsoft Dynamics 365 Sales gotchas
Professional tier 15-table custom table limit blocks migrations
October 2024 pricing increase applies at renewal for all customers
Custom fields must be created in the UI before API writes
Power Platform request limits apply to bulk migrations
Activity records orphaned to inactive owners fail silently
Pair-specific challenges
Migration approach
Pre-migration audit and plugin activation verification
We audit the erxes instance across all active plugin modules, confirming which modules (Sales, Marketing, Operations, etc.) are activated and which objects (Deals, Tasks, Conversations, Companies, Contacts) are accessible via GraphQL. We extract a full object inventory including record counts per object type, a sample of 50-100 records per object to verify field presence and data quality, and a list of all custom field definitions with their declared types. Any deactivated plugin that gates data visibility is flagged with a remediation action before extraction begins. We also extract erxes Users and build the email-based owner lookup table for Dynamics User resolution.
Destination schema design and Dataverse column provisioning
We design the Dynamics 365 destination schema based on the erxes audit findings. This includes provisioning all Dataverse custom columns to receive erxes custom field values (matching name, type, and picklist values where applicable), configuring Record Types and Sales Processes to map to erxes Pipelines, and establishing the Account-Contact-Opportunity hierarchy. Schema design is deployed to a Dynamics 365 Sandbox first for validation. We also confirm the Dynamics 365 edition licensing requirements against the migration scope.
GraphQL extraction with pagination and chunking
We extract erxes data via paginated GraphQL queries. Contacts and Companies extract in full first as the base object layer. Deals extract second with CompanyId lookup resolution. Tasks and Conversations extract last as dependent layers. For large datasets, we chunk extraction by date range or sequential ID ranges to avoid request timeouts. We apply exponential backoff on rate-limit responses and log every page boundary so that extraction can resume from the last confirmed cursor if interrupted. All extracted data is staged in a migration staging area with integrity checksums before transform begins.
Data transform and validation against Dataverse schema
We transform erxes records into the Dynamics 365 Dataverse format using the field mapping matrix built during schema design. Custom field values are validated against the declared erxes field type before transform; malformed values (date strings in free text, numeric strings in numeric fields) are flagged to a validation exceptions log. The transform engine applies the Company-to-Account name mapping, the Deal-to-Opportunity stage mapping via the Sales Process, and the Conversation split into EmailMessage and Task. All rejected records surface in the exceptions log for customer resolution before the retry phase.
Sandbox migration and reconciliation
We run a full migration into the Dynamics 365 Sandbox using production-like data volume. The customer reconciles record counts across all objects (Contacts in, Accounts in, Opportunities in, Tasks in, EmailMessages in), spot-checks 25-50 random records against the erxes source for field accuracy, and validates that Opportunity stages map correctly to the configured Sales Process. Any schema corrections, mapping adjustments, or validation rule exceptions happen here before production migration begins.
Production migration in dependency order
We run production migration in strict dependency order: Accounts (from erxes Companies) first, Contacts second with AccountId resolved, Opportunities third with AccountId and OwnerId resolved, Tasks and EmailMessage records fourth via Bulk API 2.0 for high-volume activity loads, and custom field data last. Each phase emits a row-count reconciliation report before the next phase begins. We freeze erxes writes during the cutover window and run a final delta migration for any records modified during the migration window.
Cutover, validation, and automation rebuild handoff
We validate the production migration against the Sandbox reconciliation baseline, confirming record counts and spot-checking field values. We deliver the erxes Automation Workflow inventory document to the customer's Dynamics administrator for Power Automate or model-driven Flow rebuild. We support a one-week hypercare window where we resolve any record reconciliation issues raised by the customer's team. We do not rebuild erxes Automations as Dynamics Flows within migration scope; that is a separate engagement or an internal admin task.
Platform deep dives
erxes
Source
Strengths
Weaknesses
Microsoft Dynamics 365 Sales
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 1 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 Microsoft Dynamics 365 Sales .
Object compatibility
1 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 Microsoft Dynamics 365 Sales migration scoping. Not seeing yours? Book a call.
Walk through your erxes to Microsoft Dynamics 365 Sales 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 Microsoft Dynamics 365 Sales
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.