CRM migration
Field-level mapping, validation, and rollback between cMercury and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
cMercury
Source
Twenty CRM
Destination
Compatibility
9 of 11
objects map 1:1 between cMercury and Twenty CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from cMercury to Twenty CRM is a cross-category migration from an email marketing platform into a CRM. cMercury stores subscribers with engagement scores, custom profile fields, tags, and campaign performance history; Twenty CRM is an open-source CRM built around Contacts, Companies, and Opportunities with a REST API and custom object extensibility. The primary mapping is cMercury Subscribers to Twenty CRM Contacts, carrying email address, subscription status, custom fields, tags, and engagement scores as custom Contact properties. Campaign metadata and engagement history (opens, clicks, bounces) migrate as Activity records on the relevant Contact. We do not migrate automations as code, and cMercury campaign sending capabilities have no equivalent in Twenty CRM — we document the existing campaign list and recommend a send-capable tool for post-migration email execution. Sending domains require fresh DNS configuration in Twenty rather than transfer. The self-hosted update path for Twenty is documented separately as an operational consideration for customers choosing the self-hosted deployment option.
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 cMercury object lands in Twenty CRM, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
cMercury
Subscriber
Twenty CRM
Contact
1:1cMercury Subscribers map directly to Twenty CRM Contacts. We map email address, subscription status (subscribed, unsubscribed, bounced), custom profile fields, and tags. The cMercury subscriber ID is preserved in a custom field cmercury_id__c for audit and cross-reference. Engagement score migrates as a numeric custom property engagement_score__c on the Contact record. Subscribers without an email address are flagged in the reconciliation report for manual review before import.
cMercury
Custom Fields
Twenty CRM
Custom Fields (Contact)
lossycMercury custom profile fields (text, number, date, dropdown) are provisioned as custom fields on the Twenty CRM Contact object via the /metadata API before import. We map each field by data type: text to TEXT, numbers to NUMBER, dates to DATE, and dropdowns to SELECT with the picklist options created in Twenty's schema. Field labels are preserved; API names are normalised to lowercase_underscore format per Twenty conventions.
cMercury
Tag
Twenty CRM
Tag
lossycMercury tags are flat labels applied per subscriber. We export all tags and their per-subscriber assignments, then recreate them in Twenty CRM as tag records linked via the Taggable type on Contact. Twenty's tagging model supports multiple tags per contact. If Twenty's tag count exceeds a practical limit for the customer's use case, we discuss converting high-frequency tags to a multi-select custom field instead.
cMercury
Engagement Score
Twenty CRM
Custom Field (Contact)
1:1cMercury tracks per-subscriber engagement scores as numeric values. We export the score value and map it to a custom NUMBER field engagement_score__c on the Twenty CRM Contact. If the customer prefers a qualitative label (High, Medium, Low) rather than the raw score, we apply a transformation rule during import based on the customer's existing score thresholds.
cMercury
Email Verification Result
Twenty CRM
Custom Field (Contact)
1:1cMercury Verify stores validation status per email address (valid, invalid, risky, catch-all). We preserve this badge as a custom SELECT field email_verification_status__c on the Twenty CRM Contact, carrying the original cMercury verification result. This allows the customer's team to filter contacts by verification status in Twenty and make deliverability decisions before sending from the new email platform.
cMercury
Segment
Twenty CRM
Named View or Custom Field Filter
1:1cMercury Segments are defined by filter rules (source, engagement, custom field values). Twenty CRM does not have a native segment equivalent; instead we recreate segment logic as Named Views on the Contact list with the same filter conditions applied as saved filters. Complex nested conditions that cannot be expressed as a single view are documented as a written filter specification for the customer to implement manually in Twenty.
cMercury
Campaign (metadata)
Twenty CRM
Note or Activity (Contact)
1:1cMercury campaign records include subject lines, send dates, and aggregate performance stats (opens, clicks, bounces, unsubscribes). Since Twenty CRM has no campaign sending capability, we migrate campaign metadata as Activity records (type = Note) on the Contact record, with the campaign name as the subject and performance stats in the note body. Campaign content blocks are not migratable to Twenty's data model.
cMercury
Campaign (aggregate stats)
Twenty CRM
Custom Report Data
1:1Aggregate campaign performance data (open rate, click rate, bounce rate, unsubscribe rate per campaign) is exported from cMercury and delivered as a CSV companion file alongside the migration. This allows the customer's admin to reference historical campaign performance in a spreadsheet or BI tool post-migration, since Twenty CRM reporting does not natively accommodate email marketing metrics.
cMercury
Asset Library
Twenty CRM
File (Contact or Company)
1:1Images and files stored in cMercury's Asset Library are downloaded and attached to the corresponding Contact record in Twenty CRM via Twenty's file attachment model. File names and folder organisation are preserved where possible. Files without a clear contact association are attached to the primary Company record or delivered as a separate file package.
cMercury
Sending Domain
Twenty CRM
Domain Configuration Documentation
1:1cMercury sending domains are configured with DKIM, SPF, and DMARC records tied to cMercury's infrastructure. We document the existing domain configuration (DNS records, authentication methods) during discovery and deliver a DNS checklist for the customer to reconfigure in their new email sending platform (SendGrid, AWS SES, Postmark, or equivalent) post-migration. Sending domain ownership cannot be transferred between platforms.
cMercury
Automations
Twenty CRM
Written Inventory (rebuild required)
1:1cMercury automations are named workflow sequences with triggers, delays, and actions. We document the full automation tree structure, trigger conditions, and action sequence during discovery and deliver a written automation inventory. Since Twenty CRM does not have a native automation engine equivalent and the cMercury automation model is not compatible with any CRM workflow format, the customer's admin rebuilds automations manually in their chosen platform. We estimate 1-2 hours per complex workflow.
| cMercury | Twenty CRM | Compatibility | |
|---|---|---|---|
| Subscriber | Contact1:1 | Fully supported | |
| Custom Fields | Custom Fields (Contact)lossy | Fully supported | |
| Tag | Taglossy | Fully supported | |
| Engagement Score | Custom Field (Contact)1:1 | Fully supported | |
| Email Verification Result | Custom Field (Contact)1:1 | Fully supported | |
| Segment | Named View or Custom Field Filter1:1 | Fully supported | |
| Campaign (metadata) | Note or Activity (Contact)1:1 | Fully supported | |
| Campaign (aggregate stats) | Custom Report Data1:1 | Fully supported | |
| Asset Library | File (Contact or Company)1:1 | Mapping required | |
| Sending Domain | Domain Configuration Documentation1:1 | Fully supported | |
| Automations | Written Inventory (rebuild required)1:1 | 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.
cMercury gotchas
Free tier caps daily sends at 200 emails
cMercury branding on Free plan emails
Automation workflows do not migrate automatically
Sending domain ownership cannot be transferred
Twenty CRM gotchas
Import order is enforced and critical
Export limited to 20,000 records and visible columns only
Soft-deleted records count toward uniqueness and trigger restores
API rate limits cap at 200 req/min on Organization tier
No native email sequences — follow-up cadences require external tools
Pair-specific challenges
Migration approach
Discovery and object mapping
We audit the cMercury account across subscriber volume, custom field definitions (field name, data type, picklist options), tag taxonomy, segment logic, automation inventory, campaign list and historical performance, engagement score distribution, and asset library size. We pair this with a Twenty CRM scoping call to confirm deployment model (self-hosted or managed cloud), API access, and custom object requirements. The discovery output is a written migration scope document with the complete object mapping table and a Twenty schema checklist.
Twenty CRM schema provisioning
We provision the destination schema in Twenty CRM using the /metadata API before any data import. This includes creating all custom fields on the Contact object (matching cMercury field types to Twenty field types), setting up picklist options for dropdown fields, and creating any custom objects required. Schema is validated in Twenty's environment before subscriber data loads. Field labels from cMercury are preserved; API names are normalised per Twenty conventions.
Subscriber export and transformation
We export cMercury subscriber records in CSV format including all standard fields (email, subscription status, created date, updated date) and custom profile fields. Engagement scores and cMercury Verify badges are extracted as separate columns. Tags are exported as a normalised relational table (subscriber_id, tag_name). We run the transformation in a staging environment, applying field type conversions, picklist value matching, and the engagement score custom field mapping before loading into Twenty.
Contact migration with reconciliation
We load contacts into Twenty CRM in batches via the REST API, with batch chunking and exponential backoff on rate limit responses. After each batch, we reconcile row counts against the source export and flag any records that failed to import. The cMercury subscriber ID is preserved in a custom field for audit. Tags are loaded after contacts are confirmed to avoid orphaned tag assignments. Engagement scores and email verification status are loaded as custom properties on each Contact.
Activity and campaign history migration
cMercury campaign metadata and aggregate performance stats are exported and delivered as Activity records (type = Note) on the relevant Contact in Twenty. Opens, clicks, and bounces per campaign are summarised and delivered as a CSV companion file. Asset library files are downloaded and re-attached to the corresponding Contact or Company record in Twenty. All engagement history is flagged as historical and not requiring further CRM action.
Cutover, DNS handoff, and automation inventory delivery
We freeze writes to cMercury during cutover and run a final delta migration of any contacts modified during the migration window. We deliver the DNS checklist for the new email sending platform and the written automation inventory document. We perform a final row-count reconciliation against the source export and hand off to the customer's admin team. We do not configure the new email sending platform or rebuild automations; those are separate engagements with the customer's marketing operations or development team.
Platform deep dives
cMercury
Source
Strengths
Weaknesses
Twenty CRM
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 cMercury and Twenty CRM.
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
cMercury: Not publicly documented. cMercury's Terms reference API rate limits as service restrictions but exact thresholds are not disclosed on the public docs site (cmercuryapi.readme.io)..
Data volume sensitivity
cMercury exposes a bulk API — large-volume migrations stream efficiently.
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 cMercury to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your cMercury to Twenty CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave cMercury
Other ways to arrive at Twenty CRM
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.