CRM migration
Field-level mapping, validation, and rollback between erxes and HighLevel. We move data and schema; workflows are rebuilt natively in HighLevel.
erxes
Source
HighLevel
Destination
Compatibility
7 of 9
objects map 1:1 between erxes and HighLevel.
Complexity
BStandard
Timeline
2-4 weeks
Overview
Moving from erxes to GoHighLevel is a structural migration from an open-source, plugin-based CRM to a SaaS all-in-one marketing and sales platform. erxes organizes data around Contacts, Companies, Deals in Pipelines, and Tasks with a plugin-activation model that affects data visibility. GoHighLevel consolidates CRM, pipelines, email, SMS, scheduling, and white-label capabilities into a single platform designed for agencies and service businesses. We extract erxes data through GraphQL paginated queries since no native bulk export UI exists, pre-create all destination custom fields in GoHighLevel before import, and handle the Contact-to-GoHighLevel-Contact and Company-to-GoHighLevel-Company 1:1 mappings. Automation workflows, sequences, channel credentials, and form configurations do not migrate; we deliver a written inventory of these for the customer's admin to rebuild in GoHighLevel's visual workflow builder.
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 HighLevel, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
erxes
Contact
HighLevel
Contact
1:1erxes Contacts map directly to GoHighLevel Contacts. We extract standard fields (firstName, lastName, email, phone, position) and custom field values via GraphQL and import to GoHighLevel Contacts using the contacts API endpoint. Email serves as the dedupe key; duplicate emails trigger an update rather than a create. Custom fields require pre-creation in GoHighLevel before migration with matching field types (text, number, date, select) to avoid type mismatches.
erxes
Company
HighLevel
Company
1:1erxes Company records map to GoHighLevel Companies. We extract companyName, industry, size, website, and address fields via GraphQL. Companies must import before Contacts so that the GoHighLevel companyId can be resolved and linked to Contact records during Contact import. The company domain serves as the dedupe key if domain normalization is needed.
erxes
Deal
HighLevel
Opportunity
1:1erxes Deals map to GoHighLevel Opportunities. We extract dealName, amount, stage, pipelineId, and custom field values. The erxes pipelineId maps to a GoHighLevel Pipeline that we pre-create or match by name during schema setup. Stage names translate to GoHighLevel Pipeline Stage names, preserving order and probability percentages where they exist in erxes.
erxes
Pipeline
HighLevel
Pipeline
1:1erxes Pipelines define the sales workflow stages for Deals. We map the full pipeline configuration including stage order, names, and probability mappings to GoHighLevel Pipelines. Each erxes pipeline becomes a GoHighLevel Pipeline; if the customer has multiple erxes pipelines, each maps to a separate GoHighLevel Pipeline with its own Stages configuration. Stage IDs are translated to destination stage IDs during Deal import.
erxes
Task
HighLevel
Task
1:1erxes Tasks map to GoHighLevel Tasks. We extract task titles, descriptions, due dates, status (pending, in progress, complete), and owner assignments. Owner resolution uses email matching against GoHighLevel Users. Tasks attached to specific Deals link via GoHighLevel Opportunity ID lookup after Deal migration completes. Tasks attached to Contacts link via Contact ID lookup.
erxes
Conversation
HighLevel
Custom Object or Contact Notes
lossyerxes multi-channel Conversations (email, SMS, chat, WhatsApp) require configuration-level mapping. The conversation body, metadata, and linked customer association migrate to GoHighLevel as structured notes attached to the related Contact or Company record. Message threading order is preserved by setting the GoHighLevel note createdAt timestamp to the original erxes server-side createdAt value. Channel-specific metadata (SMS sender ID, chat thread ID) migrates as custom note fields.
erxes
Custom Fields
HighLevel
Custom Fields
lossyerxes custom fields on Contacts, Companies, and Deals require pre-creation in GoHighLevel before migration. We map field types: erxes text fields map to GoHighLevel text fields, erxes select fields map to GoHighLevel dropdown fields, erxes date fields map to GoHighLevel date fields. erxes has no type enforcement on ingest, so we validate each value against the defined field type and flag mismatches rather than writing invalid data to GoHighLevel.
erxes
User
HighLevel
User
1:1erxes Users (team members) map to GoHighLevel Users by email match. We extract user records including name, email, role, and status. Role and permission configurations in erxes have no direct GoHighLevel equivalent, so we document the original permission structure for the customer's admin to reconfigure manually in GoHighLevel's team management settings. Inactive erxes users can be mapped to inactive GoHighLevel users or excluded based on customer preference.
erxes
Channel
HighLevel
Channel Configuration
1:1erxes Channels define communication mediums (email, SMS, chat) connected to the platform. Channel credentials (API keys, webhook URLs, SMTP configurations) do not migrate because they are platform-specific secrets. We deliver a channel inventory document listing each erxes channel, its type, connected integration, and recommended GoHighLevel channel setup steps so the customer's admin can reconfigure the integrations after migration.
| erxes | HighLevel | Compatibility | |
|---|---|---|---|
| Contact | Contact1:1 | Fully supported | |
| Company | Company1:1 | Fully supported | |
| Deal | Opportunity1:1 | Fully supported | |
| Pipeline | Pipeline1:1 | Fully supported | |
| Task | Task1:1 | Fully supported | |
| Conversation | Custom Object or Contact Noteslossy | Fully supported | |
| Custom Fields | Custom Fieldslossy | Mapping required | |
| User | User1:1 | Fully supported | |
| Channel | 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
HighLevel gotchas
Sub-account architecture creates isolated data silos per client
Usage-based telecom and AI costs are not in the subscription price
Workflows have no native equivalent in most destination CRMs
API rate limits cap bulk migration throughput at 100 requests per 10 seconds per sub-account
White-label configuration and branding assets do not export via API
Pair-specific challenges
Migration approach
Discovery and plugin audit
We audit the source erxes instance across activated plugins (Sales, Marketing, Operations, Commerce), custom field definitions per object, pipeline and stage configuration, and user count. We confirm all relevant plugins are active before extraction begins because disabled plugins hide their data from the GraphQL API. We also inventory existing workflows and channels for the handoff document. The discovery output is a written migration scope and a GoHighLevel account configuration checklist.
GoHighLevel schema pre-creation
Before any data extraction, we create all required GoHighLevel custom fields, Pipelines, Pipeline Stages, and Custom Objects. We map erxes custom field names and types to typed GoHighLevel field definitions. Pipeline stages are configured with names and order matching erxes. This phase ensures that when we submit import records, the destination schema is ready to accept them without type errors or missing field rejections.
GraphQL extraction with pagination
We extract erxes data through GraphQL paginated queries. Extraction order follows dependency hierarchy: Companies first, then Contacts with companyId resolution, then Pipelines, then Deals with pipelineId and stageId resolution, then Tasks with owner email lookup, then Conversations with Contact ID resolution. Each extraction wave produces a row-count reconciliation report. For datasets over 50,000 records, we chunk extraction into batches to avoid API timeouts and handle rate-limit responses with exponential backoff.
User reconciliation and GoHighLevel team provisioning
We extract every distinct erxes User referenced on Contacts, Deals, and Tasks and match by email against the GoHighLevel destination account's team members. Users without a matching GoHighLevel account go to a reconciliation queue. The customer's GoHighLevel admin provisions any missing team members (active or inactive per customer preference) before record import resumes. Owner assignments cannot resolve until User mapping is complete.
Production import in dependency order
We import records into GoHighLevel in dependency order: Companies first, then Contacts with companyId linked, then Pipelines and Stages, then Deals with pipelineId, stageId, and ownerId resolved, then Tasks with contactId or opportunityId linked, then Conversation history as structured notes. Each phase emits a row-count and field-coverage report before the next phase begins. We use GoHighLevel REST API batch endpoints with rate-limit handling.
Cutover, validation, and workflow handoff
We freeze erxes writes during cutover and run a final delta migration of any records modified during the migration window. We validate imported record counts, spot-check field coverage, and confirm parent-record lookups resolved correctly. We deliver the Automation Workflow Inventory document and the Channel Reconfiguration Checklist to the customer's admin team. We support a three-day hypercare window for reconciliation issues. We do not rebuild erxes automations in GoHighLevel; that is documented for the customer's admin to handle as a separate configuration task.
Platform deep dives
erxes
Source
Strengths
Weaknesses
HighLevel
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 HighLevel.
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 HighLevel migration scoping. Not seeing yours? Book a call.
Walk through your erxes to HighLevel 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 HighLevel
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.