CRM migration

Migrate from Lemon Tech to Twenty CRM

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

Lemon Tech logo

Lemon Tech

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

80%

8 of 10

objects map 1:1 between Lemon Tech and Twenty CRM.

Complexity

BStandard

Timeline

3-5 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from Lemon Tech to Twenty CRM is a vertical-to-generalist transition that requires careful schema mapping because Lemon Tech organizes data around legal-specific Entities, Matters, and SQL Wrappers rather than standard CRM objects. Lemon Tech publishes no public REST API, so we rely on the built-in Export Data function supplemented by SQL Wrapper exports for reporting-derived records, both staged incrementally to avoid task queue timeouts. We map each standard and custom entity type to a Twenty custom object, map Matters to Opportunities with practice-area fields, and preserve billing records as Opportunity custom fields. Custom field names are normalized during mapping to avoid naming inconsistencies that arise from Lemon Tech's lack of enforced naming conventions. We do not migrate automations, workflows, or SQL Wrapper business logic as code; we deliver a written inventory of these for the customer's admin to rebuild in Twenty's settings.

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

Lemon Tech logo

Lemon Tech

What's pushing teams away

  • Very limited public documentation makes it difficult for new users or migrating teams to understand the data model without direct vendor engagement.
  • No publicly documented public REST API forces migrations to rely on the built-in export tooling, which may not cover all edge cases.
  • Pricing is fully custom with no transparent tier structure, making it hard to evaluate cost-effectiveness or negotiate during renewal.

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

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

Lemon Tech

Entity (standard and custom)

maps to

Twenty CRM

Custom Object

1:1
Fully supported

Lemon Tech's core data container. Both standard and custom entities export via the Entity export function as structured relational tables. We map each entity type to a Twenty Custom Object using the /metadata API to pre-create the object schema with matching fields before any data insert. Custom entity field names are normalized from whatever convention the firm used (camelCase, snake_case, or spaces) to a consistent format; the original names are preserved in a metadata field for auditability. SQL Wrapper-defined entities require manual field mapping during discovery because the join logic and computed columns must be flattened into flat record fields before migration.

Lemon Tech

Contact

maps to

Twenty CRM

Person

1:1
Fully supported

Standard Lemon Tech Contact records with name, email, phone, and address fields export cleanly and map directly to Twenty Person. Custom contact properties (firm-specific fields added through Lemon Tech's custom entity or contact property system) map to custom fields on the Person object, pre-created via Twenty's /metadata API before import. Email address serves as the dedupe key during insert.

Lemon Tech

Company (Entity type)

maps to

Twenty CRM

Company

1:1
Fully supported

Lemon Tech Entities classified as Companies export with name, domain, address, and industry fields. These map directly to Twenty Company records. If Lemon Tech stores organization type in a custom field rather than as a dedicated entity type, that field maps to a custom field on the Company object. Company records are imported before Person records so that the Person-Company relationship (stored as a workspaceMember field or custom relation field in Twenty) is resolved at insert time.

Lemon Tech

Matter

maps to

Twenty CRM

Opportunity

1:1
Fully supported

Matters are Lemon Tech's primary case and project container, storing practice area, responsible attorney, status, dates, and billing reference. We map Matters to Twenty Opportunity records and preserve the practice area as a custom picklist field on the Opportunity. Matter status (active, closed, archived) maps to Twenty Opportunity stage values that we configure in Settings before migration. Custom Matter fields map to custom Opportunity fields pre-created via /metadata.

Lemon Tech

Matter

maps to

Twenty CRM

Custom Object (Practice Area)

1:many
Fully supported

Some Lemon Tech firms store practice-area-specific data (court details, opposing counsel, filing deadlines, lien information) as sub-entities or custom fields on Matter rather than as a flat set of Matter properties. We split these into a separate custom object in Twenty with a lookup relationship back to the Opportunity, preserving the hierarchy that the practice-area sub-entity represented in Lemon Tech.

Lemon Tech

User

maps to

Twenty CRM

WorkspaceMember

1:1
Fully supported

Lemon Tech User records with name, email, and role information map to Twenty WorkspaceMember. We resolve users by email match against the Twenty workspace. Any Lemon Tech User without a matching Twenty WorkspaceMember goes to a reconciliation queue for the customer to provision before record import resumes, because OwnerId references on Opportunities and custom object records require a valid workspace member to exist first.

Lemon Tech

Attachment

maps to

Twenty CRM

Attachment / File

1:1
Fully supported

File attachments associated with Lemon Tech entities or Matters export as binary blobs. We handle these separately from record data, preserving filenames, parent record associations (entity ID, matter ID), and upload timestamps. In Twenty, attachments link to the target record (Person, Company, or Opportunity) via the standard attachment relationship. Very large file sets require staged export batches to avoid timeout in Lemon Tech's export function.

Lemon Tech

SQL Wrapper (simple table export)

maps to

Twenty CRM

Custom Object

1:1
Fully supported

Simple SQL Wrappers that export Lemon Tech data as a flat table (no multi-table joins, no computed columns, no external data sources) migrate as standard custom object records in Twenty. We map the wrapper output fields to a custom object schema pre-created via /metadata, flatten the table structure to one record per row, and insert via Twenty's GraphQL /graphql endpoint.

Lemon Tech

SQL Wrapper (complex join or computed column)

maps to

Twenty CRM

Multiple Custom Objects

lossy
Fully supported

Complex SQL Wrappers with multi-table joins, computed columns, or third-party data require manual field mapping during discovery. We inventory every complex wrapper definition, identify which source tables feed each computed column, and design a set of Twenty custom objects that reproduce the flattened output. The business logic (join conditions, calculation formulas) does not migrate; we document the wrapper definition for the customer's admin to reconstruct as a reporting pipeline in a BI tool post-migration.

Lemon Tech

Billing Record / Time Entry

maps to

Twenty CRM

Opportunity (custom fields)

1:1
Fully supported

Time entries and billing records linked to Matters in Lemon Tech export via the Entity export with billable amount, date, contact reference, and matter reference. We map these to custom fields on the parent Twenty Opportunity: billable_amount__c, time_entry_date__c, and a lookup to the linked Person record. If the firm requires granular time-entry-level records rather than rolled-up billing fields, we create a separate custom TimeEntry object with a lookup to Opportunity and map the entries accordingly.

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.

Lemon Tech logo

Lemon Tech gotchas

High

No public API for bulk data extraction

Medium

SQL Wrapper complexity varies by definition

Low

Custom entity naming conventions are customer-specific

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

  • Twenty requires custom objects pre-created before data import

    Twenty's /graphql endpoint creates and queries records, but custom objects must be defined via the /metadata API before any data can be written to them. If a custom object does not exist in the metadata schema at migration time, the import will fail silently or reject records that reference it. We inventory all Lemon Tech custom entity types during discovery, create the corresponding Twenty custom objects (with all fields and field types) via /metadata before any export begins, and verify the schema using Twenty's Settings → Data Model interface before proceeding to data load.

  • No public API means export task timeouts on large datasets

    Lemon Tech does not publish a public REST API for bulk data access. We rely on the built-in Export Data function, which runs as a server task and has timeout limits for large entity exports. We handle this by chunking exports at the entity level and staging them incrementally, scheduling exports during off-peak hours to avoid task queue backlogs, and running a pre-migration data audit to estimate export duration per entity type. Firms with over 50,000 records in a single entity type should expect export staging to extend the discovery phase by one to two weeks.

  • Custom entity naming inconsistencies require normalization

    Lemon Tech custom entities have no enforced naming convention. Field names may use camelCase, snake_case, spaces, or inconsistent capitalization depending on the firm and the administrator who created them. Twenty's metadata API uses field names that must conform to GraphQL naming rules. We normalize custom entity and field names to a consistent format during mapping, stripping spaces and applying a standard casing convention. The original names are preserved in a metadata field for auditability. This step is time-intensive for firms with more than 20 custom entity types.

  • Complex SQL Wrappers have no migration path as logic

    SQL Wrappers configured in Lemon Tech that include multi-table joins, computed columns, or third-party data sources represent business logic, not just data. When these wrappers are exported as flat tables, the join conditions and calculated fields flatten into static values with no reference to the original logic. Twenty CRM has no equivalent to SQL Wrappers, so we cannot preserve the wrapper as a live query. We document every complex wrapper definition and flag it for the customer's admin to rebuild in a reporting tool (Metabase, Grafana, or a custom code solution) post-migration. This is not included in the standard migration scope.

Migration approach

Six steps for a successful Lemon Tech to Twenty CRM data migration

  1. Discovery and entity inventory

    We audit the Lemon Tech environment across all active entity types (standard and custom), SQL Wrapper definitions, Matter structures, Contact and Company volumes, attachment counts, and user rosters. We identify which standard entity types are in use, which custom entities the firm has created, and which SQL Wrappers exist and whether they are simple flat-table exports or complex multi-table joins. The discovery output is a written migration scope document that lists every source entity, its record count estimate, its destination object in Twenty, and any known transformation requirements (date format normalization, field splitting, computed-column flattening). This phase typically runs two to three weeks depending on the number of custom entities and SQL Wrappers.

  2. Twenty schema creation via /metadata API

    We create all required custom objects and fields in Twenty before any data export begins. Using Twenty's /metadata API, we pre-create each custom object referenced in the scope document, define its fields with correct types (text, number, date, relation, etc.), and configure any custom picklist values needed for Matter status or practice-area mapping. We then verify the schema through Twenty's Settings → Data Model interface and confirm that Twenty WorkspaceMembers exist or are queued for provisioning before record imports reference them as owners or assignees.

  3. Lemon Tech export execution with chunking

    We run Lemon Tech Entity exports in batches grouped by entity type. For each standard entity (Contact, Company, Matter), we export via the built-in Export Data function and stage the output in a secure migration workspace. For custom entities, we run separate exports per entity type to avoid schema conflicts. SQL Wrappers are exported as their defined table output, with complex wrappers inventoried for manual field mapping during the transformation phase. Large exports are chunked by date range or record ID range and run during off-peak hours to avoid task queue timeouts. This phase runs in parallel with schema creation.

  4. Data transformation and field normalization

    We transform exported data to match the Twenty target schema. This includes normalizing custom entity and field names (removing spaces, applying consistent casing), flattening SQL Wrapper computed columns into plain record fields, mapping Matter status values to Twenty Opportunity stage values, and resolving Lemon Tech user references to Twenty WorkspaceMember IDs via email lookup. We also deduplicate records using email as the key for People and domain as the key for Companies, flagging duplicates for the customer's review before insert.

  5. Twenty data import via /graphql with validation

    We insert records into Twenty using the /graphql API endpoint, running inserts in dependency order: WorkspaceMembers first (already provisioned), then Companies, then People, then Opportunities, then custom object records, then attachments. For each phase, we run a row-count reconciliation against the source export and perform a spot-check of 25-50 records comparing source field values to the destination record. Any mapping corrections are applied to the transformation logic and the phase is re-run before proceeding. We do not use Twenty's CSV import as the primary path because CSV import cannot handle complex custom object relationships; the /graphql API gives us full control over relation resolution and field validation.

  6. Cutover, delta migration, and handoff documentation

    We freeze writes in Lemon Tech during a defined cutover window, run a final delta export capturing any records created or modified since the main export, apply those records to Twenty, and confirm the final row-count reconciliation across all objects. We deliver a written inventory of every active SQL Wrapper definition (with field-by-field mapping notes), every custom entity that mapped to a Twenty custom object, and a statement of which automation and workflow artifacts require manual rebuild in Twenty Settings. We do not rebuild Lemon Tech automations as Twenty workflows; that is a separate engagement. We support a five-business-day hypercare window for reconciliation issues raised during the first week of live use.

Platform deep dives

Context on both ends of the pair

Lemon Tech logo

Lemon Tech

Source

Strengths

  • Purpose-built for professional services with native support for Matters, time entries, and billing records.
  • Custom entities and SQL Wrappers provide flexibility for complex data requirements.
  • Entity-level export function supports both standard and custom entity types in a migration-compatible format.

Weaknesses

  • No publicly available API documentation limits automation options for migrations.
  • Very limited online community or third-party resources for troubleshooting.
  • Fully custom pricing model with no published benchmarks or self-service tier information.
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 Lemon Tech 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

    Lemon Tech: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

Walk through your Lemon Tech 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 firms with fewer than 15,000 Contacts, 3,000 Matters, fewer than 10 custom entity types, and no complex SQL Wrappers. Migrations with more than 10 custom entity types, complex SQL Wrapper definitions requiring manual field mapping, large attachment sets, or time-entry billing records requiring custom Opportunity field work extend to seven to eleven weeks because of incremental export coordination, metadata schema creation via /metadata, and custom field normalization across inconsistent naming conventions.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Lemon Tech.
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