CRM migration

Migrate from Bilr to Twenty CRM

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

Bilr logo

Bilr

Source

Twenty CRM

Destination

Twenty CRM logo

Compatibility

90%

9 of 10

objects map 1:1 between Bilr and Twenty CRM.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Bilr and Twenty CRM serve fundamentally different purposes — Bilr is a time-tracking and billing platform built for law firms and consultants, while Twenty CRM is a full relationship-management system built on TypeScript, NestJS, and PostgreSQL. The migration challenge is translating Bilr's billing-centric data model (clients, matters, time entries, UTBMS task codes, invoices) into Twenty's CRM object graph (People, Companies, Opportunities, custom objects). FlitStack AI maps Bilr's client records directly to Twenty's People object, billing matters to custom objects, and time entries with their UTBMS categories to custom fields on those objects. The migration uses Twenty's CSV import function (up to 20,000 records per export) for standard objects and the REST/GraphQL API for larger datasets, respecting the 100–200 requests-per-minute rate limits by tier. Workflows, billing rules, and invoice templates in Bilr have no equivalent in Twenty and must be rebuilt manually. The approach sequences the import: Companies first (the 'one' side of relationships), then People linked via companyId, then custom objects for matters, with final validation against Twenty's uniqueness constraints on email and domain fields.

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

Bilr logo

Bilr

What's pushing teams away

  • No trust accounting capability means firms subject to IOLTA requirements must run a separate system or leave the platform entirely
  • Limited customization options for templates and workflows frustrate firms with non-standard billing arrangements or practice-area-specific needs
  • Mid-tier and Advanced pricing at $45–55 per user per month scales cost-prohibitively for larger firms evaluating against all-in-one legal practice management suites
  • Smaller ecosystem and fewer integrations compared to dominant legal platforms creates friction for firms needing calendar, document, or accounting sync

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

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

Bilr

Client

maps to

Twenty CRM

People

1:1
Fully supported

Bilr's Client records map directly to Twenty's People object. Client name maps to People name, email maps to People email, phone maps to People phone. Primary address fields map to the address fields on People. The import requires People to be sequenced after Companies so the companyId foreign key can resolve.

Bilr

Client

maps to

Twenty CRM

WorkspaceMember

1:many
Fully supported

If Bilr Client records include internal team members who will use Twenty as users, they split into Twenty People records plus WorkspaceMember invitations. The email field is the unique identifier for WorkspaceMember matching. Users who do not exist in Twenty yet are flagged before migration for admin review.

Bilr

Matter

maps to

Twenty CRM

Custom Object (Matter)

1:1
Fully supported

Bilr Matters have no direct equivalent in Twenty's standard objects. We create a 'Matter' custom object in Twenty with fields for matter number, status, responsible attorney, UTBMS task category, billing rate, and client link. If the workspace is on Twenty Pro (10 custom objects maximum), this may require upgrading to Organization tier.

Bilr

Matter

maps to

Twenty CRM

Opportunity

1:1
Fully supported

If Bilr Matters represent billable engagements that function like sales opportunities (with amount, stage, expected close date), they can map to Twenty Opportunities. The matter's total billed amount or estimated value maps to Opportunity.amount. Matter status (active/closed) maps to Opportunity.stage values via value mapping.

Bilr

TimeEntry

maps to

Twenty CRM

Custom Object (TimeEntry) linked to Matter

1:1
Fully supported

Bilr Time Entries are linked to Matters and include UTBMS task codes, hours, billing rate, and description. We create a TimeEntry custom object linked to the Matter custom object via a relation field. Each entry stores hours, rate, total amount, UTBMS code value, and entry date as custom fields. Original timestamps preserved for audit continuity.

Bilr

UTBMS Task Code

maps to

Twenty CRM

Custom field (UTBMS_Category__c) on TimeEntry

1:1
Fully supported

Bilr's UTBMS-coded task categories (e.g., A100, B101, C200) are stored as pick-list values on TimeEntry. These map to a custom text or pick-list field (UTBMS_Task_Code__c) on the TimeEntry custom object. Full UTBMS taxonomy mapping provided — non-standard codes preserved as-is for reference.

Bilr

Invoice

maps to

Twenty CRM

Custom Object (Invoice) linked to Matter

1:1
Fully supported

Bilr Invoices have invoice number, date, amount, status (draft/sent/paid/overdue), and line items tied to TimeEntries. We create an Invoice custom object linked to Matter with fields for invoice number, date, total amount, status, and a notes field summarizing line-item totals. Detailed line items preserved as JSON in a custom field for reference.

Bilr

Contact (on Matter)

maps to

Twenty CRM

People + AccountContactRelation

1:1
Fully supported

Bilr allows multiple contacts per Matter (e.g., attorney, client, billing contact). The primary contact maps to the People record already linked to the Matter. Secondary contacts map as AccountContactRelation records or as additional People records with a custom role field distinguishing them from the primary contact.

Bilr

Custom Billing Property

maps to

Twenty CRM

Custom field on Matter or TimeEntry

1:1
Fully supported

Any custom billing fields defined in Bilr (e.g., matter type, billing arrangement, contingency percentage, expense markup) migrate as custom fields on the Matter or TimeEntry custom objects in Twenty. Field type preserved (text, number, date, pick-list) using Twenty's field type mapping.

Bilr

Attachment / Document

maps to

Twenty CRM

Files linked to People or Custom Objects

1:1
Fully supported

Bilr file attachments on matters (contracts, correspondence, receipts) are downloaded and re-uploaded to Twenty as Files linked to the corresponding People or Matter record. File size limits apply — Bilr files over 25MB chunked or flagged for manual re-upload. Original file names preserved for traceability.

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.

Bilr logo

Bilr gotchas

High

No trust accounting support is a hard blocker for IOLTA firms

Medium

Limited workflow and template customization

Medium

Per-seat pricing model is migration-cost-sensitive

Low

Export scope discovery is required before migration

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's Pro tier limits custom objects to 10, which may be insufficient for complex Bilr matter configurations

    Bilr matters with multiple UTBMS task categories and custom billing properties require several custom objects (Matter, TimeEntry, Invoice, plus any domain-specific entities like Expenses or Disbursements). Twenty Pro caps custom objects at 10, and reaching this limit during migration planning is a common surprise. FlitStack AI audits the custom object count during discovery and flags whether Organization-tier workspace setup is required. If Organization-tier is not feasible, we consolidate related data into fewer objects using compound custom fields or pick-list segmentation. This gotcha is specific to the Bilr-to-Twenty migration because Bilr's billing model is more object-rich than typical CRM data.

  • Import ordering constraint in Twenty causes relation failures if Companies are not migrated first

    Twenty's CSV import system enforces a specific dependency order: Companies must be imported before People (because People records carry a companyId foreign key), and all objects with relations must follow their parent objects. Bilr's data model has no such constraint — clients, matters, and time entries can be exported in any order. FlitStack AI sequences the migration export to match Twenty's required import order: Companies first (mapped from Bilr client companies or created as placeholder accounts for individual clients), then People linked via companyId, then custom objects for Matters, then TimeEntries linked to Matters, then Invoices linked to Matters. Skipping this sequence results in import errors where People records cannot resolve their companyId and TimeEntry records cannot resolve their matterId, triggering Twenty's uniqueness-check failures.

  • UTBMS task code taxonomy has no native equivalent in Twenty — pick-list mapping requires manual curation

    Bilr's UTBMS-coded task categories (e.g., A100 for Case Evaluation, B101 for Fact Investigation) are a legal-industry standard that Twenty has no native concept of. We create a custom pick-list field (UTBMS_Task_Code__c) on the TimeEntry custom object, but Bilr instances often include non-standard codes or firm-specific variations that don't match the official UTBMS taxonomy. These custom codes must be mapped individually during the migration plan — a code-by-code review that adds scope for firms with complex billing arrangements. We surface all unique UTBMS values found in the Bilr export and ask the client's billing admin to confirm the mapping before the migration runs.

  • Bilr billing workflows and invoice templates have no Twenty equivalent and require manual rebuild

    Bilr's billing engine generates invoices from time entries and applies firm-specific rules (e.g., invoice numbering conventions, expense markups, payment terms, billing group assignments). Twenty has no native billing or invoicing engine — its Opportunities object tracks deal values but does not generate documents. FlitStack AI migrates the underlying data (time entries, invoice records, billing rates) as custom objects and fields, but invoice templates, billing rules, payment reminders, and automated billing workflows cannot migrate and must be rebuilt. We export Bilr's workflow definitions as a reference document for the client's admin to use when configuring Twenty's workflow builder or integrating a separate billing tool.

  • Twenty's 20,000-record export limit per CSV may require chunking for large Bilr instances

    Twenty's CSV export function caps each export at 20,000 records. Bilr instances for mid-size law firms or multi-attorney practices often contain more than 20,000 time entries spanning years of billing history. FlitStack AI handles this by exporting Bilr data in date-range slices (e.g., by year or by matter batch) and merging them into Twenty's custom objects. The 20,000-record limit applies per object per export run — multiple exports of the same object type are supported as long as each export's record set is unique. We flag record counts above this threshold during the discovery phase so the migration plan accounts for multi-export sequencing.

Migration approach

Six steps for a successful Bilr to Twenty CRM data migration

  1. Audit Bilr data export and plan custom object schema for Twenty

    FlitStack AI connects to Bilr's API to enumerate all record types: clients, matters, time entries, UTBMS task codes, invoices, custom billing properties, and attachments. We produce a data inventory listing record counts per object, unique UTBMS values, custom field definitions, and attachment file sizes. Using this inventory, we design the Twenty custom object schema (Matter, TimeEntry, Invoice) with all required custom fields, field types, and pick-list values. If the custom object count exceeds Ten Pro's 10-object limit, we recommend Organization-tier workspace setup or object consolidation before migration begins.

  2. Sequence exports and import files to match Twenty's dependency order

    Twenty requires Companies to exist before People (via companyId) and custom objects with relations to load after their parent records. We export Bilr data in dependency order: (1) Companies or placeholder accounts for individual clients, (2) People records with companyId populated, (3) Matter custom objects, (4) TimeEntry custom objects linked to Matters, (5) Invoice custom objects linked to Matters. Each export is formatted as a CSV matching Twenty's expected column headers. For exports exceeding 20,000 records, we split by date range and label each file for sequential import.

  3. Resolve user and client ownership mappings

    Bilr time entries and matters carry owner or responsible-user assignments. We match Bilr owner email addresses against Twenty WorkspaceMember records. Unmatched owners are flagged before migration — your admin either invites them to Twenty first or assigns their records to a fallback user. Client records that lack an email are mapped to a default placeholder Company record. UTBMS task codes are reviewed against the complete taxonomy and non-standard codes are preserved as-is in the custom pick-list field for manual reconciliation after migration.

  4. Run sample migration with field-level diff on a representative slice

    A representative slice (typically 200–500 records spanning clients, matters, time entries, and invoices) migrates to Twenty first. We generate a field-level diff between the Bilr source values and the Twenty destination fields so you can verify custom object schema, UTBMS code mapping, relation resolution (companyId on People, matterId on TimeEntry), and owner assignment. Any mapping errors are corrected before the full run commits. Sample migration also validates that the import ordering constraint is satisfied end-to-end.

  5. Execute full migration with delta-pickup window and audit log

    Full migration runs against Twenty using the sequenced CSV imports and API calls. A delta-pickup window (24–48 hours) captures any records modified in Bilr during the cutover so Twenty reflects Bilr's final state at go-live. FlitStack AI generates an audit log listing every record migrated, its source ID, destination ID, and timestamp. One-click rollback is available if reconciliation fails — the audit log enables selective record removal without affecting records that migrated correctly. Attachments and files are re-uploaded to Twenty's file storage and linked to their corresponding records.

Platform deep dives

Context on both ends of the pair

Bilr logo

Bilr

Source

Strengths

  • Purpose-built for legal billing workflows with time entry, expense tracking, and invoice generation within a single platform
  • Per-user pricing from $33.99/month provides a low barrier to entry for solo practitioners and small law firms
  • Three tiers (Basic, Pro, Advanced) offer a clear upgrade path as firm size and billing complexity grow
  • 24/5 support and on-demand training included across all tiers, differentiating from platforms that charge extra for support
  • Mobile apps on iOS and Android allow attorneys to log time and review bills from outside the office

Weaknesses

  • No trust accounting or IOLTA-compliant ledger means firms with client fund requirements cannot use Bilr as their sole financial system
  • Limited workflow customization and template flexibility frustrate firms with non-standard billing arrangements or practice-area-specific needs
  • Smaller third-party integration ecosystem compared to dominant legal practice management platforms creates friction for calendar, document, and accounting sync
  • Per-seat pricing scales cost linearly, which may become expensive for larger firms with many non-billing staff who need access
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 Bilr 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

    Bilr: Not publicly documented — typical SaaS limits assumed and confirmed during scoping.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

Walk through your Bilr to Twenty CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Most Bilr-to-Twenty migrations complete in 48–72 hours for under 10,000 records. Larger setups with 50,000+ time entries or complex UTBMS taxonomy mapping extend to 7–14 days. The longest planning step is designing the custom object schema in Twenty (Matter, TimeEntry, Invoice) and confirming the UTBMS code mapping with your billing admin before the migration runs. During the final hours, a delta-pickup captures any changes made in Bilr, ensuring Twenty reflects the latest state. After the initial load, a field-level diff validates record counts and relation integrity before you sign off.

Adjacent paths

Related migrations to explore

Ready when you are

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