CRM migration

Migrate from Mautic to Twenty CRM

Field-level mapping, validation, and rollback between Mautic and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.

Mautic logo

Mautic

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

60%

6 of 10

objects map 1:1 between Mautic and Twenty CRM.

Complexity

BStandard

Timeline

3-5 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from Mautic to Twenty CRM is a structural migration that separates your marketing automation data from your CRM record layer. Mautic's Contact and Company objects map cleanly to Twenty's People and Company objects, and Mautic's Campaigns translate to Opportunities when the campaign had associated deal records. However, Mautic's marketing automation-native features — Segments, Stages, Points, Campaigns, Forms, and Assets — have no direct Twenty equivalents. We export these as written inventories and configuration documentation for your admin to rebuild inside Twenty's custom objects and workflows. The most technically complex migration step is preserving engagement history: Mautic stores call, email, meeting, and note records in its MySQL/MariaDB database with relationships in junction tables, while Twenty's timeline events require a parent record to attach to, and the Timeline Events API does not yet support standalone entries without a note or task wrapper. We handle this by mapping Mautic engagements to Twenty Tasks and Notes with the original timestamp preserved, and by bypassing Mautic v6's CSV export queue entirely since it fails silently without logging errors.

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

Mautic logo

Mautic

What's pushing teams away

  • Upgrading between major versions (4→5→6) is not a simple in-place update; plugins and custom code frequently break silently with no errors logged.
  • MySQL/MariaDB column-size limits and index-per-table restrictions throttle performance at contact counts above 500K, forcing expensive database workarounds.
  • Self-hosting requires dedicated server management, security patching, and cron job maintenance that marketing teams are not equipped to handle.
  • The UI and documentation lag behind feature development, making routine tasks like bulk contact exports unreliable in newer versions (v6.0.0 CSV exports queue but do not reliably email).
  • Enterprise support tiers at $20K–$30K/year are priced similarly to SaaS alternatives, removing the cost advantage for organizations that need professional SLA coverage.

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 Mautic objects map to Twenty CRM

Each row shows how a Mautic 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.

Mautic

Contact

maps to

Twenty CRM

People

1:1
Fully supported

Mautic Contacts map directly to Twenty People. Standard fields (email, firstname, lastname, phone, title, city, country) migrate to their Twenty equivalents. Mautic custom contact fields migrate to Twenty custom fields on People — but the Twenty custom field must be created in Settings → Data Model BEFORE the CSV import runs, per Twenty's documentation. We create all custom fields in the destination schema first, then map Mautic field values during import. Mautic's point score migrates to a numeric custom field on People, and Mautic's stage value migrates to either a custom picklist field or a tag-based indicator in Twenty.

Mautic

Company

maps to

Twenty CRM

Company

1:1
Fully supported

Mautic Company records map directly to Twenty Company. Domain name from Mautic becomes the Company website field and serves as the dedupe key during import. Mautic's industry, annual_revenue, and number_of_employees fields migrate to their Twenty equivalents. Company is imported before People so that the company link on People is satisfied at insert time. Multi-company associations from Mautic (a Contact can belong to multiple Companies) are handled as a 1:N People-to-Company relationship in Twenty, with the primary company designated first.

Mautic

Campaign

maps to

Twenty CRM

Opportunity

1:1
Fully supported

Mautic Campaigns with associated financial records (campaign revenue fields or linked deals) map to Twenty Opportunities where the campaign name becomes the Opportunity name and the campaign type becomes a custom picklist. Campaigns without deal associations are exported as written configuration documentation: campaign logic, step sequences, and contact membership criteria. Twenty does not have a native Campaign object equivalent; the campaign is represented as an Opportunity if it had a revenue target, or as a written handoff note for the customer's admin to rebuild inside Twenty's workflow builder.

Mautic

Segment

maps to

Twenty CRM

Custom Object or written inventory

lossy
Fully supported

Mautic Segments (dynamic contact lists filtered by field values, tags, or behaviors) have no direct Twenty equivalent. We export the segment filter definitions — the field names, operators, and values that define each segment — as a written inventory document. The customer's admin rebuilds these inside Twenty as filtered views or custom objects. Segment membership itself is not migrated because Twenty recalculates list membership based on its own data.

Mautic

Stage

maps to

Twenty CRM

Opportunity Stage or custom picklist

lossy
Fully supported

Mautic Stages (contact lifecycle positions such as Lead, MQL, Customer) map to Twenty Opportunity Stage values if they apply to the sales pipeline, or to a custom picklist field on People if they track contact lifecycle. We work with the customer during scoping to determine which Stages represent deal progression (mapped to Opportunity Stage) and which represent contact status (mapped to a custom People field). Stage transition timestamps from Mautic migrate as custom date fields on the target object.

Mautic

Points and Point Groups

maps to

Twenty CRM

Custom numeric field on People

lossy
Mapping required

Mautic's points-based lead scoring system migrates as a numeric custom field on Twenty People. Point groups (named score buckets) migrate as named value pairs or tags on the People record. The scoring logic itself — the rules that assign points for behaviors — does not migrate and is documented as a written handoff for the customer's admin to implement inside Twenty's workflow builder.

Mautic

Tag

maps to

Twenty CRM

Multi-select picklist or tag field

lossy
Fully supported

Mautic tags (flat string labels) migrate to Twenty as a multi-select picklist on People if the tag count is under 100, or as tag values stored in a custom text field if the tag vocabulary is larger. Tags are preserved exactly as strings from Mautic; no tag consolidation or synonym mapping is applied unless the customer requests it during scoping.

Mautic

Custom Object

maps to

Twenty CRM

Custom Object

1:1
Fully supported

Mautic Custom Objects migrate to Twenty Custom Objects with the same API-name-style naming convention. The destination schema (custom object name, custom fields, field types, picklist values) must be created in Twenty Settings → Data Model before data import begins. Mautic's Custom Object Relationships are accessed via the MySQL database junction tables because the Mautic REST API endpoint for relationship creation is documented as non-functional (2022 community report). We map junction table records to Twenty's native lookup relationships between custom objects, preserving the parent-child structure. Relationship cardinality is preserved as documented in the source schema.

Mautic

Engagement: Email, Call, Meeting, Note

maps to

Twenty CRM

Task and Note

1:1
Fully supported

Mautic engagement records (calls, emails, meetings, notes) migrate to Twenty Task and Note objects. The engagement timestamp migrates as the ActivityDate on Task; engagement body and subject migrate as fields on Note. The primary contact lookup on each engagement migrates to the linked People record in Twenty. Note: Twenty's Timeline Events API does not support standalone timeline entries without an attached note or task — a known limitation documented in Twenty's GitHub discussions (discussion #8948). We work around this by migrating engagements as Note records with the original Mautic engagement type stored as a custom field, preserving the full activity history in a queryable format.

Mautic

User

maps to

Twenty CRM

Workspace Member

1:1
Fully supported

Mautic Users map to Twenty workspace Members. We match by email address. Critical constraint: Twenty requires users to be invited and to accept their invitation BEFORE any data import that references an Owner or assignee. We extract all owner and assignee references from Mautic records, resolve them against the Twenty Member list, and flag any owner without a matching Twenty user as a reconciliation item. The customer's admin provisions missing users before the record import phase begins.

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.

Mautic logo

Mautic gotchas

High

Mautic v6 CSV export silently fails to deliver files

High

Mautic 4 to 5 upgrade breaks plugins without warning

Medium

MySQL/MariaDB index limits throttle large contact databases

Medium

Custom Object Relationships API is non-functional

Medium

Mautic 5 to 6 migration logs no errors on failure

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

  • Mautic v6 CSV export silently fails without logging errors

    In Mautic v6.0.0, the CSV export function queues the file for background processing but never delivers it via email and writes no errors to Apache logs or Mautic's internal log. This affects both contacts and companies exports. We handle this by bypassing the built-in export entirely: we connect directly to the MySQL/MariaDB database using authenticated read access and extract records from the leads, companies, and related tables, or we call the REST API in batched requests with retry logic. This ensures a reliable data extraction regardless of the export queue failure. Customers must provide database credentials or API read access for this approach.

  • Twenty timeline events cannot be created without a parent record

    Twenty CRM's Timeline Events API (as documented in GitHub discussion #8948) does not accept standalone timeline entries — the API requires an attached note, task, or other parent object to create a timeline entry. This means bulk migration of Mautic engagement history requires a mapping strategy: we create Twenty Note records for each Mautic engagement, storing the original Mautic engagement type, timestamp, and body content as fields on the Note. This preserves the full activity history in a format Twenty can query and display on the People and Company timeline pages.

  • Twenty requires pre-provisioned fields and users before CSV import

    Twenty's CSV import creates records, not fields. Per Twenty's documentation, custom fields must be created in Settings → Data Model before the import file is loaded, and Users must be invited and active before any data import that references owner or assignee fields. We handle this by running a pre-migration schema provisioning phase: we export the Mautic custom field definitions, create matching Twenty custom fields, invite all required Members, and wait for acceptance before any record data moves. Skipping this phase causes import failures or orphaned relationship references.

  • Mautic Custom Object Relationships API is non-functional

    Mautic's Custom Objects support relationships between object types, but the REST API endpoint for creating relationship records between custom objects is documented as broken (community forum report, 2022). We handle this by accessing the relationship data directly through the MySQL/MariaDB junction tables (mautic_custom_object_relationship), mapping junction table records to Twenty's native lookup relationship fields between custom objects. This requires the customer to provide database credentials or a read-only database user.

  • Mautic bulk email and sequences have no Twenty equivalent

    Mautic's strength is its multi-channel marketing automation: bulk email sends, SMS campaigns, drip sequences, and point-triggered campaigns. Twenty CRM does not have built-in bulk email or sequence functionality. Organizations migrating from Mautic that need continued email marketing automation must plan a separate tool (continue running Mautic for marketing-only use, adopt a tool like Groundhogg, or use n8n with SMTP). We document this gap in the migration handoff and do not attempt to recreate Mautic's email campaigns as Twenty records.

Migration approach

Six steps for a successful Mautic to Twenty CRM data migration

  1. Discovery and data audit

    We audit the source Mautic instance across version (v4, v5, or v6), deployment type (self-hosted or Mautic Cloud), custom field count, custom object schemas, engagement volume, and campaign count. We specifically profile the database for large tables approaching MySQL index limits and identify any custom plugin configurations that affect data schema. We pair this with a scoping call to confirm the Twenty destination (cloud Pro at $9/user, cloud Organization at $19/user, or self-hosted free) and agree on the scope of engagement history migration.

  2. Schema provisioning in Twenty

    We create the destination schema in Twenty before any data moves. This includes creating all custom fields on People and Company (matched to Mautic custom contact fields), creating any Custom Objects (matched to Mautic Custom Objects), configuring Opportunity Stage values (matched to Mautic Stages or Campaign types), and provisioning Twenty workspace Members for every Mautic user. We run this in Twenty's Settings → Data Model and Settings → Members. This phase is sequenced first because Twenty's CSV import fails if referenced custom fields do not exist at import time.

  3. Data extraction bypassing Mautic v6 export failure

    We extract all record data directly from Mautic's MySQL/MariaDB database using authenticated read access, bypassing Mautic's built-in CSV export which fails silently in v6. For Mautic instances running v5 or earlier, we use the REST API with batched requests and exponential backoff. We extract Contacts (leads table plus custom field values from the join table), Companies (companies table), Custom Objects and their junction table relationships (custom_object table and relationship junction tables), and engagement records (from the lead_events and related tables). We emit a row-count reconciliation report against the source database before any transformation begins.

  4. Transformation and field mapping

    We apply the transformation rules designed during scoping: Mautic contact fields map to Twenty People fields, Mautic company fields map to Twenty Company fields, Mautic Stages map to Opportunity Stage values, Mautic point scores map to a custom numeric field on People, and Mautic tags map to a multi-select picklist. Custom Object relationships are resolved by joining the junction table records against the migrated custom object IDs. Engagement records are mapped to Twenty Note records with the original Mautic engagement type and timestamp preserved as fields. We run deduplication against the email field as the primary key. Any Mautic Owner without a matching Twenty Member goes to a reconciliation queue for the customer's admin to provision.

  5. Sandbox validation

    If the customer is using Twenty cloud (Pro or Organization tier), we run the first import into a test workspace or a dry-run import to validate field mapping, confirm that custom field types are correct (text vs number vs picklist), verify relationship resolution, and measure API rate limit behavior. The customer reconciles record counts and spot-checks 20-30 records against the Mautic source before we proceed to production import. If self-hosted Twenty is the destination, we validate the import using a local PostgreSQL instance before the production cutover.

  6. Production migration in dependency order

    We run the production migration in record dependency order: Twenty Members (validated, not imported), Companies (from Mautic Companies), People (from Mautic Contacts, with AccountId resolved to the Company), Opportunities (from Mautic Campaigns with deal data or standalone deal records), Custom Objects (with lookups to People and Companies resolved), then Notes and Tasks (from Mautic engagements). Each phase emits a row-count reconciliation report. We use Twenty's REST API at up to 100 requests per minute (Pro) or 200 requests per minute (Organization) with exponential backoff on 429 responses.

  7. Cutover and handoff documentation

    We freeze writes in Mautic during cutover, run a final delta import of any records modified during the migration window, then mark Twenty as the system of record. We deliver the complete migration handoff package: a field mapping spreadsheet, a written inventory of Mautic Segments and Campaigns requiring rebuild in Twenty's workflow builder, a written inventory of Mautic Forms and Landing Pages with recommendations for replacement (Twenty native or external tool), and a point-and-stage scoring logic document. We support a 72-hour hypercare window for reconciliation issues. We do not rebuild Mautic workflows, sequences, or campaigns as Twenty workflows as part of this migration scope.

Platform deep dives

Context on both ends of the pair

Mautic logo

Mautic

Source

Strengths

  • Zero per-contact licensing cost with the self-hosted open-source core product.
  • Full source code access enables unlimited customization without vendor dependency.
  • Complete data ownership and infrastructure control for compliance-sensitive organizations.
  • Multi-channel support including email, SMS, mobile push, and web notifications in one platform.
  • Active community and partner ecosystem with implementation support available.

Weaknesses

  • Self-hosted deployment requires ongoing server administration, security updates, and infrastructure costs.
  • MySQL/MariaDB column-size and index-per-table limits constrain large-scale contact databases.
  • Documentation and feature parity across versions is inconsistent, especially for new major releases.
  • CSV export reliability degrades in Mautic v6, and queued export jobs can fail silently without logging errors.
  • Upgrade paths between major versions frequently break third-party plugins and custom code.
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?

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

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across Mautic 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

    B

    Mautic: Not publicly documented — enforced at the server level, not within Mautic software.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

Walk through your Mautic to Twenty CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Most migrations land between three and five weeks for accounts under 15,000 People, 2,000 Companies, and 500 Opportunities with no custom objects or engagement history migration. Migrations with Mautic Custom Objects and relationship re-creation, large engagement histories (over 100,000 call, email, meeting, and note records), or multiple campaign-to-Opportunity mappings move to eight to twelve weeks because of database extraction work, relationship resolution, and the mandatory schema pre-provisioning phase in Twenty.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Mautic.
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