CRM migration

Migrate from Ortto to Twenty CRM

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

Ortto logo

Ortto

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

58%

7 of 12

objects map 1:1 between Ortto and Twenty CRM.

Complexity

BStandard

Timeline

2-4 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from Ortto to Twenty CRM is a platform-type shift from a marketing automation and CDP layer to a self-hosted CRM that stores contacts, companies, and pipeline. Ortto's People map directly to Twenty's Person object; Accounts map to Company. Activities (email opens, form submissions, custom events) migrate as Notes or Tasks depending on type. Campaign structures convert to Opportunities with stage mapping and tag-based categorization. Ortto's journey and automation flows cannot be exported programmatically — we document the original flow structure for your team to rebuild in Twenty. Dashboards, capture widget styling, and knowledge base articles do not migrate as configured artifacts; we provide structured inventories for manual reconstruction. The migration runs through Twenty's CSV import interface with schema pre-deployed via the Settings Data Model panel, and we handle the dependency sequencing so parent records exist before child records are inserted.

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

Ortto logo

Ortto

What's pushing teams away

  • Monthly pricing starts at $509, which is significantly higher than entry-level email tools like Mailchimp or ActiveCampaign for teams that only need basic broadcast emails.
  • CRM connectivity, particularly with Pipedrive, suffers from frequent disconnections requiring manual re-authentication and causing data sync gaps.
  • The platform sits in a middle tier — too complex for simple email needs, yet lacking the depth of enterprise marketing clouds — leading teams to outgrow it in both directions.
  • Journey/automation logic cannot be exported programmatically; teams rebuilding on a new platform must manually reconstruct every flow from screenshots or documentation.

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

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

Ortto

Person

maps to

Twenty CRM

Person

1:1
Fully supported

Ortto People map directly to Twenty Person. Standard fields (first_name, last_name, email, phone, city, country, lifecycle_stage) map to Twenty's equivalent Person fields. We export all custom fields (up to 100 supported) and pre-create corresponding fields in Twenty's Settings Data Model before import. Ortto's lifecycle stage values migrate as a text field on Person for audit continuity. Email addresses serve as the primary dedupe key during CSV import.

Ortto

Account (Organization)

maps to

Twenty CRM

Company

1:1
Fully supported

Ortto Accounts (formerly Organizations) map to Twenty Company. Each Account can link up to 3,000 People in Ortto; we resolve the Person-Company relationship during import by matching the Account ID stored on each Person record. Custom fields (up to 25) on Accounts migrate to custom fields on Twenty Company. Company domain becomes the website field and is used as a secondary dedupe key.

Ortto

Activity

maps to

Twenty CRM

Task or Note

1:many
Fully supported

Ortto Activities represent behavioral events (email opens, form submissions, page views, custom events). We split by type: marketing events (opens, clicks) migrate as Note records linked to the Person; operational events (calls, meetings, custom trackable actions) migrate as Task records with the original timestamp preserved as ActivityDate. The Activity API returns up to 100 per feed view — we paginate through the full history. This mapping preserves the activity timeline against the correct Person record using WhoId resolution.

Ortto

Tag

maps to

Twenty CRM

Tag

1:1
Fully supported

Tags are first-class objects in Ortto's API and export as a per-Person tag list. We export all tag assignments, normalize them, and create corresponding Tag records in Twenty. Tags applied to multiple objects (Person, Company, Activity) require separate Tag relation records in Twenty. The original tag taxonomy (naming conventions, tag groups) is preserved to support post-migration segmentation.

Ortto

Audience

maps to

Twenty CRM

Tag or Filter

lossy
Fully supported

Ortto Audiences are dynamic or static segments of People defined by filter rules. Twenty does not have a native Audience or Segment object. We convert audience definitions into Twenty Tags (for static segments) or documented filter criteria (for dynamic segments) that the customer's team can recreate as saved views in Twenty. The mapping notes include the original audience rule logic so the segment can be rebuilt manually.

Ortto

Campaign

maps to

Twenty CRM

Opportunity

lossy
Fully supported

Ortto Campaigns (email, SMS, push) have no direct Twenty equivalent since Twenty lacks a native campaign management object. We map campaigns to Twenty Opportunity records using a naming convention that preserves the original campaign name, with campaign type stored as a custom picklist field. Campaign status (draft, active, completed) maps to Opportunity Stage. Campaign UTM parameters and source data migrate as custom fields on the Opportunity.

Ortto

Custom Field (People)

maps to

Twenty CRM

Custom Field (Person)

lossy
Fully supported

Up to 100 custom fields per Person are fully migratable. We export field definitions (name, type, options) and create corresponding fields in Twenty's Settings Data Model before migrating values. Aggregate field types (a known Ortto API limitation) are flagged during discovery for manual post-migration recreation. Multi-select and date field types require type mapping to their Twenty equivalents.

Ortto

Custom Field (Account)

maps to

Twenty CRM

Custom Field (Company)

lossy
Fully supported

Up to 25 custom fields per Account migrate to Twenty Company custom fields. Field type restrictions in Twenty may require type conversion (for example, multi-value selects stored as comma-separated text). We document any required transformations during discovery and apply them during the transform step before import.

Ortto

Capture Widget (Form)

maps to

Twenty CRM

Not migrated

1:1
Fully supported

Capture widgets (forms and pop-ups) do not migrate. Ortto forms support up to 50 fields with visual styling configured in the UI layer. We export the field structure and mapping logic as a written inventory. The customer's team rebuilds forms using Twenty's built-in form fields or an external form tool (Typeform, Tally, or a custom form) and connects submissions via webhook to Twenty's API.

Ortto

Journey / Automation Flow

maps to

Twenty CRM

Not migrated

1:1
Fully supported

Journey/automation definitions cannot be exported via API or CSV from Ortto. We capture screenshots and document the flow structure during discovery (trigger conditions, branches, delays, CRM actions) as a written inventory. Twenty's workflow builder provides a starting point for reconstruction, but the customer's team or a Twenty implementation specialist rebuilds the logic manually post-migration.

Ortto

Dashboard / Report

maps to

Twenty CRM

Not migrated

1:1
Fully supported

Ortto dashboard configurations and cohort report definitions are not programmatically exportable. We document the dashboard structure, widget types, data sources, and filter definitions as a written inventory. Twenty's analytics views and charts are rebuilt by the customer's team in Settings.

Ortto

User Role

maps to

Twenty CRM

Workspace Member

1:1
Fully supported

Ortto user role assignments and permission sets (available on Business and Enterprise tiers) are exported where available. Twenty uses a workspace-based permission model with Members and a limited role structure that is still maturing. We map Ortto role names to the nearest Twenty equivalent and flag any permissions that have no direct counterpart in Twenty so the customer's admin can configure access manually.

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.

Ortto logo

Ortto gotchas

High

Autopilot to Ortto migration requires a fresh account and new billing

Medium

AutopilotJourneys had no annual or quarterly plans; Ortto is month-to-month

Medium

API rate limits vary significantly by plan tier

Low

Custom field aggregate type is not supported in the API

Low

Bad request rate limiter can temporarily ban your migration IP

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

  • Journey and automation flows have no export path

    Ortto's journey definitions are not accessible via API or CSV. We cannot extract automation logic as code or configuration data. During discovery we capture screenshots and document the trigger conditions, branches, delays, CRM actions, and entry/exit criteria for each active journey. The customer's team receives this as a written rebuild guide and must manually reconstruct the logic in Twenty's workflow builder or via a third-party automation tool. Skipping this step means losing the institutional knowledge of why each journey was designed a certain way.

  • Twenty's activity model differs significantly from Ortto's

    Ortto stores behavioral activities (email opens, clicks, page views, form submissions, custom events) as first-class API objects with a structured feed. Twenty models activity as Notes and Tasks. We perform the type split during migration (marketing events become Notes, operational events become Tasks) and preserve timestamps, but the structured metadata (open count, click URL, form field values) may need to be stored as note body text or custom fields depending on what Twenty's schema supports for the record type.

  • Aggregate custom field types cannot be migrated via API

    Ortto's aggregate field type for custom fields can only be created or modified via the Ortto UI, not the API. We scan the schema for aggregate fields during discovery and flag each one. The customer either recreates these manually in Ortto before migration (then the values export normally) or manually recreates the calculation logic in Twenty post-migration. This is a known Ortto API limitation not specific to the Twenty destination.

  • Twenty's API and CSV import have batch and file size limits

    Twenty uses a CSV-based import interface with field size limits per column and a maximum rows-per-file that scales with server resources. Large Ortto datasets (over 50,000 People, over 200,000 Activities) require chunked CSV generation with multiple import passes and careful ordering to resolve parent-record lookups (Person must import before Company references are resolved, Activities must follow Persons). We handle this chunking and sequencing but note that very large histories may require the customer to archive old activity records rather than migrate the full timeline.

  • Twenty's self-hosted infrastructure must be operational before migration

    Unlike SaaS-to-SaaS migrations, moving to Twenty CRM requires that the customer's self-hosted instance is deployed, accessible via API, and has a confirmed workspace created before data import begins. We can only proceed with the data migration once the Twenty API endpoint is reachable and authenticated. Teams evaluating this migration should plan for the infrastructure setup (Docker deployment, cloud VM provisioning, initial Twenty configuration) to run in parallel with the data scoping phase.

Migration approach

Six steps for a successful Ortto to Twenty CRM data migration

  1. Discovery and infrastructure readiness

    We audit Ortto across plan tier, People count, Account count, custom field definitions, tag taxonomy, audience structures, campaign list, and activity volume per event type. We also confirm the Ortto API endpoint (AU, EU, or US) and current rate limit tier. We simultaneously assess the Twenty deployment readiness: whether a Twenty instance is already running, what hosting environment is in use, and whether the workspace has been initialized. The discovery output is a written migration scope that lists every object, field, and transformation rule, plus a list of pre-requisites for the Twenty infrastructure side.

  2. Schema pre-configuration in Twenty

    We create all custom fields in Twenty's Settings Data Model before any data import. This includes Person custom fields (mapped from Ortto People custom fields), Company custom fields (mapped from Ortto Account custom fields), Opportunity custom fields for campaign metadata, and any custom objects. Twenty requires fields to exist before CSV import creates records — importing against non-existent fields silently drops those values. This step also includes inviting all team members who appear as owners or assignees in Ortto so their User records exist before OwnerId lookups are resolved.

  3. Export, transform, and validate from Ortto

    We export People and Account data via the Ortto People and Organizations API endpoints, paginating through large result sets respecting the 10-30 req/sec rate limit with exponential backoff. Activity feeds are paginated at 100 records per request. We transform each record: mapping Ortto field names to Twenty field names, converting date formats, normalizing phone numbers, and splitting lifecycle stage values for audit continuity. A validation pass confirms that required Twenty fields are populated and that no orphaned foreign-key references remain before CSV generation begins.

  4. Chunked CSV import into Twenty

    We generate CSV files per object type (People, Companies, Opportunities, Tasks, Notes, Tags) respecting Twenty's file size and row limits. Import runs in dependency order: Companies first (no parent dependencies), then People (with CompanyId resolved), then Opportunities (with CompanyId and PersonId resolved), then Tasks and Notes (with WhoId resolved to Person). Tags are imported last with their relation records linking back to Person and Company. Each import batch emits a row-count reconciliation report confirming success before the next batch begins.

  5. Post-import validation and reconciliation

    We run a reconciliation pass comparing record counts and field population rates between the Ortto source and Twenty destination. We spot-check 25-50 records per object type for field-level accuracy, verify that Person-Company relationships are intact, confirm that activity timestamps match the original Ortto values, and validate that tag counts match per Person. Any mapping gaps are corrected in a follow-up delta import. We do not declare migration complete until the reconciliation report shows a match rate above 98 percent on primary fields.

  6. Cutover, delta sync, and automation handoff

    We freeze writes to Ortto during the cutover window, run a final delta export of any records modified since the initial extract, apply the delta to Twenty, and confirm the final state. We deliver the written inventory of Ortto journeys and dashboard configurations to the customer's team along with a rebuild guide for each. We support a one-week hypercare window to resolve post-migration reconciliation issues. We do not rebuild Ortto journeys as Twenty workflows as part of the migration scope; that is a separate configuration engagement.

Platform deep dives

Context on both ends of the pair

Ortto logo

Ortto

Source

Strengths

  • Unified CDP and marketing automation eliminates the need to stitch together a separate data platform for contact enrichment and segmentation.
  • Visual journey builder with canvas-based workflow design appeals to non-technical marketers who want to own their automation without engineering support.
  • AI-powered suggestions and predictions (send-time predictions, lead scoring) are included at no additional cost across paid tiers.
  • Multi-channel reach (email, SMS, push notifications, transactional messaging) covered under a single platform subscription rather than add-on pricing.
  • Region-specific data residency (AU/EU) available for customers with data sovereignty requirements.

Weaknesses

  • Price point ($509+/month) positions Ortto above simple email tools and may be prohibitive for small teams or early-stage startups with limited budget.
  • CRM integrations, particularly Pipedrive, have reliability issues with connection drops that require manual intervention to restore sync.
  • Journey/automation logic is not programmatically portable — teams migrating away must manually rebuild every workflow from documentation.
  • No programmatic export for dashboard configurations or cohort report definitions, creating re-work for analytics-heavy teams.
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. 2 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 Ortto and Twenty CRM.

  • Object compatibility

    B

    2 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

    Ortto: 10 req/sec (Professional), 30 req/sec (Business/Enterprise); 2000 req/10s and 6000 req/60s per IP; bad-request limiter triggers 15s IP ban after 15 bad requests in 15s.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

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

Book a free 30 minute consultation

Straightforward migrations under 5,000 People and 10,000 Activities with no custom objects land in two to four weeks. Migrations with custom objects, large activity histories, multiple tag taxonomies, or a parallel Twenty infrastructure setup move to four to eight weeks. The Twenty infrastructure deployment itself (Docker setup, cloud VM provisioning, initial configuration) runs in parallel with data scoping and can extend the timeline if the customer's team is unfamiliar with self-hosted deployment.

Adjacent paths

Related migrations to explore

Ready when you are

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