CRM migration
Field-level mapping, validation, and rollback between Bilr and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Bilr
Source
Odoo CRM
Destination
Compatibility
12 of 12
objects map 1:1 between Bilr and Odoo CRM.
Complexity
BStandard
Timeline
72–120 hours
Overview
Bilr organizes data around clients, matters, time entries, and invoices — a billing-centric model common to practice-management tools. Odoo CRM uses res.partner for contacts and companies, crm.lead for leads and opportunities, and a stage-keyed pipeline kanban. The migration maps Bilr client records to res.partner, matters to a combination of crm.lead and custom fields on the partner record, and time-entry histories to Odoo activities with original timestamps preserved. We carry over all standard Bilr fields (name, email, phone, address, custom properties) plus any custom properties your team has defined. Invoices and payment records migrate as custom fields on res.partner or as linked sale orders if Odoo Sale is active — no native billing-to-invoice translation exists between the two models. Workflows, automation rules, and billing-rate templates do not migrate; FlitStack exports these as CSV reference sheets for your Odoo admin to rebuild using Odoo Automated Actions. The migration mechanism uses Bilr CSV exports as the source, transformed to Odoo CSV import format or batched via Odoo XML-RPC API for datasets over 5,000 records. We run a sample migration of 50–200 records first, generate a field-level diff, and cut over with a 24–48 hour delta window to capture any Bilr changes during the switch.
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 Bilr object lands in Odoo 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
Odoo CRM
res.partner
1:1Bilr Client records map directly to Odoo res.partner. Name, email, phone, address, and website fields translate field-for-field. Multiple contacts per client collapse to one primary res.partner — additional contacts migrate as Contact records linked via 'Contact' type on the partner.
Bilr
Contact
Odoo CRM
res.partner
1:1Individual Bilr Contact records (within a Client) map to res.partner with type='contact'. Email, phone, name, and job title translate directly. Parent company link uses res.partner's Parent Partner field to maintain client-contact hierarchy. If a contact has multiple phone numbers, additional entries store as separate contact subrecords under the same partner.
Bilr
Matter
Odoo CRM
crm.lead
1:1Bilr Matters have no native Odoo equivalent — they bridge contact and billing data. We map Matter to crm.lead as Opportunities, with Matter name as Opportunity name, status as stage, and client as the linked res.partner (partner_id). Billing-specific fields (rate, billing method) become custom fields on the crm.lead record.
Bilr
Time Entry
Odoo CRM
crm.activity / crm.lead.note_ids
1:1Time entries carry description, hours, date, and billing rate. In Odoo, these become CRM activities (mail.activity) with type='Other', original date preserved, description in the activity note, and hours stored in a custom Duration field. If Odoo Timesheet module is active, entries link to crm.lead as timesheet lines.
Bilr
Invoice
Odoo CRM
sale.order / account.move (custom_field_required)
1:1Bilr Invoice records (number, date, amount, status, line items) do not have a direct CRM counterpart. If Odoo Sale is active, invoices map to sale.order with state='sale'. If Odoo Account is active, they map to account.move. In all cases, invoice ID, amount, and status migrate as custom fields on the linked res.partner for historical reference.
Bilr
Payment
Odoo CRM
account.payment (custom_field_required)
1:1Bilr Payment records (date, amount, method, reference) link to an Invoice. In Odoo, payments belong to account.payment tied to account.move invoices. We store payment date, amount, method, and reference as custom fields on the res.partner record — actual payment objects require Odoo Account module activation.
Bilr
Custom Property (on Client)
Odoo CRM
res.partner custom field (x_bilr_*)
1:1Bilr custom properties on Client records require Odoo custom fields. Property names become field technical names prefixed x_bilr_ (e.g., x_bilr_referral_source). Field type maps per Bilr type: text→char, number→float, date→date, dropdown→selection. Odoo Studio (Enterprise) or custom module (Community) needed before import.
Bilr
Custom Property (on Matter)
Odoo CRM
crm.lead custom field (x_bilr_*)
1:1Matter-level custom properties migrate to crm.lead as custom fields prefixed x_bilr_matter_*. Billing-specific properties (e.g., matter rate, billing method) become Odoo custom fields on the opportunity record. Custom field creation in Odoo is a prerequisite before migration data can land correctly.
Bilr
Attachment / File
Odoo CRM
ir.attachment / documents.document
1:1Bilr file attachments on matters and time entries re-upload to Odoo as ir.attachment records linked to the target crm.lead. If Odoo Documents app is installed, files go to documents.document for the CRM workspace. Re-upload step required — attachments are downloaded from Bilr and pushed to Odoo via API.
Bilr
Staff / User
Odoo CRM
res.users
1:1Bilr user accounts (staff names, email, role) match Odoo res.users by email. Active Bilr users get mapped to Odoo users with matching email; inactive accounts flagged. If Bilr roles don't map to Odoo groups, we assign to 'Sales / User' group and note the role name in a custom field.
Bilr
Billing Rate Rule
Odoo CRM
None (no_equivalent)
1:1Bilr billing rate rules (per-attorney rates, matter-type rates, discount rules) have no Odoo CRM equivalent. Odoo Sale uses pricelists for product pricing, not per-staff billing rates. We export rate rules as a CSV reference sheet for the Odoo admin to configure as product pricelist rules in Sale if needed.
Bilr
Trust Accounting Ledger
Odoo CRM
None (no_equivalent)
1:1Bilr trust accounting records (client trust balance, ledger entries) are legal-specific and have no Odoo CRM equivalent. These require the Odoo Accounting module for proper handling. We export trust ledger as a separate CSV for an accountant to import into Odoo Account or reconcile manually.
| Bilr | Odoo CRM | Compatibility | |
|---|---|---|---|
| Client | res.partner1:1 | Fully supported | |
| Contact | res.partner1:1 | Fully supported | |
| Matter | crm.lead1:1 | Fully supported | |
| Time Entry | crm.activity / crm.lead.note_ids1:1 | Fully supported | |
| Invoice | sale.order / account.move (custom_field_required)1:1 | Fully supported | |
| Payment | account.payment (custom_field_required)1:1 | Fully supported | |
| Custom Property (on Client) | res.partner custom field (x_bilr_*)1:1 | Fully supported | |
| Custom Property (on Matter) | crm.lead custom field (x_bilr_*)1:1 | Fully supported | |
| Attachment / File | ir.attachment / documents.document1:1 | Fully supported | |
| Staff / User | res.users1:1 | Fully supported | |
| Billing Rate Rule | None (no_equivalent)1:1 | Fully supported | |
| Trust Accounting Ledger | None (no_equivalent)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.
Bilr gotchas
No trust accounting support is a hard blocker for IOLTA firms
Limited workflow and template customization
Per-seat pricing model is migration-cost-sensitive
Export scope discovery is required before migration
Odoo CRM gotchas
Odoo.sh version gating blocks assisted migrations from trial
Enterprise modules fail to install on Community after database restore
Custom module view inheritance breaks between Odoo major versions
Custom fields risk losing their application context on Community
API access for Community is gated behind the Custom Plan
Pair-specific challenges
Migration approach
Extract Bilr CSV exports and audit field coverage
We guide your Bilr admin through generating exports from all relevant modules: Clients, Contacts, Matters, Time Entries, Invoices, Payments, and Custom Properties. We audit the export columns against your Bilr configuration and flag any custom properties not included in the Basic plan export. We also extract attachment URLs (where accessible) for the re-upload step. This audit produces the field inventory that drives Odoo custom field creation.
Create Odoo custom fields and configure CRM pipeline stages
Before data can migrate, we generate an Odoo custom module (Community) or Studio field definition (Enterprise) containing every x_bilr_* custom field identified in the audit. We also map Bilr matter statuses to Odoo CRM stage names and deliver the stage configuration plan. If Odoo Sale or Account is active, we define the invoice and payment custom field structures on res.partner as well. Odoo custom fields must be installed and active before Step 4.
Resolve Bilr staff to Odoo users by email
Bilr staff records are matched to Odoo res.users by email address. We run a pre-flight check: active Bilr users with Odoo login matches are mapped directly; staff without Odoo accounts are flagged for your admin to create before migration. Owner resolution on crm.lead records uses the same email match. No record lands in Odoo without a resolved user — unresolvable staff get assigned to a designated fallback Odoo user.
Run sample migration of 50–200 records with field-level diff
A representative slice migrates first: all object types (clients, contacts, matters, time entries) across multiple status values. We generate a field-level diff comparing source CSV values against Odoo record values — verifying that custom property values, date fields, and mapped pick-list values landed correctly. You review the diff and confirm the mapping logic before we commit to the full run. Any field mapping corrections happen at this stage.
Execute full migration with delta-pickup window
The full dataset migrates in ordered batches: res.partner (clients + contacts) first to resolve partner_ids, then crm.lead (matters) with partner_id foreign keys, then mail.activity records (time entries) linked to the migrated opportunities, then invoice/payment custom fields. Attachment re-upload runs in parallel via Odoo ir.attachment API. A 24–48 hour delta window after the initial load captures any Bilr records modified during cutover. An audit log records every imported record with source Bilr ID.
Validate, reconcile, and confirm with rollback available
We generate a reconciliation report comparing Bilr record counts and sampled field values against Odoo records. You spot-check data in Odoo — custom field values, activity histories, and opportunity linkages. If reconciliation fails any critical threshold, one-click rollback reverts the Odoo database to its pre-migration state. On confirmation, we deliver the CSV reference exports for billing rate rules and trust accounting for your Odoo admin to rebuild manually in Sale or Account modules.
Platform deep dives
Bilr
Source
Strengths
Weaknesses
Odoo 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 Bilr and Odoo 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
Bilr: Not publicly documented — typical SaaS limits assumed and confirmed during scoping.
Data volume sensitivity
Bilr 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 Bilr to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Bilr to Odoo 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 Bilr
Other ways to arrive at Odoo 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.