CRM migration

Migrate from Convertkit to Twenty CRM

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

Convertkit logo

Convertkit

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

100%

12 of 12

objects map 1:1 between Convertkit and Twenty CRM.

Complexity

BStandard

Timeline

24–48 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

ConvertKit and Twenty CRM operate on fundamentally different data models. ConvertKit organizes around Subscribers, Tags, Forms, Sequences, and Broadcasts — an email-marketing foundation with no native opportunity, deal, or company hierarchy. Twenty CRM builds on People, Companies, Opportunities, Tasks, and Notes — a relational sales data model with custom objects, field-level permissions, and REST/GraphQL API access. This migration carries ConvertKit subscriber records (with all standard and custom property data) into Twenty People, maps ConvertKit tags to a custom Tags__c multi-select field on People, creates Company records from any domain-based subscriber clustering you specify, and preserves original create/update timestamps for reporting continuity. ConvertKit sequences, automation triggers, form configurations, and broadcast history do not transfer — we export ConvertKit workflow definitions as a rebuild reference for Twenty's workflow builder. The mechanism uses ConvertKit's v3 API to extract subscriber data in bulk, transforms field types to match Twenty's import format, and loads via Twenty's CSV import or batch API endpoints. Scoped read access on ConvertKit keeps your account fully operational during the cutover, with a 24–48 hour delta window capturing in-flight changes before final sync.

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

Convertkit logo

Convertkit

What's pushing teams away

  • September 2025 price increases raised Creator plan costs significantly, with some creators reporting bills tripled at the same subscriber count.
  • Kit's branding on landing pages, emails, and product pages remains until manually toggled off on paid tiers, which creators find unprofessional for paid product sales.
  • Free tier allows no A/B testing and restricts users to one account and basic templates, pushing creators toward upgrades for features that competitors include on lower plans.
  • Export functionality on lower tiers is limited, with some creators reporting difficulty accessing their data when evaluating departures.
  • Sequences and automations cannot be exported in a machine-readable format, requiring complete manual rebuild on the destination platform.

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

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

Convertkit

Subscriber

maps to

Twenty CRM

People

1:1
Fully supported

ConvertKit subscribers map directly to Twenty People records. Every subscriber record — including those added via form, API, or import — transfers with all standard properties (email, first name, last name) and any subscribed-to state preserved. Original create dates surface as a custom field since Twenty sets CreatedDate at import time.

Convertkit

Subscriber (domain-extracted)

maps to

Twenty CRM

Company

1:1
Fully supported

ConvertKit has no native Company object, but subscriber email domains can cluster contacts by organization. FlitStack creates Twenty Company records for each unique domain with more than one associated subscriber, using the domain as the Company name and setting Website from the domain. Your team specifies the minimum subscriber threshold per domain (default: 2).

Convertkit

Subscriber → Company relation

maps to

Twenty CRM

People → Company (relation)

1:1
Fully supported

Each ConvertKit subscriber linked to a domain that generated a Company record gets a CompanyId relation on their People record. Subscribers with domains below the threshold land as standalone People with no Company link. This creates the contact-account hierarchy Twenty's CRM model requires.

Convertkit

Tag

maps to

Twenty CRM

People.Tags__c (custom multi-select)

1:1
Fully supported

ConvertKit's tag taxonomy is a core organizing structure — subscribers often carry 5–20 tags. We create a custom multi-select field on People called Tags__c and populate it with each subscriber's full tag set. Tag values are stored as-is; if you need tag-based segmentation in Twenty, this field drives filter views immediately after import.

Convertkit

Custom Field (text, number, date, select)

maps to

Twenty CRM

Custom Field on People

1:1
Fully supported

ConvertKit custom fields migrate 1:1 to Twenty custom fields of the matching type. Text → text, number → number, date → date. Select pick-lists in ConvertKit map to Twenty select fields with the same option values — we validate option names match before import to avoid silent failures.

Convertkit

Custom Field (multi-select)

maps to

Twenty CRM

Custom Field on People (multi-select)

1:1
Fully supported

ConvertKit multi-select fields transfer to Twenty multi-select fields. Option values are preserved verbatim. Note that Twenty's multi-select display differs from ConvertKit's tag-style UI — users see a pill selector in both platforms but the underlying storage and filter behavior are equivalent.

Convertkit

Custom Field (checkbox)

maps to

Twenty CRM

Custom Field on People (checkbox)

1:1
Fully supported

ConvertKit checkbox fields store true/false values and map directly to Twenty checkbox fields without requiring transformation logic. The boolean values transfer directly between platforms. When ConvertKit uses 1/0 encoding instead of true/false text, our pre-processing step normalizes the values to proper boolean format before loading them into Twenty's People records.

Convertkit

Form

maps to

Twenty CRM

No equivalent

1:1
Fully supported

ConvertKit forms are embedded email-capture tools with styling, field configuration, and trigger logic. Twenty has no native form builder — forms must be rebuilt using a third-party tool (Typeform, HubSpot Forms, or custom HTML) and integrated via Twenty's API or webhook endpoints. We export form configuration as a reference JSON for rebuilding.

Convertkit

Sequence

maps to

Twenty CRM

No equivalent

1:1
Fully supported

ConvertKit sequences are time-delayed email series attached to subscribers with delivery state tracking (sent, open, click, replied). Twenty's workflow builder handles trigger-action automations but not email delivery — email sequences must be rebuilt in a dedicated email tool (e.g., Mailchimp, Loops) connected to Twenty via API. We export sequence definitions as a step-by-step rebuild guide.

Convertkit

Broadcast (sent email)

maps to

Twenty CRM

Note on People

1:1
Fully supported

ConvertKit broadcast history records which subscribers received each campaign. This data is historical and not actionable in Twenty's CRM model. We offer an optional summary: each broadcast becomes a Note on all recipients, recording subject, send date, and open rate for audit continuity. This is opt-in because it can create thousands of Note records.

Convertkit

Product (digital product / subscription)

maps to

Twenty CRM

Custom Object: Product

1:1
Fully supported

ConvertKit products (digital goods, paid newsletters, subscriptions) have no native CRM equivalent. We create a custom Product object in Twenty with fields for name, price, type, and link to the People record of purchasers. Purchase history migrates as a relation between People and Product.

Convertkit

Unsubscribe state

maps to

Twenty CRM

People.optOut (built-in)

1:1
Fully supported

ConvertKit's subscribed/unsubscribed/bounced state maps directly to Twenty's optOut boolean field on People. Unsubscribed and bounced contacts set optOut to true, while active subscribers set it to false. Bounced emails set a separate bouncedAt timestamp field on the People record. This dual-field approach ensures Twenty respects global unsubscribe signals from ConvertKit's GDPR and CAN-SPAM compliance record while preserving bounce history for re-permission follow-up workflows.

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.

Convertkit logo

Convertkit gotchas

High

Sequences export as content only, not logic

High

Free tier has no bulk export capability

Medium

Custom fields require recreation before import

Medium

Kit branding persists until toggled off

Medium

Subscriber count billing is real-time

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

  • ConvertKit has no native Company or Opportunity model — subscriber clustering requires post-migration decisions

    ConvertKit stores every subscriber with an email address but no structured account hierarchy. If your subscriber list contains multiple contacts from the same company (e.g., [email protected], [email protected]), Twenty will import them as separate People records with no initial link. We create Company records from email domains, but the minimum-subscriber-per-domain threshold determines which domains get Company records. Domains with a single subscriber land as standalone People. Your team decides the threshold before migration — too low creates noise, too high misses account-level context. We flag domains with 2–5 subscribers for manual review before finalizing Company creation.

  • ConvertKit sequences and broadcast history cannot migrate to Twenty's workflow model

    ConvertKit sequences are time-delayed email delivery workflows with per-subscriber state (which step they're on, which emails they've opened). Twenty's workflow builder (Settings → Workflows) uses trigger-action automations with field updates, task creation, and Webhook steps — but has no native email delivery engine. Email sequences must be rebuilt in a dedicated email platform (Mailchimp, Loops, or ActiveCampaign) and connected to Twenty via API or webhook. We export your ConvertKit sequence definitions as a structured JSON document listing each step, delay, and condition so your team can replicate logic in the new email tool. Broadcast send history can optionally be stored as Notes on each recipient record, but this creates high record volume.

  • Tag-to-multi-select transformation requires a custom field created in Twenty before import

    ConvertKit's tag system allows subscribers to carry an unlimited number of tags simultaneously. Twenty's standard People object has no native tags field — we create a custom multi-select field called Tags__c. Per Twenty's documentation, custom fields must be created in Settings → Data Model before the CSV import runs. We generate the field creation plan (field name, type, option values extracted from your ConvertKit tag list) as part of the pre-migration setup package. If Tags__c already exists in your Twenty workspace with different options, a conflict resolution step is required before data loads.

  • Import order dependency: Companies must exist before People records can reference them

    Twenty enforces referential integrity: People records with a companyId relation require the referenced Company record to already exist in the database. Our migration sequence loads Companies first (one per unique domain above your threshold), then People with resolved companyId values, then Opportunities if you're building deal records post-migration. If Companies import fails or produces fewer records than expected, People imports with broken companyId references will fail silently and leave contacts unlinked. We validate Company record count against expected domain count before committing People loads.

  • Twenty's People object requires email — ConvertKit API returns 'null' for suppressed or bounced contacts

    ConvertKit's v3 API returns null or empty strings for email addresses of permanently bounced contacts rather than omitting the field. Twenty's People object requires a non-null email value — records with null email fail import silently. We pre-process the export to flag and isolate records with null or invalid email addresses. These records are excluded from the standard migration load and presented as a separate audit list: either clean up the addresses in ConvertKit before re-export, or handle them manually post-migration as suppressed contacts.

Migration approach

Six steps for a successful Convertkit to Twenty CRM data migration

  1. Audit ConvertKit data export and design Twenty schema

    FlitStack connects to ConvertKit via v3 API using a scoped read-only API key. We extract all subscriber records with standard and custom properties, full tag lists, product purchase history, form subscription records, and sequence enrollment state. Simultaneously, we audit your Twenty workspace for existing custom fields, objects, and relation configurations. We generate a field creation manifest listing every new custom field (Tags__c, Original_Created_At__c, etc.) that must exist in Twenty before import, with field types and option values extracted from ConvertKit's schema. Your Twenty admin creates these fields in Settings → Data Model before we proceed.

  2. Build Companies from email domains and resolve People-Company relations

    We extract all unique email domains from the ConvertKit subscriber list and count subscriber frequency per domain. Based on your specified threshold (default: 2 subscribers), we generate Twenty Company records with domain as name and domain as the unique identifier. We build a People-Company mapping table resolving each subscriber's email domain to their target Company record. This table drives the companyId foreign key during People import. We surface domains with borderline subscriber counts (2–5) for your review before committing.

  3. Transform and load Companies, then People with resolved relations

    Twenty's import dependency order requires Companies to exist before People can reference them. We load Companies first via Twenty's CSV import (or batch API for large datasets), validating record count against the domain list. Once Company records are committed, we load People records with all standard fields, custom property values, Tags__c multi-select data, and resolved companyId relations. Original create and update timestamps from ConvertKit populate custom datetime fields. Unsubscribed and bounced states set the optOut boolean and populate timestamp fields. Records with null emails are isolated and reported separately.

  4. Run field-level diff and sample validation before full commit

    We pull a representative sample of migrated records (typically 200–500 across high-tag, low-tag, subscribed, and unsubscribed segments) and generate a field-level comparison report: source ConvertKit value vs. destination Twenty value for every mapped field. We verify tag array populates Tags__c correctly, custom select options match ConvertKit pick-list values, email addresses render correctly, and Company links resolve for multi-subscriber domains. You review the diff report and approve full migration before we commit.

  5. Execute full migration with delta-pickup and post-import verification

    Full migration runs against Twenty's live workspace. A delta-pickup window of 24–48 hours captures any ConvertKit records modified during the cutover window (new subscribers added, unsubscribes processed). After delta pickup, we run a reconciliation report comparing record counts by state (active, unsubscribed, bounced) and custom field population rate. We deliver the sequence export JSON for your rebuild reference, the broadcast history Note plan (if opted in), and a post-migration audit showing record counts, error rates, and any records requiring manual follow-up.

Platform deep dives

Context on both ends of the pair

Convertkit logo

Convertkit

Source

Strengths

  • Unlimited email sends across all paid tiers regardless of list size.
  • Generous free tier supporting up to 10,000 subscribers with core features.
  • Free migration assistance from competitor platforms on Creator and Creator Pro plans.
  • Tag-based segmentation is intuitive for creators managing audience organization.
  • Clear subscriber-count pricing model without per-email or per-send charges.

Weaknesses

  • September 2025 price increases significantly raised costs at same subscriber counts.
  • Sequences and automations cannot be exported in a machine-readable format.
  • Kit branding on emails and landing pages requires manual toggle on paid tiers.
  • Custom fields limited to 140 per account, which may constrain complex data collection.
  • Free tier has no A/B testing and is restricted to a single user account.
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 Convertkit 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

    Convertkit: Not publicly documented; varies by account tier.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

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

Book a free 30 minute consultation

Most ConvertKit-to-Twenty migrations complete in 24–48 hours of clock time for under 25,000 subscribers. The main time commitment is pre-migration setup: designing the tag-to-multi-select field mapping and resolving domain-clustering rules for Company creation. Heavier subscriber lists (250,000+) or accounts with 50+ custom field definitions extend to 5–10 days because field type validation and value mapping multiply per field. Twenty's CSV import processes up to 20,000 records per import run — for larger sets we use batch API calls to maintain throughput.

Adjacent paths

Related migrations to explore

Ready when you are

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