CRM migration
Field-level mapping, validation, and rollback between Monica CRM and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
Monica CRM
Source
Twenty CRM
Destination
Compatibility
6 of 10
objects map 1:1 between Monica CRM and Twenty CRM.
Complexity
CModerate
Timeline
2-4 weeks
Overview
Monica CRM and Twenty CRM are both open-source platforms, but they occupy different points on the relationship-to-business CRM spectrum. Monica is a personal relationship manager built around a flat contact model with no native Company or organization concept. Twenty is a full business CRM with Person, Company, Opportunity, Task, and Note objects plus a custom-object engine that mirrors Salesforce's flexibility. The migration requires mapping Monica's flat Contact-centric schema into Twenty's relational model — resolving relationship types (spouse, child, parent, colleague, pet) as custom fields or a custom Relation object, converting Journal entries to Notes, and remapping Reminders as Tasks. Monica's side-project status and lack of a v4-to-v5 migration path mean we extract from whichever version is live and handle schema divergence during scoping. We do not migrate Monica's automations, reminders-as-workflow, or contact-specific privacy flags because Twenty has no equivalent access-control model at the object level.
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 Monica CRM 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.
Monica CRM
Contact
Twenty CRM
Person
1:1Monica Contacts map directly to Twenty Persons. All contact detail fields (emails, phones, addresses, social profiles) migrate to the corresponding typed fields on the Person object. Avatar blob URLs migrate as an avatar URL field if Twenty's UI supports it, otherwise as a link in the contact's description or a custom field. Monica contacts with no organization name become standalone Person records. The mapping resolves contact duplicates via email as the dedupe key.
Monica CRM
Contact (organization name)
Twenty CRM
Company
1:manyMonica has no native Company object; organization data exists only as an optional name field on a Contact record. We extract all unique organization name values from Monica Contacts, create a corresponding Company record in Twenty for each unique name, then link the Monica Contact to the Twenty Company via the Person's companyId field. Monica Contacts without an organization name produce no Company record and remain standalone Persons.
Monica CRM
Relationship
Twenty CRM
Custom Relation object or Person field
lossyMonica relationship types (spouse, child, parent, friend, colleague, pet, significant other) have no direct Twenty equivalent. During scoping the customer chooses one of two strategies: (1) create a custom Relation custom object in Twenty with fields for type (select), direction (to/from), and relatedPersonId (lookup to Person); or (2) store relationship types as a multi-select field on the Person record itself for simpler relationship mapping. We apply the chosen strategy uniformly across all Contacts before migration.
Monica CRM
Journal entry
Twenty CRM
Note
1:1Monica Journal entries are timestamped activity logs with optional titles and rich-text bodies. They map to Twenty Note records linked via the Person record's id. We preserve the original creation date as the Note's createdAt timestamp and set the Note's body to the Journal's rich-text content. Journal entries without a linked Contact are imported as standalone Notes for later assignment.
Monica CRM
Reminder
Twenty CRM
Task
1:1Monica Reminders (birthday reminders, event reminders, and ad-hoc follow-ups) map to Twenty Task records. Birthday reminders map with dueDate set to the birthday date, title populated with 'Birthday: {contact name}', and a recurring task flag or recurrence pattern if Twenty supports it. Ad-hoc follow-up reminders map with dueDate, title, and a link to the associated Person. Completed status migrates as Task completed boolean.
Monica CRM
Gift
Twenty CRM
Custom Gift object or Note
lossyMonica Gift records (given, wanted, offered) with estimated values and dates require a custom object in Twenty since no native Gift equivalent exists. During scoping the customer decides whether to create a custom Gift object (with fields: name, type, estimatedValue, currency, date, status, and a Person lookup) or consolidate Gift records as labeled Notes on the associated Contact. The chosen strategy is applied consistently across all Gift records before migration.
Monica CRM
Debt
Twenty CRM
Custom Debt object or Note
lossyMonica Debt records (money owed to or by a contact) with amount and currency map to a custom Debt object in Twenty or to labeled Notes if the customer prefers minimal custom schema. Custom Debt object fields include: direction (owed to / owed by), amount, currency, description, and PersonId lookup. We flag during scoping whether Debts should be migrated or archived based on active status.
Monica CRM
Tag
Twenty CRM
Tag
1:1Monica contact tags export as a string array and import as Twenty tags on the Person record. Tags with high cardinality (over 50 unique values) may be migrated as a multi-select picklist field on Person instead of native tags, depending on Twenty's tag implementation at the time of migration.
Monica CRM
Stay-in-touch tracking
Twenty CRM
Person.lastActivityDate + Task
1:1Monica tracks last-contacted date per contact and prompts follow-up reminders. We map the last-contacted date to a custom lastActivityDate field on the Twenty Person record. Any pending follow-up prompt generates a Task record with the appropriate due date linked to the Person. Completed stay-in-touch tasks migrate as completed Tasks.
Monica CRM
Note (private)
Twenty CRM
Note
1:1Monica private notes per contact migrate to Twenty Note records linked to the Person. Monica's per-record privacy flag has no Twenty equivalent — migrated Notes land as shared records visible to all workspace members. We flag this distinction during scoping and let the customer decide whether private Notes should be migrated as internal-labeled Notes or excluded from the migration.
| Monica CRM | Twenty CRM | Compatibility | |
|---|---|---|---|
| Contact | Person1:1 | Fully supported | |
| Contact (organization name) | Company1:many | Fully supported | |
| Relationship | Custom Relation object or Person fieldlossy | Fully supported | |
| Journal entry | Note1:1 | Fully supported | |
| Reminder | Task1:1 | Fully supported | |
| Gift | Custom Gift object or Notelossy | Fully supported | |
| Debt | Custom Debt object or Notelossy | Fully supported | |
| Tag | Tag1:1 | Fully supported | |
| Stay-in-touch tracking | Person.lastActivityDate + Task1:1 | Mapping required | |
| Note (private) | Note1: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.
Monica CRM gotchas
No v4 to v5 migration path exists
Self-hosted rate limits are hardcoded
Side project sustainability risk
No official bulk export or backup endpoint
Privacy note fields do not enforce access control in most destinations
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 schema assessment
We audit the source Monica instance across version (v4 or v5), object volume (Contacts, Relationships, Journal entries, Reminders, Gifts, Debts, Tags), and API access method (cloud-hosted vs self-hosted). For self-hosted deployments we measure the actual rate-limit behavior by hitting the API under load. We pair this with a Twenty workspace assessment to confirm the data model readiness — checking whether the standard Person object has all required fields, whether a custom Relation object needs to be created, and whether custom Gift and Debt objects have been provisioned. The discovery output is a written migration scope and a field-mapping document.
Organization name extraction and Company record creation
We extract all unique organization name values from Monica Contact records. Each unique name becomes a Twenty Company record with the organization name as the displayName. We generate a cross-reference table mapping each Monica Contact to its Twenty Company id. Contacts without an organization name skip the Company creation step and remain standalone Persons. This phase runs before any Person import so that Company lookups are available at import time.
Relationship type strategy and custom object provisioning
We implement the customer's chosen relationship-tracking strategy — either a custom Relation object with type/direction/PersonId fields, or a multi-select field on the Person record. Custom objects are created via Twenty's Settings → Data Model before any Person import begins. We verify that the schema is deployed and the API reflects the new object types before proceeding to data migration.
Sandbox migration and reconciliation
We run a full migration into Twenty's sandbox environment (or a duplicate workspace if cloud-hosted) using production-equivalent data volume. The customer reviews record counts across all object types, spot-checks 20-30 Person records against the Monica source, confirms relationship mappings, and validates Journal-to-Note conversion and Reminder-to-Task conversion. Any mapping corrections are applied before production migration begins.
Production migration in dependency order
We run production migration in record-dependency order: Company records first (from Monica organization names), then Persons (with companyId resolved), then Notes (Journal entries linked to Persons), then Tasks (Reminders linked to Persons), then Tags (applied to Persons), then custom objects (Gift and Debt records linked to Persons). Each phase emits a row-count reconciliation report before the next phase begins. We apply rate-limit throttling throughout extraction from Monica to avoid hitting the 60 req/min ceiling.
Cutover, validation, and rebuild handoff
We freeze Monica writes during cutover, run a final delta migration of any records modified during the migration window, then enable Twenty as the system of record. We deliver a written inventory of any Monica automations, reminder-triggered workflows, and contact-specific privacy notes that cannot migrate to Twenty, with a recommendation for each. We support a one-week post-cutover window for reconciliation issues. We do not rebuild Monica reminder workflows as Twenty workflows inside the migration scope.
Platform deep dives
Monica CRM
Source
Strengths
Weaknesses
Twenty CRM
Destination
Strengths
Weaknesses
Complexity grading
Moderate CRM migration. 1 of 8 objects need a mapping; the rest are 1:1.
Overall complexity
Moderate migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Monica CRM 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
Monica CRM: Documented via response headers (X-RateLimit-Limit and X-RateLimit-Remaining). Self-hosted instances also have hardcoded throttles in RouteServiceProvider.php (60 req/min for CardDAV) noted in existing gotchas..
Data volume sensitivity
Monica CRM 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 Monica CRM to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your Monica CRM 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 Monica CRM
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.