CRM migration

Migrate from erxes to Microsoft Dynamics 365 Sales

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 logo

erxes

Source

Microsoft Dynamics 365 Sales

Destination

Microsoft Dynamics 365 Sales  logo

Compatibility

56%

5 of 9

objects map 1:1 between erxes and Microsoft Dynamics 365 Sales .

Complexity

BStandard

Timeline

4-6 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

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

Microsoft Dynamics 365 Sales  logo

Microsoft Dynamics 365 Sales

What's pulling them in

  • Deep Microsoft 365, Teams, and Outlook integration makes Microsoft Dynamics 365 Sales a natural fit for Microsoft-first organizations already invested in that ecosystem
  • Sales Enterprise and Premium tiers offer unlimited custom tables and advanced AI-driven forecasting and predictive analytics not available in lower tiers
  • Professional tier pricing at $65 per user per month offers a lower entry cost than Salesforce for SMB teams with straightforward CRM needs
  • Flexible customization options allow businesses to build bespoke apps, tailor forms and views, and integrate with other Dynamics 365 modules
  • Microsoft Copilot AI tools are embedded directly into the sales workflow on Enterprise and Premium, automating routine tasks and providing deal intelligence

Object mapping

How erxes objects map to Microsoft Dynamics 365 Sales

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

maps to

Microsoft Dynamics 365 Sales

Contact

1:1
Fully supported

erxes 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

maps to

Microsoft Dynamics 365 Sales

Account

1:1
Fully supported

erxes 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

maps to

Microsoft Dynamics 365 Sales

Opportunity

1:1
Fully supported

erxes 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

maps to

Microsoft Dynamics 365 Sales

Record Type + Sales Process

lossy
Fully supported

erxes 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

maps to

Microsoft Dynamics 365 Sales

Task

1:1
Fully supported

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

maps to

Microsoft Dynamics 365 Sales

EmailMessage + Task (calls)

1:many
Fully supported

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

maps to

Microsoft Dynamics 365 Sales

User

1:1
Fully supported

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

maps to

Microsoft Dynamics 365 Sales

Custom Columns (Dataverse)

lossy
Fully supported

erxes 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

maps to

Microsoft Dynamics 365 Sales

Power Automate (documented rebuild)

lossy
Mapping required

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

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

Microsoft Dynamics 365 Sales  logo

Microsoft Dynamics 365 Sales gotchas

High

Professional tier 15-table custom table limit blocks migrations

High

October 2024 pricing increase applies at renewal for all customers

Medium

Custom fields must be created in the UI before API writes

Medium

Power Platform request limits apply to bulk migrations

Medium

Activity records orphaned to inactive owners fail silently

Pair-specific challenges

  • erxes GraphQL extraction has no bulk equivalent

    erxes provides no native bulk export UI or endpoint in any edition. All data extraction requires paginated GraphQL queries against the erxes API, with pagination cursors and page size limits varying by object type and instance configuration. We paginate through query results programmatically, but very large datasets (50,000+ records) require chunking by date range or ID sequence to avoid request timeouts. We manage rate limits with exponential backoff and pause between page fetches, but source-side throttling from an underpowered self-hosted erxes instance can extend extraction timelines unpredictably.

  • Plugin activation state gates data visibility

    erxes modules (Sales, Marketing, Operations, etc.) must be active in the plugin configuration for their object data to be accessible via the API. If a customer deactivates a plugin before migration, Deals, Tasks, or Conversations for that module become invisible to our GraphQL queries even if records exist in the underlying database. We confirm all relevant plugins are active during the pre-migration audit phase and document which plugin scopes are not active with a flag for the customer to remediate before extraction begins.

  • Custom field type enforcement gap between platforms

    erxes accepts any value in any custom field regardless of the field type defined in the UI, while Dynamics 365 Dataverse enforces typed columns at insert time. A date field in erxes may contain free-text date strings in multiple formats. We validate field values against the erxes field type definition before transform, but Dynamics may still reject records where validation logic cannot parse the value unambiguously. We flag rejected records and surface them to the customer for manual correction or default-value assignment before retry.

  • Conversation message ordering relies on source server timestamps

    erxes Conversation messages store createdAt from the server at write time. When migrating multi-channel conversations to Dynamics 365 EmailMessage and Task records, the chronological ordering of messages in the destination depends on these server-side timestamps. We carry forward the original createdAt values to preserve sequence, but clock skew between the self-hosted erxes server and the Dynamics 365 cloud may introduce minor ordering discrepancies that the customer reviews during validation.

  • Channel credentials do not migrate and require manual reconfiguration

    erxes Channel configurations (email inbox credentials, SMS gateway API keys, WhatsApp Business API tokens, chat widget webhook URLs) do not export through the erxes API and are not safe to transfer in plaintext. We document each active Channel configuration as a manual reconfiguration checklist for the customer's admin team. The migrated Conversation records will reference the channels by name, but channel connectivity must be re-established in Dynamics 365 after migration using the documented credentials.

Migration approach

Six steps for a successful erxes to Microsoft Dynamics 365 Sales data migration

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

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

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

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

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

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

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

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
Microsoft Dynamics 365 Sales  logo

Microsoft Dynamics 365 Sales

Destination

Strengths

  • Native integration with Microsoft 365, Teams, Outlook, and SharePoint for unified productivity workflow
  • Unlimited custom tables and complex workflows on Enterprise tier enable deep customization for complex sales processes
  • AI-driven predictive analytics and deal intelligence on Enterprise and Premium tiers help sales teams prioritize pipeline
  • Dataverse unified data layer provides a consistent API and data model across all Dynamics 365 and Power Platform apps
  • Strong security model with Field-Level Security and Record Ownership rules for governance-conscious enterprises

Weaknesses

  • Sales Professional tier caps custom tables at 15, creating a migration ceiling for highly customized SMB environments
  • October 2024 pricing increases of $15 per user across all tiers apply to existing customers upon renewal
  • Implementation typically requires costly certified partners, adding 30–50% to total project cost
  • Updates and platform releases can disrupt customizations and plugins, requiring regression testing after each wave
  • Non-Microsoft integrations require additional configuration or middleware, limiting flexibility for heterogeneous tech stacks

Complexity grading

How hard is this migration?

Standard CRM migration. 1 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 Microsoft Dynamics 365 Sales .

  • Object compatibility

    B

    1 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 Microsoft Dynamics 365 Sales 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 Microsoft Dynamics 365 Sales data migrations

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

Can't find your answer?

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 consultation

Most migrations land between four and six weeks for accounts with up to 15,000 Contacts, 3,000 Companies, and 2,000 Deals without large engagement histories. Migrations with extensive multi-channel Conversation histories (over 200,000 message records), multiple erxes plugin modules, or complex custom field schemas requiring extensive Dataverse column provisioning move to eight to twelve weeks. The erxes GraphQL extraction phase is the most variable step because it depends on source-instance performance and data volume, which we mitigate with chunking but cannot fully predict without a pre-migration audit.

Adjacent paths

Related migrations to explore

Ready when you are

Move from erxes.
Land in Microsoft Dynamics 365 Sales , 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