CRM migration
Field-level mapping, validation, and rollback between Goodlegal and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
Goodlegal
Source
Twenty CRM
Destination
Compatibility
11 of 12
objects map 1:1 between Goodlegal and Twenty CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
GoodLegal structures legal work around contacts, companies, and matters — a schema optimized for law-firm document workflows and client-service tracking. Its standard objects include People, Companies, Matters, Custom Objects, Activities, Notes, Attachments, and Document Templates. Custom fields such as matter_type, billing_arrangement, and client_status are common in GoodLegal setups and carry legal-domain semantics that have no native equivalent in Twenty CRM. Twenty CRM uses a clean open-source object model: People (contacts), Companies (accounts), Opportunities (deals), Tasks (calls and emails), Events (meetings), Notes, and Custom Objects. Custom fields in Twenty are created in Settings → Data Model before any CSV import; they support field types including text, number, date, select, multi-select, and relation. The migration maps GoodLegal contacts → Twenty People, GoodLegal companies → Twenty Companies, GoodLegal matters → Twenty Opportunities with custom stage-name pick-lists, and GoodLegal document templates → Twenty Notes tagged with a custom is_template flag. We carry over all standard and custom field data via API extraction and CSV import, using email matching to resolve owner relations. Workflows, sequences, and document templates do not migrate — they require rebuild in Twenty's workflow engine. A delta-pickup window captures in-flight changes during cutover so Twenty reflects GoodLegal's final state at go-live.
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 Goodlegal 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.
Goodlegal
Contact
Twenty CRM
People
1:1GoodLegal contacts map directly to Twenty People. Twenty does not split leads and contacts into separate objects the way Salesforce does — all individuals land in the same People object. Email is the unique identifier used for relation linking during CSV import. Phone, job title, address, and custom fields carry over as-is.
Goodlegal
Company
Twenty CRM
Companies
1:1GoodLegal companies map to Twenty Companies. Address fields in GoodLegal (street, city, state, postal code, country) need to be mapped into Twenty's flat address structure. Parent-child company hierarchies in GoodLegal map to Twenty's parentCompanyId relation field. Multi-company contacts (N:N in GoodLegal) collapse to one primary companyId with additional companies noted in a custom field.
Goodlegal
Matter
Twenty CRM
Opportunity
1:1GoodLegal matters map to Twenty Opportunities. The matter name becomes the Opportunity name, the estimated value becomes amount, and the close date maps to opportunitytiming. Stage names (Intake, Active, Closed) are stored in a custom select field since Twenty's native stageName is designed for sales pipelines. Original stage values are preserved as a custom field for reporting continuity.
Goodlegal
Pipeline Stage
Twenty CRM
Custom Select (Stage__c)
1:1GoodLegal matter stage names have no native equivalent in Twenty CRM. We create a custom select field (Stage__c) on the Opportunity object before import and populate it with the exact stage values from GoodLegal. Stage-enter timestamps are stored as custom datetime fields for timeline reporting.
Goodlegal
Activity (Call/Email)
Twenty CRM
Task
1:1GoodLegal call and email activities map to Twenty Tasks. The activity type (call vs. email) is stored in a custom select field (Activity_Type__c) since Twenty Tasks do not have a native type discriminator. Original timestamps, owners, and body content are preserved. Tasks are linked to the parent People record via relation.
Goodlegal
Activity (Meeting)
Twenty CRM
Event
1:1GoodLegal meetings map to Twenty Events. Start and end times are preserved as eventDate and endDate. GoodLegal records meeting titles and attendees but not duration — duration is computed from the start/end delta after migration. Attendee relationships are stored in a custom text field listing attendee emails.
Goodlegal
Note
Twenty CRM
Note
1:1GoodLegal notes migrate to Twenty Notes with the original body content preserved. Rich-text formatting is retained where possible. Notes linked to specific records carry the same relation in Twenty. Any note-level attachments are handled separately as file imports. The migration preserves note creation timestamps as custom datetime fields for audit trail continuity.
Goodlegal
Custom Field (Legal Domain)
Twenty CRM
Custom Field
1:1Fields like matter_type, billing_arrangement, client_status, practice_area, and referral_source have no native equivalent in Twenty. These are created as custom fields in Settings → Data Model before data import. Select-type custom fields need their pick-list values manually configured in Twenty after migration — the mapping plan documents every value transition.
Goodlegal
Document Template
Twenty CRM
Note (with flag)
1:1GoodLegal document templates have no direct counterpart in Twenty CRM. Templates are exported as Notes with a custom boolean field (Is_Template__c = true) and the template content stored in the body. The rebuild plan references these tagged Notes so your team can reconstruct templates in Twenty's workflow engine.
Goodlegal
Attachment / File
Twenty CRM
File (Twenty Files)
1:1GoodLegal file attachments are downloaded and re-uploaded to Twenty's file storage. Files are associated with the parent record (People, Companies, or Opportunities) using Twenty's relation linking. Any GoodLegal-specific file metadata is stored in a custom text field on the Note attached to the file record.
Goodlegal
Owner / User
Twenty CRM
Workspace Member
1:1GoodLegal owner and user records map to Twenty Workspace Members. Resolution happens via email match — each GoodLegal user email is matched to a Twenty member by email. Unmatched owners are flagged before migration so your team can create the corresponding Twenty user first. This prevents orphaned records with unresolved owner relations.
Goodlegal
Relationship (N:N)
Twenty CRM
Primary relation + secondary note
many:1GoodLegal supports N:N relationships between contacts and companies. Twenty's CSV import sets one primary companyId per People record. Secondary company relationships are preserved in a custom text field listing additional company IDs or names. Full N:N reconstruction via the UI is recommended after migration for data completeness.
| Goodlegal | Twenty CRM | Compatibility | |
|---|---|---|---|
| Contact | People1:1 | Fully supported | |
| Company | Companies1:1 | Fully supported | |
| Matter | Opportunity1:1 | Fully supported | |
| Pipeline Stage | Custom Select (Stage__c)1:1 | Fully supported | |
| Activity (Call/Email) | Task1:1 | Fully supported | |
| Activity (Meeting) | Event1:1 | Fully supported | |
| Note | Note1:1 | Fully supported | |
| Custom Field (Legal Domain) | Custom Field1:1 | Fully supported | |
| Document Template | Note (with flag)1:1 | Fully supported | |
| Attachment / File | File (Twenty Files)1:1 | Fully supported | |
| Owner / User | Workspace Member1:1 | Fully supported | |
| Relationship (N:N) | Primary relation + secondary notemany: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.
Goodlegal gotchas
Audit logs are not externally accessible
Limited public API documentation
Document creation workflow inconsistencies by type
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 GoodLegal data volume and legal-domain schema
We connect to GoodLegal via scoped read access and export all objects — People, Companies, Matters, Activities, Notes, Custom Objects, and Document Templates. We profile record counts per object, identify custom fields and their pick-list values, and document N:N relationships and orphaned records. This audit produces the migration scope document: record counts, custom field inventory, relationship map, and a data-cleanliness report flagging records without email addresses or with duplicate identifiers that will affect import validation in Twenty.
Build the field mapping document and create Twenty schema
Using the audit output, we create a detailed field mapping for every GoodLegal field — direct mappings, custom field creation specs (name, type, pick-list values), and transformation logic for date formats, address structures, and owner resolution. Before any data moves, your Twenty admin (or our team) creates all required custom fields in Settings → Data Model. We deliver a pre-flight checklist confirming every custom field is live in Twenty with the correct pick-list values configured.
Resolve owners and invite workspace members in Twenty
GoodLegal owner and user records are resolved by email match against Twenty Workspace Members. We run the match against your Twenty member list and flag any GoodLegal users who don't yet have a Twenty account. These users must be invited and accept their Twenty invitation before the migration runs — otherwise their owner relations resolve to null and records land without an assigned owner. We provide a user-invite checklist so your admin can close this gap before the migration window.
Migrate in Twenty's required import sequence with relation linking
The migration runs in strict sequence: Companies first (the 'one' side of all relationships), then People with companyId populated to link to imported companies, then Opportunities with peopleId and companyId resolved, then Activities and Tasks, then Custom Objects with their own relations. Relation linking uses Twenty's documented method — People reference Companies via companyId using the company's email or domain, and Opportunities reference People via peopleId using email. We generate a field-level diff after the test migration so you can verify every mapping before the full run.
Run test migration, delta pickup, and full cutover
A sample migration runs first — typically 100–500 records spanning all object types. We generate a field-level diff comparing source and destination values for every mapped field so you can confirm custom field population, stage name mapping, owner resolution, and document-template tagging. After test sign-off, the full migration runs and a delta-pickup window (24–48 hours) captures any records created or modified in GoodLegal during the cutover. An audit log documents every record inserted or updated. One-click rollback is available if reconciliation reveals systematic mapping errors.
Platform deep dives
Goodlegal
Source
Strengths
Weaknesses
Twenty CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 2 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 Goodlegal and Twenty CRM.
Object compatibility
2 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
Goodlegal: Not publicly documented.
Data volume sensitivity
Goodlegal 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 Goodlegal to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your Goodlegal 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 Goodlegal
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.