CRM migration

Migrate from Keap to Twenty CRM

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

Keap logo

Keap

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

75%

9 of 12

objects map 1:1 between Keap and Twenty CRM.

Complexity

BStandard

Timeline

2-4 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from Keap to Twenty CRM is a migration from an all-in-one marketing automation and CRM suite to an open-source CRM focused on data ownership and extensibility. Keap stores contacts with a flat contact-company relationship and drives automation through tag triggers that cannot be exported; Twenty uses a Company-Person model where companies and people are separate objects and workflows must be rebuilt using Twenty's workflow builder. We resolve the schema dependency between Keap's Contact-Company relationship and Twenty's Company-Person structure before migration, map all tag assignments as labels or custom properties, and handle Keap's 500 calls per minute API rate limit through paginated export windows. Automation sequences, landing pages, and forms cannot be migrated and must be rebuilt manually in Twenty; we deliver a written inventory of all active sequences for your admin to reference during rebuild.

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

Keap logo

Keap

What's pushing teams away

  • High cost relative to competitors — customers report Keap is significantly more expensive than ActiveCampaign, HubSpot, or HighLevel for comparable feature sets, especially when accounting for integration costs.
  • Steep learning curve and complexity — the breadth of features creates configuration overhead, with users citing difficulty understanding how tags, sequences, and pipelines interact.
  • Cannot text internationally — a specific technical limitation that drives churn for businesses with international client bases or multilingual outreach.
  • Limited flexibility for non-standard workflows — businesses with unique sales processes report Keap's opinionated structure forces workarounds or custom code.
  • Integration costs are prohibitive — the Ignite implementation package costs $1,500 for two integrations, and even the Scale tier limits integrations to five, prompting moves to platforms with broader native integrations.

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

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

Keap

Contact

maps to

Twenty CRM

Person

1:1
Fully supported

Keap Contacts map directly to Twenty Persons. Standard fields (name, email, phone, address) migrate as typed fields on the Person object. The Keap contact's associated Company ID maps to the Twenty Person's companyId field, which references a Company record created first during migration. We resolve the Company lookup at migration time to avoid orphaned Persons.

Keap

Company

maps to

Twenty CRM

Company

1:1
Fully supported

Keap Company records map to Twenty Company objects. Company name becomes displayName, domain becomes websiteUrl. We import Companies before Persons so that the Person-to-Company relationship is satisfied at insert time. Keap Company records with no linked contacts are preserved as standalone Companies in Twenty.

Keap

Tag

maps to

Twenty CRM

Label or Custom Field

lossy
Fully supported

Keap tags serve dual purposes: contact segmentation and automation triggers. We export all tags and map them as Labels on the Person record in Twenty, which provides visibility into the original tag assignments. For tags carrying business-critical classification (such as customer tier, lead source, or product interest), we recommend creating a multi-select picklist custom field on the Person object and mapping tags to that field. The customer decides during scoping which tag strategy applies. Automation-trigger tags do not migrate as triggers; they are preserved as data for manual workflow reconstruction.

Keap

Opportunity

maps to

Twenty CRM

Opportunity

1:1
Fully supported

Keap Opportunities map to Twenty Opportunities with stage, value, owner, and expected close date. Keap stage names are user-defined; we map each to a Twenty Opportunity stage, creating new stages in Twenty's pipeline settings as needed. Opportunity value maps to the amount field, and the linked Contact and Company map to the Twenty Person and Company lookups.

Keap

Pipeline Stage

maps to

Twenty CRM

Opportunity Stage

lossy
Fully supported

Each Keap pipeline becomes a Twenty pipeline. Keap stage names, probabilities, and ordering migrate as stage definitions in Twenty's pipeline configuration. The customer reviews and approves stage mapping during the discovery phase before any data moves.

Keap

Invoice

maps to

Twenty CRM

Custom Object (Invoice)

1:1
Fully supported

Keap invoices map to a Twenty Custom Object named Invoice, created in Settings > Data Model before migration. Invoice fields (number, date, total, status) map to custom fields on the object. We use the Keap invoice API endpoint directly rather than relying on pipeline activity logs due to the known Keap issue where invoice events do not appear in deal activity history (knownissues.keap.com #3275175). Line items migrate as JSON in a custom field or as related records if the customer prefers a separate line-item object.

Keap

Product

maps to

Twenty CRM

Custom Object (Product)

1:1
Fully supported

Keap product catalog items (name, SKU, price, description) map to a Twenty Custom Object named Product. We create the object and all fields via Twenty's /metadata GraphQL API before import. Product images and advanced catalog attributes are not included in the standard export; we document these for manual re-entry.

Keap

Order

maps to

Twenty CRM

Custom Object (Order)

1:1
Fully supported

Keap order records map to a Twenty Custom Object named Order, linked to the Person (customer) and Product records. Order headers, line items, payment status, and order dates migrate to custom fields. Order-level notes and internal annotations migrate as Note records linked to the Order. We pull orders via the Keap order API endpoint.

Keap

Task

maps to

Twenty CRM

Task

1:1
Fully supported

Keap tasks (subject, due date, assigned user, status, completion date) map to Twenty Tasks linked to the corresponding Person or Opportunity. We resolve the assigned user by email match against the Twenty workspace members provisioned before migration.

Keap

Note

maps to

Twenty CRM

Note

1:1
Fully supported

Keap notes associated with contacts or companies migrate as Twenty Notes linked to the Person or Company record. Note body, author, and creation timestamp preserve. We set the createdAt timestamp to match the original Keap creation date.

Keap

User

maps to

Twenty CRM

WorkspaceMember

1:1
Fully supported

Keap user accounts (name, email, role) map to Twenty Workspace Members. We resolve by email match. Any Keap user without a matching Twenty account goes to a reconciliation queue for the customer to provision before record import resumes.

Keap

Automation Sequence

maps to

Twenty CRM

Workflow (manual rebuild)

lossy
Fully supported

Keap automation sequences cannot be exported via API. We export sequence names and step counts as a written inventory delivered to the customer. The customer rebuilds sequences in Twenty's workflow builder using the inventory as a reference. This is the highest-effort rebuild item in any Keap 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.

Keap logo

Keap gotchas

High

API rate limit of 500 calls per minute

High

Automation sequences are not structurally exportable

Medium

Custom fields require in-app creation before API use

Medium

Pipeline activity history bug with invoices

Medium

V2 REST API parity gaps with XML-RPC

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

  • Automation sequences cannot be exported from Keap

    Keap's automation sequences store step definitions, conditional logic, time delays, tag assignments, and email content in a proprietary format not accessible via API. We export only the sequence name and step count as a reference inventory. Every sequence must be rebuilt manually in Twenty's workflow builder. A case study from VantageCRM documented rebuilding 47 Keap campaigns in 10 days, which illustrates the time investment required. We deliver the inventory early in the engagement so the customer can begin the rebuild work in parallel with migration preparation.

  • Keap API rate limit of 500 calls per minute requires paced export

    Keap's Data Service API enforces a hard limit of 500 calls per minute per tenant. For migrations with more than a few thousand contacts, we pace exports across multiple minute windows using request throttling and exponential backoff on 429 responses. This extends the export phase but prevents stalls. We estimate export time at roughly 30,000 records per hour under the rate limit, which informs the project timeline.

  • Custom fields require in-app creation in Keap before API use

    Keap custom fields must be created inside the application before their API field IDs become available. We discover custom field IDs via the REST contact model endpoint during discovery, then export field names, types, and values. If the customer has custom fields not visible in the API schema, we flag them for manual in-app creation before the migration window opens.

  • Keap contact-company model maps differently in Twenty

    Keap's contact records are primary with an optional company link, whereas Twenty separates Person and Company as first-class objects with a defined Many-to-One relationship. We import Companies first, then Persons with the resolved companyId. Contacts without a company association in Keap become standalone Person records in Twenty. This structural change means deduplication logic (email as dedupe key) applies differently across the two objects.

  • Twenty lacks native sequencing and email marketing

    Twenty CRM does not include a native sequence (cadence) feature or built-in email marketing. Teams migrating from Keap's automation-first environment will need to adopt separate tools for email campaigns and sales engagement cadences. We flag this gap during discovery and recommend tooling (such as a dedicated email platform or Zapier-connected sequence tool) before cutover. Keap's email campaign records migrate as data reference only; the customer rebuilds sends in their chosen email platform.

Migration approach

Six steps for a successful Keap to Twenty CRM data migration

  1. Discovery and Keap API audit

    We audit the source Keap account via API: contact volume, company volume, tag inventory, opportunity count and pipeline structure, invoice and order records, task and note counts, custom field schema via the /retrieveContactModel endpoint, and user accounts. We also extract automation sequence names and step counts for the rebuild inventory. This phase produces a written data audit report and a migration scope that defines which objects migrate, which are excluded, and which require custom object creation in Twenty.

  2. Twenty workspace setup and schema design

    We set up the Twenty workspace: provision workspace members matching the Keap user list, create the pipeline and stage definitions mapped from Keap's pipeline structure, and create any custom objects (Invoice, Order, Product) via the /metadata GraphQL API. We create all custom fields on the Person and Company objects before any data import. This follows Twenty's documented requirement that fields must exist before import.

  3. Export from Keap with rate-limit pacing

    We export all objects from Keap using the REST API with request throttling to stay within the 500 calls per minute limit. Tags are retrieved via the Tag Tracker report (Keap Pro and Max) because the standard CSV contact export does not include tag assignments. Invoices are pulled via the invoice API endpoint, not from pipeline activity logs, to bypass the known issue where invoice events do not appear in deal activity history. We paginate large exports across multiple minute windows and run deduplication transforms before staging the data for import.

  4. Import into Twenty in dependency order

    We import into Twenty in dependency order: Companies first (standalone Company records), then Persons with the resolved companyId linking to the correct Company, then Opportunities with PersonId and CompanyId resolved, then Tasks and Notes linked to Persons, then custom object records (Invoice, Order, Product). Tag assignments are applied as Labels on Person records, or mapped to a multi-select custom field if the customer selected that strategy during scoping. Owner resolution happens by email match against workspace members provisioned in Step 2.

  5. Sandbox reconciliation and mapping validation

    We run a trial migration into a test workspace or staging environment. The customer reconciles record counts against the Keap source, spot-checks 25-50 records for field-level accuracy, and validates that the Person-to-Company relationship renders correctly in Twenty's UI. Any field mapping corrections, missing custom fields, or stage name adjustments happen here before the production migration begins.

  6. Production cutover and automation rebuild handoff

    We freeze Keap writes during cutover, run a final delta migration of records modified during the migration window, then mark Twenty as the system of record. We deliver the automation sequence inventory to the customer for manual rebuild in Twenty's workflow builder. We support a one-week hypercare window for reconciliation issues. We do not rebuild Keap automation sequences or sequences in Twenty as part of standard migration scope; this is a separate rebuild engagement.

Platform deep dives

Context on both ends of the pair

Keap logo

Keap

Source

Strengths

  • Tag-based contact organization that doubles as an automation trigger system
  • Built-in sales pipeline with user-defined opportunity stages and deal tracking
  • Bundled landing pages and web forms reduce tool sprawl for small teams
  • Marketing automation (email + SMS) integrated directly with CRM records
  • API access to contacts, companies, orders, invoices, and products

Weaknesses

  • Automation sequences are not exportable and must be rebuilt from scratch
  • No native bulk export UI — all exports require API calls or third-party tools
  • Expensive relative to competitors, with integration costs layered on top
  • International SMS is not supported, limiting use for global businesses
  • Known issues with pipeline activity history not reflecting invoice events
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. 3 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 Keap and Twenty CRM.

  • Object compatibility

    B

    3 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

    Keap: 500 requests per minute per tenant, reset per minute.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

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

Book a free 30 minute consultation

Small migrations under 5,000 contacts with standard fields and a single pipeline typically complete in two to four weeks. Migrations with 10,000+ contacts, complex tag sets, multiple custom fields, or invoice and order history extend to four to eight weeks because of the Keap API rate-limit pacing required during export and the custom object schema work in Twenty. Discovery and scoping add one to two weeks regardless of data volume.

Adjacent paths

Related migrations to explore

Ready when you are

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