CRM migration

Migrate from Goodlegal to Twenty CRM

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

Goodlegal logo

Goodlegal

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

92%

11 of 12

objects map 1:1 between Goodlegal and Twenty CRM.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

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

Goodlegal logo

Goodlegal

What's pushing teams away

  • Early navigation issues caused friction during onboarding; while platform updates have addressed most concerns, some reviewers needed time to locate key features.
  • A few users reported problems with the document creation workflow in early sessions, suggesting inconsistency in the drafting experience across document types.
  • Small business users sometimes outgrow the platform's feature set as their legal needs become more complex, prompting migration to more robust practice management tools.
  • Some reviewers noted that template customization required additional steps or support, reducing the perceived speed advantage for non-standard contract needs.

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

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

maps to

Twenty CRM

People

1:1
Fully supported

GoodLegal 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

maps to

Twenty CRM

Companies

1:1
Fully supported

GoodLegal 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

maps to

Twenty CRM

Opportunity

1:1
Fully supported

GoodLegal 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

maps to

Twenty CRM

Custom Select (Stage__c)

1:1
Fully supported

GoodLegal 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)

maps to

Twenty CRM

Task

1:1
Fully supported

GoodLegal 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)

maps to

Twenty CRM

Event

1:1
Fully supported

GoodLegal 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

maps to

Twenty CRM

Note

1:1
Fully supported

GoodLegal 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)

maps to

Twenty CRM

Custom Field

1:1
Fully supported

Fields 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

maps to

Twenty CRM

Note (with flag)

1:1
Fully supported

GoodLegal 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

maps to

Twenty CRM

File (Twenty Files)

1:1
Fully supported

GoodLegal 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

maps to

Twenty CRM

Workspace Member

1:1
Fully supported

GoodLegal 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)

maps to

Twenty CRM

Primary relation + secondary note

many:1
Fully supported

GoodLegal 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.

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.

Goodlegal logo

Goodlegal gotchas

Medium

Audit logs are not externally accessible

Medium

Limited public API documentation

Low

Document creation workflow inconsistencies by type

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

  • Legal-domain custom fields need manual pick-list configuration in Twenty before data lands

    GoodLegal legal-domain custom fields (matter_type, billing_arrangement, client_status, practice_area, referral_source) have no native equivalents in Twenty CRM. These must be created as custom fields in Twenty's Settings → Data Model before any import, and their pick-list values must be manually configured to match the exact strings in GoodLegal. If the fields don't exist at import time, CSV import skips them silently. We deliver a pre-migration checklist specifying every custom field name, type, and required pick-list value so your Twenty admin can create the schema before data arrives. Failure to pre-create fields means legal-specific data gets dropped or stored as unstructured text.

  • Twenty enforces a strict import order that breaks if violated

    Twenty's CSV import requires referential integrity — Companies must be imported before People, and People must exist before Opportunities can reference them. This means the migration must run in the sequence: Companies → People → Opportunities → Custom Objects. Violating this order produces foreign-key errors and incomplete records. GoodLegal's matter objects often reference both contacts and companies simultaneously, so the migration tool must handle a topological sort to resolve the correct load order. We handle this sequencing automatically; if you're doing this manually, use Twenty's documented import order or you'll get orphaned Opportunity records with null companyId and peopleId links.

  • Document templates have no migration path and require a rebuild reference package

    GoodLegal document templates (the core product value for many legal teams) cannot be imported into Twenty CRM as functional templates. Twenty has no native document-generation or template object. We export all document templates as Notes with a custom Is_Template__c flag and the template body content stored in the note body. Your team uses these as a rebuild reference when creating Twenty workflows that generate documents via integrations (e.g., connected to DocuSign or PDF generation tools). The rebuild reference package is included in the migration deliverable. This is not data loss — it is a documented boundary of what the target platform supports natively.

  • GoodLegal N:N contact-to-company relationships collapse to one primary companyId

    GoodLegal supports assigning a contact to multiple companies natively. Twenty's CSV import model sets one primary companyId per People record via the companyId column. Secondary company relationships are preserved in a custom text field (Secondary_Companies__c) listing additional company names or IDs. Full N:N reconstruction requires post-migration work in the Twenty UI using the Contacts → Companies relation panel. We flag every multi-company contact during the audit phase so your team knows which records need post-migration cleanup.

  • Twenty CSV exports are capped at 20,000 records per file

    Twenty's CSV export function returns up to 20,000 records per export operation. For GoodLegal deployments with more than 20,000 contacts, companies, or combined activities, the export must be split by object type or date range. We handle this by running paginated exports using Twenty's API (available at 100 requests/minute on Cloud Pro, 200 on Organization) and stitching the results before transformation. If you're using the UI export directly, you must configure views with filters to paginate through large datasets — otherwise you'll get truncated exports that miss records.

Migration approach

Six steps for a successful Goodlegal to Twenty CRM data migration

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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

Context on both ends of the pair

Goodlegal logo

Goodlegal

Source

Strengths

  • Template library covering common small-business contract types including NDAs, service agreements, and employment contracts
  • Responsive customer team that adds new templates and features based on user requests
  • Centralized document storage replacing scattered local files and email attachments
  • Minimal onboarding required to begin creating and managing legal documents
  • AI-assisted drafting reduces time spent on standard contract generation

Weaknesses

  • Navigation and document creation UX required multiple improvement cycles before stabilizing
  • Limited public API documentation restricts automated migration and integration options
  • Smaller review sample size on G2 makes it difficult to assess long-term reliability at scale
  • Platform designed primarily for small businesses; mid-market or enterprise legal departments may find feature depth insufficient
  • Audit and compliance logs are not externally exportable, limiting migration completeness for regulated industries
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. 2 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 Goodlegal and Twenty CRM.

  • Object compatibility

    B

    2 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

    Goodlegal: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

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 consultation

Most GoodLegal-to-Twenty CRM migrations complete in 48–72 hours of clock time for under 10,000 total records. Larger setups with 50,000+ records, multiple custom objects, and legal-domain pick-list fields extend to 5–7 days. The longest planning step is pre-creating custom fields in Twenty's Settings → Data Model with the correct pick-list values — this must happen before any CSV import runs.

Adjacent paths

Related migrations to explore

Ready when you are

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