CRM migration

Migrate from RunSensible to Odoo CRM

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

RunSensible logo

RunSensible

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

92%

11 of 12

objects map 1:1 between RunSensible and Odoo CRM.

Complexity

BStandard

Timeline

24–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

RunSensible organizes legal practice data around Clients, Matters, Leads, and Billing records — with trust accounting, statute-of-limitations tracking, and court-rules integration built into the core schema. Odoo CRM uses crm.lead for unqualified prospects and crm.opportunity for qualified deals, with res.partner as the unified contact record. The migration carries every RunSensible contact, matter, lead, and billing line into the corresponding Odoo model, applying IOLTA-compliant trust-account mapping to Odoo's account.account structure where relevant. Workflows, email automations, and court-rules triggers do not transfer — FlitStack exports workflow definitions as JSON for your Odoo consultant to rebuild in Odoo's Studio or Python-based automations. The migration engine uses Odoo's xmlrpc API with batched commits to handle large matter volumes without timeouts. We resolve RunSensible owner assignments by email match against Odoo res.users, flagging unmatched users before the first record loads. Billing records including LEDES-coded invoices and three-way IOLTA trust entries are mapped to account.move and account.move.line, with custom fields preserving the original trust transaction type (retainer, deposit, or disbursement) for your accountant to route to the correct IOLTA account after configuration.

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

RunSensible logo

RunSensible

What's pushing teams away

  • Support response times frustrate firms with urgent billing or compliance questions, particularly during month-end invoice runs
  • The mid-tier plans limit API access and custom reporting, pushing growing firms toward enterprise pricing or alternative platforms
  • Users report that the calendar and scheduling features lack the granular conflict checking needed for multi-attorney practice management
  • Firms with complex multi-state compliance needs find RunSensible's court rules integration limited to specific jurisdictions rather than comprehensive
  • Some firms outgrow the platform when they require advanced analytics or custom integrations not available without a dedicated implementation

Choosing

Odoo CRM logo

Odoo CRM

What's pulling them in

  • Teams choose Odoo CRM for its modular architecture — one base install with one-click app additions means they can adopt CRM alone and add accounting, inventory, or sales later as the business grows.
  • Small businesses pick Odoo because the Community edition is free and open-source, with no per-user or contact limits, allowing full evaluation before committing to a paid Enterprise tier.
  • The drag-and-drop Kanban pipeline and AI lead scoring are highlighted across G2 reviews as concrete features that make lead management faster and more visual than spreadsheet-based workflows.
  • Odoo's native integration with email, live chat, SMS, VoIP, and WhatsApp means inbound leads from multiple channels feed into a single pipeline without third-party middleware.
  • Companies in retail, supply chain, and construction value that Odoo's CRM module shares the same PostgreSQL database and UI as its ERP modules, eliminating data silos between sales and operations.

Object mapping

How RunSensible objects map to Odoo CRM

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

RunSensible

Client

maps to

Odoo CRM

res.partner

1:1
Fully supported

RunSensible Client maps to Odoo res.partner with type='contact'. The primary email, phone, and address fields transfer directly. RunSensible's client-level billing flag (IOLTA vs. operating account) maps to a custom selection field on res.partner — Odoo Accounting handles the actual account routing post-migration.

RunSensible

Contact (on Client)

maps to

Odoo CRM

res.partner

many:1
Fully supported

RunSensible sub-contacts (e.g., opposing counsel, co-counsel, billing contacts) attached to a client merge into Odoo res.partner records linked to the same parent_id. The contact's role label (e.g., 'Billing Contact', 'Primary Attorney') transfers as a custom char field on each partner record. If no parent-child relationship exists in RunSensible, contacts become sibling records without parent linkage.

RunSensible

Matter

maps to

Odoo CRM

crm.lead

1:1
Fully supported

RunSensible Matters map to Odoo crm.lead when the matter is a prospective or active engagement. Matter name becomes crm.lead name; matter description becomes crm.lead description. Matter status (Open/Closed) maps to crm.lead stage_id — we create a custom stage sequence in Odoo's pipeline for legal-matter lifecycle states.

RunSensible

Matter

maps to

Odoo CRM

project.project

1:1
Fully supported

Matters with active task tracking (court filings, discovery deadlines, client deliverables) may warrant a project.project record. We migrate the matter as crm.lead and surface a flag field (Matter_Needs_Project__c) for your consultant to create the project record and link it via crm.lead x_project_id.

RunSensible

Lead

maps to

Odoo CRM

crm.lead

1:1
Fully supported

RunSensible Leads map 1:1 to Odoo crm.lead. The lead source field (e.g., 'Referral', 'Website') maps to crm.lead source_id via Odoo's utm.source mechanism. Lead priority (Low/Medium/High) maps to crm.lead priority field using value_mapping. Unqualified prospects from RunSensible become crm.lead records without an assigned user_id.

RunSensible

Time Entry

maps to

Odoo CRM

account.analytic.line

1:1
Fully supported

Billable time entries from RunSensible map to Odoo account.analytic.line with product_id, unit_amount (in hours), and partner_id linked to the associated matter's client. Non-billable entries are imported with product_id left null and a note flag for your billing team to review.

RunSensible

Invoice / Bill

maps to

Odoo CRM

account.move

1:1
Fully supported

RunSensible invoices and bills migrate to Odoo account.move with move_type='out_invoice' or 'in_invoice'. LEDES billing codes map to Odoo's account.account codes via a value-mapping table. The invoice line items reference the analytic lines so Odoo Accounting can reconcile the full matter ledger.

RunSensible

Trust Accounting Entry

maps to

Odoo CRM

account.move

1:1
Fully supported

IOLTA trust transactions require Odoo Accounting with separate IOLTA and operating accounts configured. We migrate the transaction records with a custom trust_transaction_type field (retainer/deposit/disbursement). The account.account routing must be set up by your Odoo accountant before the records can post correctly.

RunSensible

Document / Attachment

maps to

Odoo CRM

ir.attachment

1:1
Fully supported

RunSensible matter attachments are downloaded and re-uploaded to Odoo ir.attachment linked to the migrated matter's crm.lead record (res_model='crm.lead', res_id=mapped_lead_id). Large files are batched; inline images in documents are extracted and stored separately to avoid blob-size issues in PostgreSQL. E-signature status is preserved in a custom field on the attachment.

RunSensible

Calendar Event

maps to

Odoo CRM

calendar.event

1:1
Fully supported

RunSensible matter deadlines and court-date reminders map to Odoo calendar.event with partner_ids linked to the associated res.partner client. Start datetime, stop datetime, and allday flag are preserved. Statute-of-limitations dates surface as all-day calendar events with a custom urgency flag for follow-up.

RunSensible

Custom Field (Matter)

maps to

Odoo CRM

ir.model.field

1:1
Fully supported

RunSensible custom matter fields (e.g., 'Court District', 'Case Number', 'Statute of Limitations Date') are created as custom fields on crm.lead via Odoo's ir.model.fields API before data loads. Field types are matched: char → char, date → date, selection → selection, decimal → float.

RunSensible

User / Attorney

maps to

Odoo CRM

res.users

1:1
Fully supported

RunSensible attorney and staff records are matched to Odoo res.users by email. Unmatched attorneys are flagged in a pre-migration report — your Odoo admin either creates the user first or assigns records to a fallback attorney. The RunSensible user role (Partner/Associate/Paralegal) becomes a custom field on res.users.

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.

RunSensible logo

RunSensible gotchas

High

Trust account balance migration requires three-way reconciliation

High

Invoice-to-matter linkage is required for billable entries

Medium

API access is tier-gated and not available on Essential plan

Medium

AI Forms and Execute modules are separate paid add-ons

Low

Client intake forms use conditional logic not preserved in standard export

Odoo CRM logo

Odoo CRM gotchas

High

Odoo.sh version gating blocks assisted migrations from trial

High

Enterprise modules fail to install on Community after database restore

Medium

Custom module view inheritance breaks between Odoo major versions

Medium

Custom fields risk losing their application context on Community

Low

API access for Community is gated behind the Custom Plan

Pair-specific challenges

  • IOLTA trust accounting requires Odoo Accounting configuration before records post

    RunSensible's IOLTA model uses three-way reconciliation with separate operating and trust bank accounts. Odoo Accounting must be installed and the IOLTA account.account records created before trust-accounting entries can post. We migrate the raw transaction data with a custom field flag, but the account routing — which RunSensible handles automatically — must be configured in Odoo by your accountant. Skipping this step means trust transactions land in a suspense state, which creates regulatory risk for bar compliance.

  • Matter-to-project linking requires a post-migration consultant step

    RunSensible matters with active task boards (court filing schedules, discovery milestones, client deliverables) do not map 1:1 to Odoo's crm.lead. We migrate the matter as a crm.lead record and flag it with x_matter_needs_project. Odoo's crm.lead x_project_id link must be established by your consultant, who creates the project.project record and attaches the appropriate task templates. This is a manual handoff — the migration does not auto-generate the project, and the crm.lead remains unlinked until your consultant completes the project creation and task-template attachment.

  • Multi-contact clients collapse to primary partner_id with child contacts

    RunSensible allows multiple named contacts (co-counsel, opposing parties, billing contacts) attached to a single client with role labels. Odoo res.partner supports one parent_id (company) and child contacts via Contact workbench. We migrate the primary named contact as the parent res.partner and create child partner records for additional contacts. The RunSensible role label transfers as a custom field on each child partner. If your firm relies on a flat contact list with no parent-child distinction in RunSensible, all contacts become siblings with no parent linkage.

  • Odoo xmlrpc API rate limits require batched migration with commit checkpoints

    Odoo's xmlrpc interface has no published per-request rate limit but degrades under sustained concurrent writes. We use a configurable batch size (default 100 records per commit) with a 2-second pause between batches to keep the Odoo instance responsive. Large matter histories with 500+ time entries per attorney require a dedicated migration window outside business hours. The migration log tracks every batch commit so you can resume from the last checkpoint if the connection drops.

Migration approach

Six steps for a successful RunSensible to Odoo CRM data migration

  1. Audit RunSensible data and configure Odoo schema

    We export a full inventory of RunSensible clients, contacts, matters, leads, time entries, invoices, documents, and custom fields. Your Odoo admin creates the custom fields on crm.lead and res.partner (case_number, billing_type, statute_of_limitations, attorney_role) before we load data. If you need IOLTA accounting, the Odoo accountant configures the trust and operating accounts in Accounting at this stage. We deliver a schema-setup checklist so nothing is missing when validation runs.

  2. Match RunSensible users to Odoo res.users by email

    We pull all RunSensible attorney and staff records and match them to existing Odoo res.users by email address. Any RunSensible user with no Odoo match is listed in a pre-migration report. Your team either creates the Odoo user first or assigns those RunSensible records to a fallback attorney. No matter or time entry loads without a confirmed owner — unowned records are held in a staging state until resolved.

  3. Migrate clients and contacts before matters

    Odoo crm.lead requires partner_id to link to res.partner. We sequence the migration so all clients load first, establishing the res.partner IDs that matter records reference. Sub-contacts and child partners load in the same batch, with the RunSensible role label preserved as a custom field on each partner. Any duplicate-client merges identified during the audit are resolved before bulk loading to avoid creating duplicate partner records.

  4. Run a sample migration with field-level diff on 200–500 records

    A representative slice of clients, matters, leads, time entries, and invoices migrates first. We generate a field-level diff report showing source vs. destination values for every mapped field, including custom fields and IOLTA flags. You verify that case_number populated correctly, statute-of-limitations dates landed in the right custom field, and time entries link to the correct analytic account. No full run commits until the diff is signed off.

  5. Execute full migration with delta-pickup window

    The full RunSensible dataset loads via batched xmlrpc commits with 2-second pauses between batches. During cutover, your team continues working in RunSensible. A 24–48 hour delta-pickup window captures any new matters, time entries, or documents created during the migration run. After the delta captures, we run a final reconciliation report comparing total record counts per object against RunSensible's export totals. Audit log records every insert and link operation.

Platform deep dives

Context on both ends of the pair

RunSensible logo

RunSensible

Source

Strengths

  • Combines CRM, matter management, trust accounting, and client portal in one platform without requiring third-party integrations
  • AI-powered form library with 54,000+ court documents for U.S. and Canadian jurisdictions reduces manual drafting
  • IOLTA-compliant three-way reconciliation built into trust accounting satisfies bar association audit requirements
  • Competitive per-seat pricing starting at $39/user/month with transparent annual billing and a 60-day money-back guarantee
  • Workflow automation and email templates streamline client onboarding and reduce repetitive administrative tasks

Weaknesses

  • API access and custom reporting are gated behind higher pricing tiers, limiting data portability for mid-market firms
  • Calendar and scheduling conflict checking is basic, requiring manual oversight in multi-attorney practices
  • Court rules integration covers limited jurisdictions, creating gaps for firms operating across multiple states or provinces
  • Support response times during critical periods such as month-end billing receive mixed reviews from users
  • Enterprise pricing requires a custom quote with implementation costs of $10,000+, making total cost opaque until late in the sales cycle
Odoo CRM logo

Odoo CRM

Destination

Strengths

  • Modular open-source architecture lets teams start with CRM and add ERP apps as needs grow, all sharing one PostgreSQL database.
  • Free Community edition with no contact limits and full source code access means zero licensing cost for evaluation and small deployments.
  • Drag-and-drop Kanban pipeline with AI lead scoring gives a visual, prioritized view of the sales funnel without requiring custom configuration.
  • Native integrations with email, live chat, SMS, VoIP, WhatsApp, and social media feed all inbound leads into a single unified inbox.
  • Active Odoo Community Association (OCA) maintains dozens of community-maintained modules on GitHub for extended functionality.

Weaknesses

  • Gmail and email integration reliability is a recurring complaint — threads drop and conversations scatter across inboxes, disrupting sales team workflows.
  • Enterprise edition pricing stacks quickly: multiple apps at per-user rates ($25–$50/user/month) plus Odoo.sh hosting costs more than many SMBs anticipate.
  • Setup and configuration complexity increases significantly once custom fields, automation rules, and multiple installed modules are in play.
  • Odoo.sh trial databases run on a version (e.g., 18.3) that is not directly migratable to Odoo.sh, blocking the assisted migration path Odoo advertises.
  • Version upgrades between major Odoo releases (e.g., 17→18) frequently break custom module view definitions and XPath expressions, requiring manual remediation.

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 RunSensible and Odoo 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

    RunSensible: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

Estimate your RunSensible to Odoo 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 RunSensible to Odoo CRM data migrations

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

Can't find your answer?

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

Book a free 30 minute consultation

Most RunSensible-to-Odoo migrations complete in 24–72 hours of clock time for under 25,000 records. Large matter histories with 200,000+ time entries and IOLTA billing records extend the timeline to 5–10 days. The schema-setup phase — creating custom fields, configuring accounting accounts, and matching users — typically takes 2–3 days before any data loads. The delta-pickup window (24–48 hours) is included in the overall timeline.

Adjacent paths

Related migrations to explore

Ready when you are

Move from RunSensible.
Land in Odoo 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