CRM migration

Migrate from LegalServer to Odoo CRM

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

LegalServer logo

LegalServer

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

75%

9 of 12

objects map 1:1 between LegalServer and Odoo CRM.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

LegalServer is a cloud-hosted case management platform designed for civil legal aid, public defenders, and government law departments. Its data model centers on Cases (Matter), Contacts (Person), Organizations (Entity), and a flexible Custom Field architecture organized by module — Custom Matter, Custom Outreach, Custom Timekeeping. LegalServer tracks grant balances with billing types (Flat Hourly Rate, Variable Hourly Rate), poverty-level assessments, and contractor assignments through its Contractor Module. Odoo CRM uses a single crm.lead model that serves as both Lead and Opportunity, with res.partner for contacts and organizations. Odoo stores custom fields as ir.model.fields with an x_ prefix in Community edition or native fields in Enterprise. The Odoo API exposes Leads, Partners, and Opportunities via xmlrpc/jsonrpc, but stage names, tags, and sales team assignments are separate relational records. FlitStack AI extracts LegalServer data via its Core API (limited to 100 records per request, requiring pagination), maps Cases to crm.lead with LegalServer's case status preserved as a custom field, merges Contact and Organization into res.partner, and transfers custom matter fields as Odoo custom fields. Grant billing types and poverty percentages migrate to custom fields for reference. The Odoo module structure means automations, HotDocs document templates, and grant-management workflows must be rebuilt manually — FlitStack exports the LegalServer workflow definitions as a rebuild reference.

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

LegalServer logo

LegalServer

What's pushing teams away

  • Users consistently describe the interface as visually outdated and clunky — reviewers on Capterra note heavy reliance on dropdown triangles, a dated calendar system, and a layout that does not feel like a modern program.
  • The contact creation workflow has a documented pitfall where using the wrong button to add contacts to a case creates a static contact record instead of a dynamic one, requiring manual cleanup and support intervention.
  • The v2 Core API caps results at 100 records per request with no cursor or offset pagination, which creates slow extraction cycles for organizations with large case histories and limits bulk migration efficiency.

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 LegalServer objects map to Odoo CRM

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

LegalServer

Contact (Person)

maps to

Odoo CRM

res.partner

many:1
Fully supported

LegalServer Contact (Person) merges with Organization (Entity) into a single res.partner record in Odoo. LegalServer's separate Person and Entity modules represent the same contact type that Odoo consolidates into one table. N:N case-contact relationships in LegalServer map to Odoo's crm.lead.partner_id Many2one relationship, with the primary contact stored as partner_id and secondary contacts linked via partner_tags.

LegalServer

Organization (Entity)

maps to

Odoo CRM

res.partner

many:1
Fully supported

LegalServer Organization merges into res.partner alongside Contact. When a Contact is linked to an Organization in LegalServer, Odoo uses the Organization's res.partner as the primary partner and the Contact as a child contact (type='contact'). LegalServer organization hierarchies (parent/child) map to Odoo's parent_id on res.partner.

LegalServer

Case (Matter)

maps to

Odoo CRM

crm.lead

1:1
Fully supported

LegalServer Case (Matter) maps directly to Odoo crm.lead. Each Case becomes a Lead record in Odoo CRM. LegalServer case status (Active, Closed, Pending) migrates as a custom selection field on crm.lead. Case number and matter ID preserved as external identifier fields for traceability.

LegalServer

Custom Matter Fields

maps to

Odoo CRM

crm.lead (x_ custom fields)

1:1
Fully supported

LegalServer's Custom Matter fields (module-scoped under Admin > Custom Field Management) map to Odoo custom fields on crm.lead. Each LegalServer Custom Matter field requires an Odoo x_ field to be created before migration. Field type mapping: bool → boolean, lookup → selection, lookup_custom → selection, duration → char.

LegalServer

Custom Outreach Fields

maps to

Odoo CRM

res.partner (x_ custom fields)

1:1
Fully supported

LegalServer Outreach module custom fields map to custom fields on res.partner. Outreach-specific data such as referral source, outreach type, and contact method are stored as Odoo custom selection or char fields on the partner record for reference and reporting segmentation.

LegalServer

Custom Timekeeping Fields

maps to

Odoo CRM

account.analytic.line (x_ custom fields)

1:1
Fully supported

LegalServer timekeeping entries with custom fields map to Odoo Timesheets (account.analytic.line). Timekeeping data requires Odoo's Timesheet app to be installed and active on the target database. LegalServer hours, dates, and staff assignments transfer as timesheet lines with custom fields for case-matter reference and billing attribution.

LegalServer

Grant / Billing Type

maps to

Odoo CRM

x_grant_billing_type (custom field on crm.lead)

1:1
Fully supported

LegalServer grant billing types (Flat Hourly Rate, Variable Hourly Rate) have no direct Odoo CRM equivalent. We map them as a custom selection field (x_grant_billing_type) on crm.lead with the same pick-list values preserved. Grant balance tracking remains in LegalServer or a separate grant management tool.

LegalServer

Financial Information / Poverty Percentage

maps to

Odoo CRM

x_poverty_percentage (custom field on res.partner)

1:1
Fully supported

LegalServer's financial information screen calculates Percentage of Poverty based on client income and household size relative to federal guidelines. This migrates as a custom float field (x_poverty_percentage) on res.partner. The underlying calculation logic using federal poverty guidelines is not replicated in Odoo — only the resulting percentage value transfers for reporting and eligibility tracking.

LegalServer

Contractor / Panel Attorney

maps to

Odoo CRM

res.partner (category_id)

1:many
Fully supported

LegalServer Contractor Module tracks panel attorneys and outside counsel with case assignments. In Odoo, contractors are res.partner records tagged with a Contractor category (using res.partner category). Case-to-contractor assignments map to crm.lead.partner_id where the contractor is flagged as type='contractor' rather than type='contact'.

LegalServer

Document / Attachment

maps to

Odoo CRM

ir.attachment

1:1
Fully supported

LegalServer documents attached to cases and contacts migrate to Odoo's ir.attachment table linked to crm.lead or res.partner records. File names, dates, and original storage paths are preserved in the attachment metadata. Large files (over 25MB) may require Odoo file storage configuration adjustments.

LegalServer

Prescreen / Intake

maps to

Odoo CRM

crm.lead (stage_id)

1:1
Fully supported

LegalServer prescreens and intake records are Cases created before a full matter is opened. These migrate to Odoo crm.lead with a dedicated intake stage (New, Qualification, etc.) mapped from LegalServer's prescreen status. LegalServer intake form responses stored as custom fields on the lead record.

LegalServer

Process / Profile Configuration

maps to

Odoo CRM

No equivalent (metadata only)

1:1
Fully supported

LegalServer dynamic processes, forms, and profiles define the structure of cases, contacts, and workflows. These are configuration metadata, not data records. FlitStack exports the process and profile definitions as JSON for Odoo Studio or developer reference, but the configuration must be rebuilt in Odoo using Studio or custom modules.

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.

LegalServer logo

LegalServer gotchas

High

Dynamic vs static contact record split

High

v2 API 100-record hard cap on all result sets

Medium

Custom fields on versioned subtables require exact path mapping

Medium

Grant billing types require pre-migration decision on deduction logic

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

  • LegalServer API pagination cap at 100 records forces chunked extraction

    LegalServer Core API v2 limits each response to a maximum of 100 results per request. Any migration involving more than 100 contacts, organizations, or cases requires implementing pagination logic using offset or cursor-based token handling across multiple API calls. This affects migration audit time and export sequencing. FlitStack implements paginated extraction loops with retry logic for timeout responses, but large LegalServer instances with 50,000+ records may see extended extraction phases. We recommend batching by date range or case status to parallelize the export where LegalServer's API allows filtered requests.

  • LegalServer N:N case-contact relationships collapse to single partner_id on crm.lead

    LegalServer allows a Contact to be associated with N Cases and a Case to have N Contacts simultaneously — a true many-to-many relationship. Odoo CRM crm.lead has a single partner_id field (Many2one) pointing to the primary res.partner. Secondary case contacts do not have a native Odoo CRM field. We migrate the most-relevant contact as the primary partner_id and flag additional contacts as custom partner_id records linked by tag. If your organization relies on tracking every attorney-contact relationship per case, Odoo Studio or a custom module for lead-partner junction objects is required post-migration.

  • Grant billing types and poverty percentages require Odoo custom field setup before data lands

    LegalServer's grant management and poverty assessment are core to its value for legal aid organizations, but Odoo CRM has no native fields for these concepts. A Flat Hourly Rate grant in LegalServer deducts from a fund balance when attorneys log time; Odoo timesheets track hours without grant linkage. Before migration, your Odoo admin (or our team) must create x_grant_billing_type (selection), x_grant_balance (monetary), and x_poverty_percentage (float) fields on crm.lead and res.partner. Migration cannot complete without these fields in place.

  • LegalServer custom matter fields are module-scoped; Odoo custom fields apply per model

    LegalServer's Custom Matter fields exist under a specific module scope (Case Data > Custom Matter, Outreach > Custom Outreach). Odoo custom fields attach to a specific model (crm.lead, res.partner) without module scoping. If your LegalServer setup uses multiple custom field profiles for different case types, all custom matter fields migrate to the same Odoo model, potentially requiring Odoo tags or stage-based visibility rules to differentiate them. We map each LegalServer custom field to its corresponding Odoo model and flag any field-type incompatibilities (e.g., LegalServer duration fields must become char in Odoo).

  • LegalServer document attachments re-upload to Odoo's filestore

    LegalServer stores documents attached to cases and contacts in its own proprietary file storage system outside the Odoo target database. Odoo CRM uses ir.attachment records linked to its PostgreSQL-backed filestore for all attachments. File names, creation timestamps, and attachment relationships migrate faithfully, but all files must be re-uploaded to Odoo's filestore during migration. Large files exceeding 25MB or high-volume document libraries may require Odoo filestore storage capacity planning and configuration adjustments. Inline images embedded in LegalServer notes are extracted, processed, and rehosted as Odoo attachments linked to the appropriate res.partner or crm.lead record.

Migration approach

Six steps for a successful LegalServer to Odoo CRM data migration

  1. Inventory LegalServer modules and custom field scopes

    FlitStack audits your LegalServer configuration via API and admin access to catalog all active modules (Cases, Contacts, Organizations, Grants, Contractors, Timekeeping), custom field definitions under each module scope (Custom Matter, Custom Outreach, Custom Timekeeping), and lookup list values used in billing types, case types, and poverty assessments. This inventory drives the Odoo field creation plan and identifies any LegalServer fields with no Odoo equivalent that will require custom field setup before migration.

  2. Create Odoo custom fields matching LegalServer custom matter and outreach field schemas

    Based on the LegalServer field inventory, we create the corresponding Odoo custom fields on crm.lead (for case/matter data), res.partner (for contact and poverty data), and account.analytic.line (for timekeeping). We use Odoo Studio in the target database or direct SQL for Community edition where Studio is unavailable. Field types map: LegalServer bool → Odoo boolean, lookup/lookup_custom → selection, duration → char, text/textarea → text. Billing type and poverty percentage fields are created as selection and float respectively.

  3. Extract LegalServer data via paginated Core API with chunked writes to Odoo

    FlitStack runs paginated extraction against LegalServer's Core API v2, handling the 100-record cap per request. We extract Contacts, Organizations, Cases, Grants, Contractors, and Timekeeping entries in separate API calls, preserving foreign-key relationships (contact-to-case, organization-to-contact) for reconstruction in Odoo. For each record type, we write to Odoo via xmlrpc/jsonrpc in migration batches of 500 records, with rollback snapshots at each batch boundary.

  4. Resolve staff-to-user mapping and partner deduplication

    LegalServer staff assignments on cases and timekeeping entries resolve to Odoo res.users by email address. Unmatched staff members are flagged and assigned to a fallback Odoo user or held for creation. LegalServer Contact and Organization records that represent the same entity (based on shared email domain or explicit linking) are deduplicated into single res.partner records with the Contact as the primary name.

  5. Run sample migration with field-level diff and validate partner/lead relationships

    A representative slice of LegalServer records — typically 100–500 spanning contacts, organizations, cases, and a few timekeeping entries — migrates first. We generate a field-level diff comparing LegalServer source values against Odoo destination values for all mapped fields. Partner-to-lead relationships (primary contact, secondary contacts by tag) are validated against the original LegalServer N:N associations. Grant billing type and poverty percentage values are spot-checked for accuracy before the full run commits.

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

    The full LegalServer dataset migrates to Odoo CRM with all custom fields populated. A delta-pickup window of 24–48 hours captures any LegalServer records created or modified during the migration window. FlitStack maintains an audit log of every record operation (create, update, link) with source LegalServer ID and destination Odoo ID. One-click rollback is available if reconciliation fails. Post-migration, document templates and automations remain in LegalServer and require Odoo Studio rebuild using the exported workflow definitions.

Platform deep dives

Context on both ends of the pair

LegalServer logo

LegalServer

Source

Strengths

  • Built-in grant management tools with billing type deduction logic for funder compliance reporting
  • Highly configurable dynamic processes, forms, and profiles without requiring technical skills
  • Online client intake and prescreen forms with rules-based triage and poverty level assessment
  • Active community support via site administrator listserv and free weekly trainings
  • No licensing fees or third-party app dependencies — fully hosted SaaS model

Weaknesses

  • Interface described as visually outdated with a clunky dropdown-heavy navigation pattern
  • v2 API caps all multi-record results at 100 with no cursor pagination, slowing bulk extraction
  • Dynamic Contact records require a two-step add-to-case workflow that creates friction for intake staff
  • Document templates must be manually recreated on each environment transition (demo to live)
  • No public pricing page — subscription tiers and per-user costs are opaque without a sales conversation
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 LegalServer 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

    LegalServer: Not publicly documented; v2 APIs enforce a 100-result hard cap per request regardless of page size.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

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

Book a free 30 minute consultation

Most LegalServer-to-Odoo CRM migrations complete in 48–72 hours of clock time for under 50,000 records. Larger setups with 500,000+ records, multiple custom matter field scopes, or complex grant billing configurations extend to 5–7 days. The LegalServer Core API's 100-record pagination cap adds extraction time for large datasets — we parallelize by module (Cases, Contacts, Grants) to reduce total API call rounds. Odoo custom field creation and partner deduplication are the longest planning steps before migration runs.

Adjacent paths

Related migrations to explore

Ready when you are

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