CRM migration

Migrate from Tofu to Twenty CRM

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

Tofu logo

Tofu

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

60%

6 of 10

objects map 1:1 between Tofu and Twenty CRM.

Complexity

BStandard

Timeline

3-5 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from Tofu to Twenty CRM is a migration shaped by two constraints: Tofu has no published REST API, and its ABM-centric object model (Accounts, Playbooks, Personas, Audiences, Content Assets) requires deliberate reshaping to fit Twenty's generic CRM schema. We handle export through Tofu's native formats and CSV snapshots, map Tofu Accounts to Twenty Companies, decompose multi-step Playbooks into linear Step records with branching logic preserved as custom properties, and export Persona definitions as structured data attached to Person or Company records. Content Asset binaries require URL re-validation at export time because they live on Tofu's CDN. Twenty's open-source model means no per-seat license cost for self-hosting, but teams need Docker and a hosting provider. We do not migrate Playbook automation logic, ABM campaign targeting rules, or Content Asset binaries as code; these require rebuild in Twenty's workflow builder or manual re-upload post-migration.

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

Tofu logo

Tofu

What's pushing teams away

  • The platform is relatively new (launched September 2025 after two customer pilots), and early-stage teams worry about long-term product stability and vendor commitment.
  • Marketers with primarily B2C focus or fewer than 100 target accounts find the ABM-centric model overhead-heavy for their use case and look for simpler, broader marketing tools.
  • Teams needing strong CMS, intent data, or pure-play email automation find Tofu underspecified for those workflows and migrate to platforms with deeper channel tooling.
  • Enterprise buyers with established data residency or compliance requirements find Tofu's security documentation insufficient for their procurement checklist.
  • The AI-generated content still requires significant human review for brand voice accuracy, frustrating teams expecting fully automated output without a review layer.

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

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

Tofu

Account

maps to

Twenty CRM

Company

1:1
Fully supported

Tofu Accounts (representing target companies in the ABM model) map directly to Twenty CRM Companies. We export Account name, industry, tier, owner, and any custom enrichment fields. Tofu's account domain or website field maps to Company.websiteUrl. The dedupe key is the account domain. Twenty's Company object requires manual creation of standard fields (industry, domain, address) that may not exist in a fresh Twenty workspace — we add these during schema setup before import. If the Tofu account is linked to a Persona, we attach the Persona data as a custom field on the Company record.

Tofu

Campaign

maps to

Twenty CRM

Task (Campaign tracking)

lossy
Fully supported

Tofu Campaigns (top-level containers for landing pages, email sequences, ads, and collateral) have no direct Twenty CRM equivalent since Twenty lacks native ABM campaign management. We map Campaign records to a custom Task or Note structure where each Campaign becomes a tracking record with Campaign name, status, start/end dates, and owner. Campaign-CampaignLineItem associations (the individual content pieces within a campaign) are stored as related Task records. For teams that need ongoing campaign tracking in Twenty, we recommend creating a Campaign custom object via Twenty's metadata API during schema setup.

Tofu

Playbook

maps to

Twenty CRM

Custom Object: Playbook_Step

lossy
Fully supported

Tofu Playbooks encode multi-step outreach sequences with conditional branching based on prospect engagement signals. Twenty CRM's workflow builder supports linear step sequences with conditions but not the multi-branch logic that Tofu Playbooks use. We decompose each Playbook into discrete Step records in a Playbook_Step custom object we create in Twenty, with fields for Step order, channel (email/call/ad), delay_days, condition_criteria, and the original branching logic stored as a JSON custom field. Any branching conditions that cannot be represented in Twenty's linear workflow model are flagged in the mapping notes for manual rebuild post-migration.

Tofu

Persona

maps to

Twenty CRM

Person (custom fields) + Company (custom fields)

1:many
Fully supported

Tofu Personas define ICP profiles (industry, role, pain points, messaging tone) used to personalize content. We export persona definitions as structured records and map them to custom fields on Twenty's Person object (role, seniority, pain_points, messaging_tone) and to Company custom fields (target_industries, company_size) if the persona applies at the account level. The Persona-Account linkage migrates as a custom lookup relationship on the Company record. If Twenty lacks a native Person object, we create one via the metadata API before migration.

Tofu

Content Asset

maps to

Twenty CRM

Note + ContentDocument

1:1
Fully supported

Tofu Content Assets (landing pages, one-pagers, PDFs, ad creative) are platform-hosted binaries on Tofu's CDN. We export asset metadata (asset name, type, version, linked Campaign ID, linked Account ID) and store it as a Note in Twenty CRM with a link to the original Tofu asset URL. We snapshot asset URLs at export time and re-validate each URL in a pre-flight check before the final sync run. Binary re-download and re-upload to Twenty's file storage is out of scope as a standard migration task; we provide a written list of asset URLs for the customer's admin to re-upload manually or via a separate file migration engagement.

Tofu

Audience

maps to

Twenty CRM

Person (filtered list)

1:1
Fully supported

Tofu Audiences are filtered subsets of Accounts or Contacts used to trigger Playbook activation. We export audience membership as a list of Person records in Twenty with a custom field audience_name__c and the original filter criteria stored as a JSON custom field. The filter criteria themselves (e.g., industry equals SaaS and employee count greater than 50) are documented for manual reconfiguration in Twenty's filtering UI. If the Audience references Accounts, we resolve those to Companies first.

Tofu

Custom Properties (Accounts, Campaigns, Playbooks)

maps to

Twenty CRM

Custom Fields

lossy
Fully supported

Tofu supports custom fields on Accounts, Campaigns, and Playbooks. We detect all non-standard properties during the pre-migration schema scan using Tofu's export format. For each custom property, we create an equivalent custom field in Twenty via the metadata API before import. Field type mapping: text maps to Text, date maps to DateTime, number maps to Number, and checkbox maps to Boolean. Picklist-equivalent fields map to Twenty's select field type. Tofu custom properties that reference other Tofu objects map to lookup fields in Twenty after the referenced object is created.

Tofu

User / Owner

maps to

Twenty CRM

WorkspaceMember

1:1
Fully supported

Tofu Users assigned as Campaign owners and Playbook creators map to Twenty WorkspaceMembers. We export user email addresses, names, and role assignments and create corresponding WorkspaceMembers in Twenty before any data import. If a matching WorkspaceMember does not exist in Twenty, we flag the user for the customer to provision. Owner references on Accounts and Playbooks are resolved at migration time by matching the email address.

Tofu

Engagement (calls, emails, meetings, tasks)

maps to

Twenty CRM

Task / Event

1:1
Fully supported

If Tofu surfaces engagement data (calls, emails, meetings, tasks) as a record type accessible via export, we map these to Twenty Task records with channel type stored as a custom field. The original timestamp and owner map to ActivityDate and WorkspaceMember respectively. If Tofu's engagement data is not accessible via export (which is likely given the absence of a public API), we document the gap and recommend manual activity re-entry or a separate engagement capture step post-migration. Notes and attachments migrate as Twenty Note records linked to the parent Person or Company.

Tofu

Campaign Playbook associations

maps to

Twenty CRM

Playbook_Step custom object

1:1
Fully supported

The relationship between a Tofu Campaign and its associated Playbooks is preserved as a lookup field on the Playbook_Step custom object (campaign_id__c). This allows the customer to understand which Playbook steps belong to which Campaign in Twenty's UI. If the customer used Tofu's Audience-Campaign-Persona segmentation model, we preserve the segment assignments as custom fields on Person records.

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.

Tofu logo

Tofu gotchas

High

No public API documentation or published rate limits

Medium

Content Assets are platform-hosted binaries not separately exported

Medium

Playbook branching logic maps imperfectly to most destination CRMs

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

  • Tofu has no public API — migration uses export formats

    Tofu has not published a public REST API reference, OAuth endpoints, or rate-limit documentation. We cannot initiate a direct API-to-API sync for migration. We work around this by using Tofu's native export formats (CSV, JSON where available) and, where applicable, webhooks or bulk exports that Tofu surfaces to account owners. This adds a manual scoping step to confirm export capabilities before committing to a migration plan. Data-heavy accounts with complex Audience membership lists or long Playbook histories may require batch export over multiple sessions, extending the discovery phase by one to two weeks.

  • Playbook branching logic has no direct Twenty equivalent

    Tofu Playbooks support conditional branching based on prospect engagement signals (email opens, link clicks, form submissions, reply detection). Twenty CRM's workflow builder models sequences as linear step lists with conditional triggers per step. We decompose Playbooks into discrete Step records and preserve branching logic as a JSON custom field (branching_rules__c) and as a custom field note. Any conditions that cannot be represented in Twenty's linear model are flagged in the mapping documentation for manual rebuild in Twenty's workflow builder. This is a known limitation of moving from a purpose-built ABM tool to a generic CRM.

  • Content Asset binaries require URL re-validation

    Landing pages, PDFs, ad creative, and one-pagers generated by Tofu live on Tofu's CDN. During migration, we export the asset metadata and snapshot the CDN URLs. We re-validate each URL in a pre-flight check before the final sync run. If Tofu rotates asset URLs or changes CDN access policies post-migration, some Content Assets may become inaccessible. We flag any URLs that return a non-200 response during validation and document them in the asset inventory for the customer to re-upload manually. Binary re-upload to Twenty's file storage is outside standard migration scope.

  • Twenty's minimal standard fields require schema setup before import

    Twenty CRM ships with a minimal field set on Person and Company objects. A fresh Twenty workspace does not include standard fields like industry, job title, department, website, or phone types that are common on CRM imports. We create all required custom fields via Twenty's /metadata API before importing any data. GitHub issue #13953 on the Twentyhq repository confirms this onboarding friction for CRM-to-Twenty migrations — users expect to immediately import data but must spend time creating fields first. We handle this during the schema setup phase so that the CSV import step is unblocked without manual field creation.

  • Twenty has no native sequencing or sales engagement cadence

    Reddit discussions on r/CRM confirm that Twenty CRM lacks native sequence and follow-up cadence management. Teams migrating from Tofu (which sequences personalized outreach across email, landing pages, and ads) will need to use a third-party sales engagement tool (such as Lemwarm, Instantly, or a Zapier-connected sequence tool) for cadence-based outreach in Twenty. We document this gap in the migration handoff and recommend the customer's RevOps team evaluate sales engagement tools if sequences are critical to their process.

Migration approach

Six steps for a successful Tofu to Twenty CRM data migration

  1. Discovery and export capability confirmation

    We audit Tofu for all exportable objects: Accounts, Campaigns, Playbooks, Personas, Audiences, Content Asset metadata, Custom Properties, and Users. Since Tofu has no public API, we confirm which export formats are available in the account settings (bulk CSV, JSON, or webhooks) and whether the account supports full-history export or rolling-window export. We also confirm Content Asset CDN access and URL stability. This step produces a written migration scope confirming what data is migratable, what requires manual export, and what requires post-migration rebuild.

  2. Twenty schema design and custom field creation

    We set up Twenty's data model before importing any data. This includes creating the Person and Company custom fields that Tofu uses on Accounts and Personas (industry, tier, domain, target_industries, pain_points, messaging_tone, etc.), creating the Playbook_Step custom object via Twenty's /metadata API, adding all required fields with correct types, and creating any workspace-defined lookup relationships. We also invite all team members as WorkspaceMembers during this phase because Owner references on imported records require matching users to exist in Twenty first.

  3. Data export from Tofu

    We export all migratable objects from Tofu using the confirmed export formats. Exports run in dependency order: Users first (for owner resolution), then Accounts, Campaigns, Personas, Audiences, Playbooks (decomposed into Steps), and Content Asset metadata. Each export produces a structured CSV or JSON file with external IDs preserved for reconciliation. Content Asset CDN URLs are snapshotted at this point. We run a row-count reconciliation against the source data and flag any export gaps before proceeding.

  4. Data transformation and field mapping

    We apply the mapping logic: Tofu Accounts to Twenty Companies, Persona fields to Person and Company custom fields, Playbooks to Playbook_Step records with branching logic in JSON custom fields, and Audiences to Person records with audience_name__c. Custom Properties are mapped to the equivalent Twenty custom fields created during schema setup. Owner references are resolved by email against the Twenty WorkspaceMember table. Any Audience filter criteria are serialized to JSON for storage in a custom field on the Person record.

  5. Staged import into Twenty

    We import data into Twenty in dependency order: WorkspaceMembers first (validated), then Companies (Accounts), then Persons (with CompanyId resolved), then Playbook_Step records, then Task records for Campaign tracking. Each phase emits a row-count reconciliation report. Content Asset metadata is imported as Note records with the original Tofu CDN URL preserved. After import, we run a spot-check on 25-50 records per object type against the source Tofu export to verify field-level accuracy before the final cutover.

  6. Cutover, validation, and Playbook rebuild handoff

    We freeze writes in Tofu during cutover, run a final delta export of any records modified during the migration window, and import the delta into Twenty. We enable Twenty as the system of record and deliver the Playbook branching inventory document to the customer's admin, noting which conditions are linearized and which require manual rebuild in Twenty's workflow builder. We deliver the Content Asset URL inventory for manual re-upload and the Audience filter criteria for manual reconfiguration in Twenty's filtering UI. We support a one-week hypercare window for reconciliation issues. Workflow rebuild, sequence reconfiguration, and sales engagement tool setup are outside standard migration scope.

Platform deep dives

Context on both ends of the pair

Tofu logo

Tofu

Source

Strengths

  • Three-agent architecture (Research, Create, Launch) maps cleanly to the demand-gen workflow — research builds account context, create generates assets, launch handles distribution.
  • Native integrations with the dominant B2B martech stack (HubSpot, Marketo, Salesforce, Outreach) reduce the data-plumbing burden for marketing ops teams.
  • First-party CRM data combined with 75+ third-party signal sources gives the personalization engine richer account context than tools relying solely on form-fill data.
  • Single platform spans email, landing pages, and ads from one campaign brief, consolidating tools for teams who would otherwise stitch together a writing tool, a builder, and an ad platform.
  • Backed by $5M in funding announced in 2024, signaling product-market fit and runway for a mid-market and enterprise sales cycle.

Weaknesses

  • Pricing is sales-led with no published tiers, which slows down evaluation and disqualifies budget-constrained teams that need to self-serve a quote.
  • Reviewers note Tofu is more expensive per seat than horizontal AI writing tools like Jasper or Copy.ai, reflecting its enterprise B2B positioning rather than a small-team value play.
  • AI-generated content still requires human review for brand voice and compliance — the platform does not eliminate the editorial step, only compresses it.
  • Limited public security documentation makes the platform harder to land in regulated industries where SOC 2 audits and data residency proof are procurement gates.
  • Catalog URL (`officialtofu.com`) points to an unrelated music-merchandise Shopify store — the real product is at `tofuhq.com`, which can cause confusion during vendor evaluation.
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 Tofu 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

    Tofu: Not publicly documented — typical SaaS limits assumed and confirmed during scoping.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

Walk through your Tofu 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 with under 5,000 Accounts, 50 Campaigns, and straightforward Playbook decomposition. The absence of a published Tofu API requires manual export confirmation during discovery, which can add one to two weeks to the discovery phase. Migrations with large Audience lists, complex Playbook branching (30+ steps with multiple conditions), or 500+ Content Assets requiring URL re-validation move to seven to ten weeks.

Adjacent paths

Related migrations to explore

Ready when you are

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