CRM migration
Field-level mapping, validation, and rollback between Legl and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
Legl
Source
Twenty CRM
Destination
Compatibility
12 of 12
objects map 1:1 between Legl and Twenty CRM.
Complexity
BStandard
Timeline
72–96 hours of clock time
Overview
Legl structures its data around legal-practice concepts: Business records, Person entities, Risk Assessments, Engage Requests, Payments, and Workflow definitions. Its API exposes these as discrete resource endpoints with relationship IDs but no native bulk-export UI — migration requires API pagination with rate-limit management (3,600 req/hr, burst 120 req/min). Twenty CRM accepts data via CSV import through its UI or REST/GraphQL batch endpoints (100–200 req/min depending on plan tier), with import order enforced: Companies first, then People (linked via companyId), then Opportunities, then custom objects last. The migration must therefore sequence Legl's API responses into a staged import that satisfies Twenty's foreign-key requirements. We map Legl Business objects to Twenty Companies, Legl Person records to Twenty People, and Legl's risk-assessment and engage-request data to Twenty custom objects. Legl workflows (automation definitions, escalation paths) cannot migrate — they require a manual rebuild using Twenty's workflow builder, and we provide a structured export of Legl workflow JSON as the rebuild reference. The cutover mechanism uses scoped read access against Legl's API with a 24–48 hour delta pickup window to capture any records created or modified during the switchover. Audit logging and one-click rollback protect against reconciliation failures.
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 Legl 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.
Legl
Business
Twenty CRM
Company
1:1Legl Business records (company name, domain, address) map directly to Twenty Companies. The Legl businessId becomes a custom reference field (Source_Business_ID__c) for traceability. Legl business hierarchies (parent/child via hs_parent_company_id) map to Twenty's Parent Company link if present. If the Legl business includes a parent/child hierarchy, we map the top-level business to the primary Company and link subsidiaries via the Parent Company field for a clear organizational tree.
Legl
Person
Twenty CRM
Person
1:1Legl Person records (name, email, phone, job title, address) map to Twenty People with direct field correspondence. Primary businessId links the Person to a Company record. Email uniqueness is preserved for Workspace Member matching during owner resolution. We also verify email uniqueness across the dataset to avoid duplicate Workspace Members and to ensure accurate ownership assignments during import.
Legl
RiskAssessment
Twenty CRM
Custom Object: RiskAssessment
1:1Legl RiskAssessment records have structured fields: risk level, assessment date, template name, reviewer, and a PDF artifact URL. We create a Twenty custom object named RiskAssessment with matching custom fields. The PDF is downloaded and re-uploaded as a Twenty File attached to the record.
Legl
EngageRequest
Twenty CRM
Custom Object: EngageRequest
1:1Legl EngageRequest tracks client onboarding status per department and reviewer. Fields include status, clientId, department, reviewer, and CDD completion flag. We create a Twenty custom object with a status pick-list mirroring Legl's state machine. Reviewer maps to a Twenty Workspace Member lookup.
Legl
Payment
Twenty CRM
Custom Object: Payment
1:1Legl Payment records include amount, currency, status, bankAccountId, and createdAt timestamp. We create a Payment custom object in Twenty with amount, currency, and status fields. The Legl payment ID is stored as Source_Payment_ID__c for audit traceability. All payment amounts are normalized to the target currency, and any missing currency data defaults to the workspace's primary currency setting.
Legl
BankAccount
Twenty CRM
Custom Object: BankAccount
1:1Legl bank account records map to a Twenty BankAccount custom object with fields for account reference and linked business. The relationship to Payment records is preserved by storing the BankAccount custom object ID on the Payment record. The BankAccount custom object also stores the associated Legl businessId for reference, allowing quick cross-checking during reconciliation.
Legl
Workflow
Twenty CRM
Not Migrated
1:1Legl Workflows (internal escalations, client onboarding funnels, department-tailored processes) are JSON-defined automation objects with no direct Twenty equivalent. We export the full workflow JSON via GET /workflows as a rebuild reference document for your Twenty admin to reconstruct in Twenty's workflow builder.
Legl
SanctionsReport
Twenty CRM
Custom Object: SanctionsReport
1:1Legl SanctionsReport records from /sanctionsReport endpoints contain match results and search metadata. These migrate to a Twenty custom object with match status and search timestamp fields, linked to the relevant Business (Company) record. The match status field captures whether the sanctions check returned a hit, partial match, or clear result, preserving the original verdict for compliance audits.
Legl
CompanyReport
Twenty CRM
Custom Object: CompanyReport
1:1Legl CompanyReport records aggregate compliance data per business. Migrated as a Twenty custom object with report type, generated date, and linked Company reference. Report PDF artifacts are re-uploaded as Twenty Files. Each CompanyReport record also includes a link to the original PDF file, which is re-hosted in Twenty's file storage for convenient access by compliance officers.
Legl
Note / Attachment
Twenty CRM
Note / File
1:1Legl notes and file attachments on any object type migrate to Twenty Notes and Files respectively. Original timestamps and author references are preserved. Inline images in notes are extracted and rehosted as Twenty Files. File attachments retain their original file names and MIME types, and are stored under a dedicated Twenty Files folder for each migrated object type.
Legl
Organisation
Twenty CRM
Workspace Settings
1:1Legl Organisation metadata (GET /organisation) configures firm-level settings. These translate to Twenty workspace configuration items: workspace name, timezone, and currency defaults. User accounts map to Twenty Workspace Members invited before data import. We also map Legl user roles to Twenty workspace permissions, ensuring that access controls reflect the original firm hierarchy after migration.
Legl
Ongoing Monitoring
Twenty CRM
Custom Object: OngoingMonitoring
1:1Legl Ongoing Monitoring records (POST /DisableOngoingMonitoring) track continuous compliance checks per business. We create a Twenty custom object with monitoring status, linked Company, and last-check timestamp fields. The custom object also includes a link to the associated Company record, allowing compliance teams to view the monitoring history alongside other company details.
| Legl | Twenty CRM | Compatibility | |
|---|---|---|---|
| Business | Company1:1 | Fully supported | |
| Person | Person1:1 | Fully supported | |
| RiskAssessment | Custom Object: RiskAssessment1:1 | Fully supported | |
| EngageRequest | Custom Object: EngageRequest1:1 | Fully supported | |
| Payment | Custom Object: Payment1:1 | Fully supported | |
| BankAccount | Custom Object: BankAccount1:1 | Fully supported | |
| Workflow | Not Migrated1:1 | Fully supported | |
| SanctionsReport | Custom Object: SanctionsReport1:1 | Fully supported | |
| CompanyReport | Custom Object: CompanyReport1:1 | Fully supported | |
| Note / Attachment | Note / File1:1 | Fully supported | |
| Organisation | Workspace Settings1:1 | Fully supported | |
| Ongoing Monitoring | Custom Object: OngoingMonitoring1: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.
Legl gotchas
Beta API endpoints carry schema stability risk
Sandbox access requires direct support contact
Payment checkout URLs reference external Stripe sessions
AML audit dashboards require real-time data from connected PMS
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
Audit Legl API objects and prepare Twenty workspace schema
We run a discovery scan against Legl's API endpoints (/businesses, /persons, /riskAssessments, /engageRequests, /payments, /bankAccounts, /workflows) to catalogue record counts, field inventory, and relationship IDs. Simultaneously, we set up the Twenty workspace: creating all required custom objects (RiskAssessment, EngageRequest, Payment, BankAccount, SanctionsReport, CompanyReport, OngoingMonitoring), configuring custom field types and pick-list options to match Legl's data shapes, and inviting all active Legl users as Twenty Workspace Members so owner resolution can proceed during import.
Export Legl data in dependency order with rate-limit management
We paginate through Legl's API exports using exponential backoff to respect the 3,600 req/hr sustained limit. Records are assembled into staging CSVs in Twenty's required import order: Companies first (Legl Business), then People (Legl Person linked via businessId), then custom objects last. Workflow JSON is extracted separately via GET /workflows and packaged as a structured rebuild reference document. All exports preserve original timestamps and owner/reviewer IDs for later resolution.
Resolve owners and reviewers by email match
Legl owner and reviewer IDs are resolved against the pre-invited Twenty Workspace Members by email address. We generate a resolution report listing matched owners, unmatched owners, and the fallback assignment for each unmatched record. Your team reviews and approves the resolution map before any data commits to Twenty. No record lands without a valid Twenty Workspace Member assignment and we re-validate after each import batch for consistency.
Run a sample migration with field-level diff
A representative slice of 200–500 records spanning each Legl object type migrates into Twenty first. We generate a field-level diff comparing source values against destination field values for each record. You verify RiskAssessment status mapping, EngageRequest department assignment, Payment currency formatting, and Person-to-Company linkage before the full run commits. Sample results determine whether any field mapping needs adjustment before bulk processing.
Execute full migration with delta-pickup and audit log
Full data migration runs against Twenty using the approved mapping and resolution map. A delta-pickup window of 24–48 hours captures any Legl records created or modified during the cutover window. Every operation is logged to an audit trail covering object type, record count, before/after state, and timestamp. One-click rollback reverts all migrated records to the pre-migration state if reconciliation checks fail.
Platform deep dives
Legl
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 Legl 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
Legl: 3600 requests per hour sustained, burst rate of 120 requests per minute.
Data volume sensitivity
Legl 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 Legl to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your Legl 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 Legl
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.