CRM migration

Migrate from Monica CRM to Twenty CRM

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 logo

Monica CRM

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

60%

6 of 10

objects map 1:1 between Monica CRM and Twenty CRM.

Complexity

CModerate

Timeline

2-4 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

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

Monica CRM logo

Monica CRM

What's pushing teams away

  • No native integrations with popular tools — users want built-in sync with calendars, email clients, and other systems out of the box.
  • Side project status raises long-term viability concerns — community discussions note the project could sunset with no commercial backup.
  • Self-hosted rate limits are hardcoded — automated syncs can fail silently when CardDAV scripts hit the 60 requests-per-minute ceiling.
  • Missing features compared to business CRMs — no pipelines, no team collaboration tools, no advanced reporting for professional use cases.
  • Open-source forks create fragmentation — Monica-Next and Chandler operate independently, making it unclear which branch receives future development.

Choosing

Twenty CRM logo

Twenty CRM

What's pulling them in

  • Top open-source CRM on GitHub with 40.6K stars, giving teams full source code access and infrastructure ownership without per-feature licensing surprises.
  • Free self-hosting under AGPL-3.0 means unlimited users and custom objects for the cost of cloud infrastructure alone, typically $20–100/month.
  • Pricing page explicitly mocks competitors for charging add-on fees for API access, webhooks, and workflows — transparency that resonates with RevOps teams burned by Salesforce.
  • Unlimited custom objects and fields with no price impact, letting teams shape the data model to their business rather than forcing business into rigid schemas.
  • Modern TypeScript/React/PostgreSQL stack means developer-led teams can extend, self-host, or integrate without fighting legacy architecture.

Object mapping

How Monica CRM objects map to Twenty CRM

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

maps to

Twenty CRM

Person

1:1
Fully supported

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

maps to

Twenty CRM

Company

1:many
Fully supported

Monica 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

maps to

Twenty CRM

Custom Relation object or Person field

lossy
Fully supported

Monica 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

maps to

Twenty CRM

Note

1:1
Fully supported

Monica 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

maps to

Twenty CRM

Task

1:1
Fully supported

Monica 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

maps to

Twenty CRM

Custom Gift object or Note

lossy
Fully supported

Monica 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

maps to

Twenty CRM

Custom Debt object or Note

lossy
Fully supported

Monica 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

maps to

Twenty CRM

Tag

1:1
Fully supported

Monica 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

maps to

Twenty CRM

Person.lastActivityDate + Task

1:1
Mapping required

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

maps to

Twenty CRM

Note

1:1
Fully supported

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

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.

Monica CRM logo

Monica CRM gotchas

High

No v4 to v5 migration path exists

Medium

Self-hosted rate limits are hardcoded

Medium

Side project sustainability risk

Medium

No official bulk export or backup endpoint

Low

Privacy note fields do not enforce access control in most destinations

Twenty CRM logo

Twenty CRM gotchas

High

Import order is enforced and critical

High

Export limited to 20,000 records and visible columns only

Medium

Soft-deleted records count toward uniqueness and trigger restores

Medium

API rate limits cap at 200 req/min on Organization tier

Low

No native email sequences — follow-up cadences require external tools

Pair-specific challenges

  • No v4 to v5 migration path exists in Monica

    The Monica repository authors have stated they do not plan to build a v4-to-v5 importer. Users running v4 have no official upgrade route and risk losing all accumulated data if they attempt the move. We handle this by extracting from whichever version is live — we inventory the schema differences between v4 and v5 during scoping and map v4 Contacts, Journal entries, and Reminders to compatible field names before loading into Twenty. We recommend exporting a complete data snapshot from the live Monica instance before any migration begins.

  • Monica has no Company or organization object

    Monica's flat Contact model stores organization name only as an optional text field on a Contact record, not as a separate object with lookups. When migrating to Twenty, which has a native Company object, we must extract unique organization names from Monica Contacts, create Company records in Twenty, and then resolve the Person-to-Company lookup. Contacts without an organization name remain standalone Person records with no Company attachment. This structural difference means the business-context relationship between contacts at the same organization is not automatically preserved.

  • Self-hosted Monica rate limits are hardcoded

    The self-hosted Monica API has hardcoded rate limits in RouteServiceProvider.php (60 requests per minute for CardDAV endpoints). Automated migration scripts that sync sequentially will hit this ceiling and fail without warning. We implement exponential backoff and request throttling tuned to the detected rate limit, pausing and retrying rather than silently dropping records. Cloud-hosted Monica instances may have different rate-limit behavior depending on their tier; we assess and adapt during the extraction phase.

  • Monica's private note privacy flags do not carry over

    Monica allows private notes per contact that are visible only to the owner. Twenty has no per-record privacy flag equivalent — all Notes on a Person record are visible to all workspace members by default. We flag this distinction during scoping and recommend the customer review whether private notes should be migrated as internal-labeled Notes (with an 'internal' label in the Note title) or excluded from the migration entirely to avoid inadvertent exposure.

Migration approach

Six steps for a successful Monica CRM to Twenty CRM data migration

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

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

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

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

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

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

Context on both ends of the pair

Monica CRM logo

Monica CRM

Source

Strengths

  • Open-source and self-hostable at no cost with an official Docker image.
  • REST API exposes all major objects for programmatic read and write operations.
  • Intuitive UI designed specifically for personal relationship tracking, not sales pipelines.
  • Community-driven development with transparent public roadmap on GitHub.
  • Chrome extension provides AI-assisted recall during web browsing.

Weaknesses

  • Side project with no commercial backing or guaranteed long-term support.
  • No documented v4-to-v5 migration path, leaving data stranded on older versions.
  • Self-hosted deployments have hardcoded rate limits not configurable without code changes.
  • Lacks native integrations with calendars, email clients, or other productivity tools.
  • No advanced reporting, team collaboration, or pipeline management features.
Twenty CRM logo

Twenty CRM

Destination

Strengths

  • AGPL-3.0 open-source license with full source code on GitHub — no vendor lock-in, no sunset risk.
  • Unlimited users and unlimited custom objects on self-hosted, with no feature gating based on headcount.
  • REST and GraphQL APIs available on all paid tiers, not locked behind an enterprise add-on fee.
  • MCP server and webhooks shipped as standard features, not premium upgrades.
  • Modern PostgreSQL-backed data model that developer teams can query, extend, and self-host.

Weaknesses

  • Recent v1.0 release means limited production hardening compared to CRMs with multi-year operational track records.
  • No native email sequencing or sales engagement tools — follow-up cadences require a separate platform.
  • No native two-way email sync or inbox integration, requiring third-party connectors for full activity logging.
  • Self-hosting 'free' pricing hides real infrastructure and DevOps costs that stack up over time.
  • Workflow automation is functional but lacks the complexity needed for sophisticated multi-step sales motions.

Complexity grading

How hard is this migration?

Moderate CRM migration. 1 of 8 objects need a mapping; the rest are 1:1.

C

Overall complexity

Moderate migration

Derived from compatibility, mapping clarity, API constraints, and data volume across Monica CRM and Twenty CRM.

  • 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

    C

    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

    B

    Monica CRM doesn't expose a bulk API — REST + parallelization used for high-volume runs.

Estimator

Estimate your Monica CRM to Twenty CRM 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 Monica CRM to Twenty CRM data migrations

Answers to the questions buyers ask most during Monica CRM to Twenty CRM migration scoping. Not seeing yours? Book a call.

Can't find your answer?

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 consultation

Most Monica to Twenty migrations land between two and four weeks for accounts under 2,000 Contacts with no custom object requirements. Migrations with large Journal histories (over 10,000 entries), Gift or Debt object reconstruction, or Monica v4 source deployments requiring schema divergence handling move to four to six weeks because of the additional extraction work and custom object provisioning. Monica self-hosted deployments may add one to two weeks for rate-limit tuning.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Monica CRM.
Land in Twenty CRM, 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