CRM migration
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
Source
Twenty CRM
Destination
Compatibility
8 of 10
objects map 1:1 between Lemon Tech and Twenty CRM.
Complexity
BStandard
Timeline
3-5 weeks
Overview
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.
Every standard and custom field arrives verified.
AI proposes the map; you confirm before any record moves.
Parent–child, lookups, and ownership stay linked.
Calls, emails, meetings — with original timestamps.
Documents, uploads, and inline notes move with the record.
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
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)
Twenty CRM
Custom Object
1:1Lemon 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
Twenty CRM
Person
1:1Standard 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)
Twenty CRM
Company
1:1Lemon 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
Twenty CRM
Opportunity
1:1Matters 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
Twenty CRM
Custom Object (Practice Area)
1:manySome 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
Twenty CRM
WorkspaceMember
1:1Lemon 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
Twenty CRM
Attachment / File
1:1File 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)
Twenty CRM
Custom Object
1:1Simple 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)
Twenty CRM
Multiple Custom Objects
lossyComplex 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
Twenty CRM
Opportunity (custom fields)
1:1Time 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.
| Lemon Tech | Twenty CRM | Compatibility | |
|---|---|---|---|
| Entity (standard and custom) | Custom Object1:1 | Fully supported | |
| Contact | Person1:1 | Fully supported | |
| Company (Entity type) | Company1:1 | Fully supported | |
| Matter | Opportunity1:1 | Fully supported | |
| Matter | Custom Object (Practice Area)1:many | Fully supported | |
| User | WorkspaceMember1:1 | Fully supported | |
| Attachment | Attachment / File1:1 | Fully supported | |
| SQL Wrapper (simple table export) | Custom Object1:1 | Fully supported | |
| SQL Wrapper (complex join or computed column) | Multiple Custom Objectslossy | Fully supported | |
| Billing Record / Time Entry | Opportunity (custom fields)1:1 | Fully supported |
Gotchas + challenges
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 gotchas
No public API for bulk data extraction
SQL Wrapper complexity varies by definition
Custom entity naming conventions are customer-specific
Twenty CRM gotchas
Import order is enforced and critical
Export limited to 20,000 records and visible columns only
Soft-deleted records count toward uniqueness and trigger restores
API rate limits cap at 200 req/min on Organization tier
No native email sequences — follow-up cadences require external tools
Pair-specific challenges
Migration approach
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.
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.
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.
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.
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.
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
Lemon Tech
Source
Strengths
Weaknesses
Twenty CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 1 of 8 objects need a mapping; the rest are 1:1.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Lemon Tech and Twenty CRM.
Object compatibility
1 of 8 objects need a mapping; the rest are 1:1.
Field mapping clarity
Field mapping is derived from defaults — final spec confirmed during the sample migration.
Timeline complexity
8-object category — typical timelines run 2–7 days end-to-end.
API constraints
Lemon Tech: Not publicly documented.
Data volume sensitivity
Lemon Tech doesn't expose a bulk API — REST + parallelization used for high-volume runs.
Estimator
Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.
Step 1
Pick a category, then your source and destination platforms.
Category
FAQ
Answers to the questions buyers ask most during Lemon Tech to Twenty CRM migration scoping. Not seeing yours? Book a call.
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 consultationAdjacent paths
Other ways to leave Lemon Tech
Other ways to arrive at Twenty CRM
Ready when you are
Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.