CRM migration
Field-level mapping, validation, and rollback between erxes and Mailchimp. We move data and schema; workflows are rebuilt natively in Mailchimp.
erxes
Source
Mailchimp
Destination
Compatibility
2 of 8
objects map 1:1 between erxes and Mailchimp.
Complexity
BStandard
Timeline
2-3 weeks
Overview
erxes is a full CRM with Contacts, Companies, Deals, Pipelines, Tasks, and multi-channel Conversations; Mailchimp is an email marketing platform centered on Audiences of subscribers with merge field personalization and campaign automation. The migration is a data consolidation in one direction: we extract erxes Contact and Company records via GraphQL, normalize them into Mailchimp subscriber format, and push through the Mailchimp Marketing API. Deals, Pipelines, Tasks, and Conversation history do not map to Mailchimp objects and are excluded from migration scope. We deliver a written inventory of erxes Automations and Channels for the customer to rebuild inside Mailchimp's automation builder. The critical pre-work is suppressions list hygiene—erxes unsubscribes must import as suppressed contacts in Mailchimp before any sendable records land, or the migration risks triggering a spam filter audit on the new account.
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 Mailchimp, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
erxes
Contact
Mailchimp
Audience Member
1:1erxes Contact records map 1:1 to Mailchimp Audience members. The email address is the dedupe key. Standard fields (firstName, lastName, phone) map to Mailchimp FNAME, LNAME, and PHONE merge fields. Any erxes custom fields on Contact migrate as Mailchimp merge fields, which we create in the destination Audience before import. erxes ownerId does not map to a Mailchimp field; we flag this in the handoff documentation for teams that need rep attribution.
erxes
Company
Mailchimp
Merge Fields on Audience Member
1:manyerxes Company records do not have a direct Mailchimp equivalent because Mailchimp has no Account object. We split company data: the company name becomes a COMPANY merge field on each Contact that links to it, and additional company properties (industry, size, website, address) become merge fields (COMPANYINDUSTRY, COMPANYSIZE, COMPANYWEBSITE) that we populate per linked Contact. The customer decides during scoping whether to use one Audience for all contacts or segment by company domain.
erxes
Engagement: Email Campaign
Mailchimp
Tag
lossyerxes email campaign history does not map to Mailchimp campaign records (Mailchimp campaigns are not created by API import; they are built inside the Mailchimp UI). Instead, we tag each Contact in Mailchimp with tags reflecting their erxes engagement history (e.g., 'Received Welcome Email', 'Opened Campaign Q4 Newsletter'). This preserves a lightweight signal of past email interaction without recreating the full campaign audit trail.
erxes
Engagement: Unsubscribes
Mailchimp
Suppression List
lossyerxes contacts with an unsubscribed email status must import into Mailchimp as suppressed contacts before any sendable records land. We export the erxes unsubscribes list, format it for Mailchimp's suppression import API, and push it first. This step is mandatory for deliverability protection: importing sendable records before suppression lists can trigger Mailchimp's spam filter audit and temporarily suspend the new account's sending reputation.
erxes
User/Team Member
Mailchimp
Tag or Merge Field
lossyerxes Users (team members) do not map to Mailchimp objects because Mailchimp uses account-level user access rather than contact-level owner assignments. We document the erxes user list and their assigned contacts in the handoff spreadsheet. If the customer needs rep attribution on Mailchimp contacts (e.g., for accountability or territory management), we add a REPASSIGNMENT merge field and populate it from erxes ownerId during contact import.
erxes
Conversation
Mailchimp
Tag
lossyerxes multi-channel Conversation history (email, SMS, chat, WhatsApp messages) has no Mailchimp equivalent. We tag contacts who appear in Conversations with metadata tags (e.g., 'Has SMS History', 'Has Chat History') to signal conversation touchpoints, but the full message body, thread ordering, and channel metadata do not migrate. This is a conscious data reduction decision because Mailchimp is an email marketing platform, not a helpdesk.
erxes
Custom Field (Contact-level)
Mailchimp
Merge Field
1:1erxes custom fields defined on Contacts migrate to Mailchimp merge fields with type mapping: text fields become TEXT merge fields, date fields become DATE merge fields, dropdown selects become dropdown merge fields. We create the merge fields in Mailchimp before contact import using the Mailchimp Marketing API. erxes custom fields on other objects (Deals, Tasks, Companies) do not migrate because the parent objects have no Mailchimp equivalent.
erxes
Automation Workflows
Mailchimp
Documented Inventory
lossyerxes Automation Workflows (trigger-action sequences defined in the Marketing plugin) do not migrate to Mailchimp Customer Journeys because the automation logic, triggers, and conditions are platform-specific and not exportable from erxes. We extract the automation names, active/inactive status, and trigger types and deliver them as a written inventory with Mailchimp Customer Journeys equivalents. The customer rebuilds them in Mailchimp's automation builder post-migration.
| erxes | Mailchimp | Compatibility | |
|---|---|---|---|
| Contact | Audience Member1:1 | Fully supported | |
| Company | Merge Fields on Audience Member1:many | Fully supported | |
| Engagement: Email Campaign | Taglossy | Fully supported | |
| Engagement: Unsubscribes | Suppression Listlossy | Fully supported | |
| User/Team Member | Tag or Merge Fieldlossy | Fully supported | |
| Conversation | Taglossy | Fully supported | |
| Custom Field (Contact-level) | Merge Field1:1 | Fully supported | |
| Automation Workflows | Documented Inventorylossy | 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
Mailchimp gotchas
Contact count includes unsubscribed and non-subscribed records
Automation workflows cannot be exported
Account suspensions trigger silently during migration
Template HTML is Mailchimp-specific and may not render in other platforms
E-commerce data requires active store connection
Pair-specific challenges
Migration approach
Discovery and plugin activation verification
We audit the erxes instance to confirm which plugins are active (Sales, Marketing, Operations) because inactive plugins make their data objects inaccessible via the API. We extract record counts for Contacts, Companies, Conversations, and active Automations. We verify SPF, DKIM, and domain authentication status on erxes for deliverability baseline. We review erxes custom field definitions on Contacts to map them to Mailchimp merge field types (TEXT, DATE, NUMBER, DROPDOWN). The discovery output is a written scope confirming object counts, field mapping, and suppression list volume.
Mailchimp Audience setup and merge field creation
We create the destination Mailchimp Audience (or confirm the existing Audience name and list ID) and provision all required merge fields using the Mailchimp Marketing API before any contact import begins. Merge field names follow Mailchimp naming conventions (max 10 characters, uppercase, alphanumeric). We configure the audience settings: default from-name, reply-to address, and double opt-in preference. We also set up any tags required for engagement history signaling (e.g., 'erxes-migrated', 'Has-Conversation-History').
Suppression list import first
We export all erxes contacts with an unsubscribed, bounced, or cleaned email status and format the list for Mailchimp's suppression import API. We push this suppression list before any sendable record import. This step is sequenced first and validated by querying Mailchimp's suppression list count before proceeding. If the suppression list is empty, we document that and proceed directly to sendable import.
Contact extraction via GraphQL with pagination
We extract erxes Contacts in paginated GraphQL batches using cursor-based pagination. Each batch includes all standard fields (email, firstName, lastName, phone) plus all custom field values and the linked Company ID for merge field enrichment. We implement checkpointing so that extraction can resume from the last cursor position on timeout. For datasets over 25,000 records, we split extraction across multiple concurrent workers with shared checkpoint state.
Transform, deduplicate, and push via Mailchimp API
We transform erxes contacts into Mailchimp subscriber format: email becomes the subscriber_hash (MD5 of lowercase email), standard fields map to FNAME/LNAME/PHONE, company data enriches to merge fields, and engagement history generates tags. We run deduplication against the Mailchimp Audience before each batch upsert to avoid creating duplicate subscribers. Batches of up to 500 subscribers push via the Mailchimp PUT members endpoint with exponential backoff on rate-limit responses. We emit a per-batch success/failure count and log failures for reconciliation.
Validation, reconciliation, and handoff
We run a post-migration reconciliation comparing erxes sendable contact count against Mailchimp Audience member count (excluding suppressions). We spot-check 25-50 records in Mailchimp against the erxes source for field-level accuracy on merge fields and tags. We deliver the written Automation inventory document listing each erxes automation with its trigger type and a Mailchimp Customer Journeys equivalent recommendation. We do not rebuild automations inside Mailchimp; that work is handled by the customer's marketing team or a Mailchimp-certified partner.
Platform deep dives
erxes
Source
Strengths
Weaknesses
Mailchimp
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 Mailchimp.
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 Mailchimp migration scoping. Not seeing yours? Book a call.
Walk through your erxes to Mailchimp 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 Mailchimp
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.