CRM migration

Migrate from Actionstep to Odoo CRM

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

Actionstep logo

Actionstep

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

100%

12 of 12

objects map 1:1 between Actionstep and Odoo CRM.

Complexity

BStandard

Timeline

48–72 hours of clock time

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Actionstep is a legal practice management platform centred on matters, participants, document management, and trust accounting workflows. Odoo CRM is a modular business suite that models leads as crm.lead records and contacts as res.partner entries, with pipeline stages defined by stage categories rather than matter types. The migration challenge is structural: Actionstep's matter-centric hierarchy (where participants, documents, and billing are sub-records of a matter) must be decomposed and distributed across Odoo's flat object model — leads become crm.lead rows, contact persons become res.partner records with an linked_id to the lead, and billing data is preserved as reference fields on the partner record. FlitStack AI reads Actionstep's REST API (respecting the 200-record pageSize limit and April-2024 rate limits), transforms matter data into crm.lead with the original matter type mapped to a custom Stage Category, and surfaces participant roles, document attachment URLs, and trust transaction references as Odoo custom fields. Workflow automations, document automation templates, and trust accounting rules cannot migrate — they require Odoo Studio rebuilds — but we export their definitions as a structured reference document. The migration runs in three passes: participants and contacts first (so res.partner IDs exist), then matters as leads (with responsible_user resolved by email match), then attachments re-uploaded to Odoo Documents.

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

Actionstep logo

Actionstep

What's pushing teams away

  • The workflow creation process is described as very complicated, with a steep learning curve that frustrates firms expecting more approachable automation tooling.
  • The CRM features are not well suited to legal practice needs, forcing firms to patch in external CRM tools rather than relying on Actionstep's native capabilities.
  • Reporting is described as not user friendly, with firms noting the standard accounting reports are limited and require significant effort to extract meaningful firm insights.
  • The configuration depth that makes Actionstep powerful also creates a higher training burden, with some reviewers feeling the product demands too much time investment relative to alternatives.
  • Integration complexity with non-native tools means firms investing heavily in custom integrations face significant rework when migrating away from Actionstep.

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

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

Actionstep

Matter

maps to

Odoo CRM

crm.lead

1:1
Fully supported

Actionstep matters map 1:1 to Odoo crm.lead records. The matter type (e.g., litigation, corporate, family) maps to a custom field (matter_type__c) and also influences the lead's stage category in Odoo. The matter's responsible user is resolved to an Odoo res.users record by email match before import.

Actionstep

Matter.participant (role = Client / Contact Person)

maps to

Odoo CRM

res.partner

1:1
Fully supported

Each Actionstep participant of type 'Client' or 'Contact Person' becomes a res.partner record. The participant's email address is the unique key for de-duplication. When a single participant appears on multiple matters, one res.partner record is created and linked to each relevant crm.lead via crm.lead.partner_id.

Actionstep

Matter.participant (role = Witness / Opposing Counsel / Other)

maps to

Odoo CRM

res.partner + res.partner.category

1:1
Fully supported

Non-client participants are imported as res.partner with the participant role stored as a res.partner.category tag (e.g., 'Opposing Counsel', 'Expert Witness'). Odoo partner categories must be pre-created in Settings > Contacts > Contact Tags before migration runs. Each distinct role in Actionstep becomes a corresponding Odoo contact tag; tag names must match the Actionstep role labels exactly for correct assignment during the import pass. Participants without a defined role receive a default 'General Contact' category tag.

Actionstep

Matter.stage

maps to

Odoo CRM

crm.stage

1:1
Fully supported

Actionstep matter stages (New, In Progress, On Hold, Closed Won, Closed Lost) map value-by-value to Odoo crm.stage records within the default pipeline. Stage names are preserved exactly; stage sequence order is carried over from Actionstep's step ordering. Custom stages in Actionstep are created as new crm.stage records in the target pipeline before migration, ensuring no stage mapping is skipped during the import pass.

Actionstep

Matter.description / Matter.notes

maps to

Odoo CRM

crm.lead.description

1:1
Fully supported

Matter-level description text migrates as plain text into crm.lead.description. Rich-text formatting in Actionstep notes is stripped to plain text during transformation — we flag any HTML-formatted notes before import. If a matter has no description or notes, the crm.lead.description field is left blank. Bullet points and numbered lists from Actionstep are converted to plain text with line breaks preserved.

Actionstep

Matter.document (attachment)

maps to

Odoo CRM

ir.attachment

1:1
Fully supported

Actionstep documents linked to a matter are downloaded and re-uploaded to Odoo's ir.attachment table, keyed to the corresponding crm.lead record via res_model='crm.lead' and res_id=<lead_id>. Binary file contents are base64-encoded. Inline images in notes are extracted and saved as separate attachments.

Actionstep

Matter.billing_line (time entry / invoice line)

maps to

Odoo CRM

account.move.line (reference only)

1:1
Fully supported

Actionstep billing lines and time entries are preserved as a custom JSON field on the crm.lead (billing_lines__c) rather than as live account.move records, because Odoo accounting requires a chart of accounts to be configured first. We surface the billing data for your accountant to create proper invoices in Odoo after go-live.

Actionstep

Matter.trust_transaction

maps to

Odoo CRM

Custom field on res.partner

1:1
Fully supported

Trust accounting balances and transaction history from Actionstep migrate as a custom text field (trust_balance__c) and a JSON log (trust_transactions__c) on the associated res.partner record. Odoo does not have native trust accounting — your finance team rebuilds this in Odoo Accounting using the exported reference data.

Actionstep

Matter.custom_data_field (custom matter fields)

maps to

Odoo CRM

ir.model.fields (custom) on crm.lead

1:1
Fully supported

Actionstep Builder custom data fields defined on matter types are created as custom ir.model.fields on crm.lead in Odoo Studio before migration. Field type mapping: text → char, number → float or integer, date → date, picklist → selection. All custom field definitions are captured from Actionstep's data collection schema during the audit phase.

Actionstep

Matter.custom_data_field (on participants)

maps to

Odoo CRM

ir.model.fields (custom) on res.partner

1:1
Fully supported

Custom fields attached to participant records in Actionstep are created as custom ir.model.fields on res.partner in Odoo Studio before migration begins. Participant-specific custom fields such as bar_number and jurisdiction are mapped to dedicated char fields with the original field label preserved for reference. Each custom field definition is captured from Actionstep's data collection schema during the audit phase, ensuring no participant-specific attributes are dropped during the transformation pass.

Actionstep

Matter.activity_log (calls, tasks, meetings)

maps to

Odoo CRM

mail.activity

1:1
Fully supported

Actionstep task and activity records linked to a matter are imported as Odoo mail.activity records, linked to the crm.lead by res_model='crm.lead'. Original activity dates, user assignments, and descriptions are preserved. The mail.activity.type is inferred from Actionstep's activity category. Calls, tasks, and meetings each map to the corresponding Odoo activity type; any unmatched activity categories are logged for manual type assignment after migration.

Actionstep

Matter.related_matter (linked matters)

maps to

Odoo CRM

Custom relation field on crm.lead

1:1
Fully supported

Actionstep allows matters to be linked in parent-child or reference relationships. In Odoo these map to a custom many2one field (related_matter_id__c) pointing to the related crm.lead. Circular references are flagged and resolved before the import commits. The relationship type (parent, child, related) is captured in a companion selection field for audit purposes.

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.

Actionstep logo

Actionstep gotchas

Medium

API is case-sensitive and requires exact casing

High

No system account access — API is user-centric

Medium

Rate limiting introduced April 2024 limits bulk export speed

High

Trust accounting transactions require special migration handling

High

Workflow automations are not API-exportable

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

  • Actionstep's matter-centric model decomposes into multiple Odoo records per matter

    In Actionstep, a single matter bundles participants, documents, billing lines, and activities under one matter ID. In Odoo, each of these is a separate table: crm.lead for the matter, res.partner for each participant, ir.attachment for each file, mail.activity for each activity, and account.move.line references for billing. The migration must decompose these relationships and re-link them by foreign key — a matter with ten participants and thirty documents becomes thirty-plus Odoo rows that must all resolve their res_id correctly before commit. If a participant email matches multiple Actionstep records, we create one res.partner and attach it to each crm.lead, but Odoo's partner_id on crm.lead accepts only one primary contact, so the rest surface via the lead's email_cc or as a note.

  • Odoo external API requires Enterprise plan on hosted Odoo

    The Odoo XML-RPC / JSON-RPC external API — which FlitStack AI uses to write crm.lead, res.partner, and ir.attachment records — is available on Odoo Enterprise and Odoo Online with the External API add-on enabled, but is not accessible on Odoo Community hosted on Odoo.sh or Odoo Online's free tier. If you are targeting an Odoo Community instance on Odoo.sh, the migration must be conducted via CSV import through Odoo's native Import tool or by using the database directly through PostgreSQL, which requires different handling and extended validation steps. We confirm your Odoo edition and API access before quoting.

  • Actionstep API rate limits introduced in April 2024 affect export pacing

    Actionstep introduced rate limiting across all public API endpoints in April 2024. The API uses a user-context model — every request runs under the authenticating user's security context — and does not support a system-level service account. Rate limits are not publicly disclosed but are enforced per-user per-minute. FlitStack AI paces exports at one page (up to 200 records) every 5 seconds and retries 429 responses with exponential back-off. Large matter bases (50,000+ records) may require 3–5 hours of export time just for the API read phase, which is accounted for in our timeline estimates. We strongly recommend creating a dedicated API user in Actionstep with read-only access to all matter types before migration begins.

  • Trust accounting and billing lines require post-migration rebuild in Odoo Accounting

    Actionstep's trust accounting module maintains client fund balances, trust ledgers, and multi-currency transaction logs as separate financial records linked to a matter. Odoo Accounting (account.move / account.account) handles invoicing and payments but has no native concept of a client trust account with per-matter ledger entries. We preserve all trust transaction data as JSON in custom fields on the res.partner record, but your accountant must create the appropriate chart of accounts entries and reconcile the opening balances in Odoo after go-live. This is a manual step — FlitStack provides a structured export of all trust transactions with matter reference, amount, currency, and date.

  • Actionstep Builder workflows and document automation templates do not transfer

    Actionstep's workflow automation is built in Builder using object models (as:system, as:action) and recipe-based triggers that fire on matter stage changes or participant events. These have no equivalent in Odoo — the trigger logic, conditions, and resulting actions must be rebuilt from scratch in Odoo Studio using server actions, automated actions, and CRM stage-based triggers. Similarly, Actionstep document automation templates (which pull matter and participant fields into Word documents) cannot migrate. We export a YAML-formatted reference file listing every Actionstep workflow with its trigger conditions, step sequence, and action definitions, so your Odoo consultant can rebuild them in Odoo Studio or using community automation modules.

Migration approach

Six steps for a successful Actionstep to Odoo CRM data migration

  1. Audit Actionstep data and confirm API access

    FlitStack connects to your Actionstep REST API using credentials from a dedicated migration user account. We run a discovery pass that enumerates all matter types, data collections, custom fields, participant roles, and document types across your Actionstep org. The audit output is a data map document that lists every source object, the record count per type, and the target Odoo model. We also confirm your Odoo edition and API availability during this phase so we can confirm whether the migration will use Odoo's XML-RPC API or CSV import. This step takes one to two business days and requires read-only API credentials for Actionstep.

  2. Design Odoo schema and pre-create custom fields

    Before any data is written to Odoo, our team creates the custom fields, partner categories, stage records, and tag definitions required by the object mapping. This includes crm.lead custom fields for matter_type__c, source_matter_id__c, billing_lines__c, and trust fields, plus res.partner custom fields for participant_role__c and bar_number__c. If you are on Odoo Community without external API access, we also prepare the CSV import templates with all column headers and pick-list values pre-populated so they are ready for Odoo's native import wizard. This step requires an Odoo admin user with Studio access to confirm field creation before we proceed.

  3. Export and transform data in dependency order

    The migration runs in four sequenced passes. Pass 1 extracts all Actionstep participants and writes them as res.partner records, building a participant_id lookup table keyed by email. Pass 2 extracts all matters and writes them as crm.lead records, resolving the responsible user by email match to Odoo res.users and linking the primary client participant via partner_id. Pass 3 uploads all document attachments to ir.attachment, keyed to the correct crm.lead by source matter ID. Pass 4 imports mail.activity records linked to the crm.lead rows created in Pass 2. Each pass validates foreign key integrity before the next pass begins — if a participant email cannot be resolved to a res.partner, the matter is flagged and the record held in a review queue rather than committed.

  4. Run sample migration with field-level diff

    A representative slice of 100–300 records — covering at least three matter types, ten participants, and a mix of attached documents and activities — migrates first. We generate a field-level diff report comparing the source Actionstep values against the destination Odoo values for every mapped field. You review the diff to confirm that matter types map correctly, participant roles are tagged as expected, and document attachment names match the source. Any field mapping errors discovered in the sample are corrected before the full migration runs. This step typically takes one to two business days.

  5. Full migration with delta-pickup window

    The full data set migrates using the validated mapping from the sample pass. During migration, your team continues working in Actionstep. A delta-pickup window of 24–48 hours captures any matters created or modified after the initial export snapshot. Audit logging records every record written, the source ID, the destination Odoo ID, and any records that received a fallback owner assignment. After the delta window closes, we run a reconciliation report comparing the final Odoo record count against the Actionstep source count by record type. One-click rollback is available if the reconciliation reveals discrepancies above your agreed tolerance threshold (typically 0.5% of records).

Platform deep dives

Context on both ends of the pair

Actionstep logo

Actionstep

Source

Strengths

  • Combines practice management, CRM, document automation, trust accounting, and billing in a single integrated platform.
  • Builder tool enables deep customization of matter types, data collections, and participant role structures per practice area.
  • Enhanced Billing Module supports complex legal billing including trust accounting and multi-currency reporting.
  • Cloud-native with mobile app access, eliminating on-premise server requirements for law firms.
  • Native iManage document management integration provides enterprise-grade document handling for firms requiring advanced DMS.

Weaknesses

  • CRM capabilities are considered underdeveloped and not well suited to legal practice relationship management.
  • Workflow automation creation has a steep learning curve and is frequently described as complicated by users.
  • Reporting lacks user-friendliness, with limited standard accounting reports compared to dedicated legal billing software.
  • The high degree of configurability creates a significant training burden for new users and admins.
  • Workflow automations cannot be exported programmatically, requiring manual reconstruction on the destination platform.
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. All 8 core objects map 1:1 between Actionstep and Odoo CRM.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across Actionstep and Odoo CRM.

  • Object compatibility

    A

    All 8 core objects map 1:1 between Actionstep and Odoo CRM.

  • 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

    Actionstep: Rate limiting introduced April 2024 — limits not publicly documented per endpoint; page size capped at 200 records per request.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

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

Book a free 30 minute consultation

Most Actionstep-to-Odoo migrations complete in 48–72 hours of clock time for up to 50,000 matter and participant records, assuming Odoo Enterprise API access is available. The longest single phase is typically the API export from Actionstep, which is rate-limited to roughly 200 records per request every 5 seconds — a matter base of 20,000 records can take 3–4 hours to export alone. Complex setups with 200,000+ records or extensive custom field schemas extend to 5–7 business days. Odoo schema setup (custom field creation in Odoo Studio) adds one to two days before the migration pass begins.

Adjacent paths

Related migrations to explore

Ready when you are

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