CRM migration

Migrate from Perfect Books to Odoo CRM

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

Perfect Books logo

Perfect Books

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

100%

11 of 11

objects map 1:1 between Perfect Books and Odoo CRM.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Perfect Books stores contacts and companies as separate objects with a many-to-many relationship, and deals sit alongside them as their own top-level entity with owner, stage, and amount fields. Odoo CRM collapses this into a single-model architecture: leads and opportunities both live in crm.lead, and contacts, companies, and customers all resolve to res.partner. The migration therefore requires splitting Perfect Books' company records into res.partner entries with type 'company', mapping contact records to res.partner with type 'contact', and routing Perfect Books Deal objects into crm.lead where the stage_id references named stages stored in crm.stage. Owner assignments map to Odoo's user_id field via email-match resolution against the Odoo user list. Any Perfect Books custom fields that lack Odoo equivalents are created as custom fields via ir.model.fields before the migration run, so the data can map without loss. Workflows, automations, and email templates are not migrated — FlitStack exports their definitions as a rebuild reference for your Odoo admin. The migration engine pulls data from Perfect Books via API or CSV export, transforms field values, and bulk-loads through Odoo's XML-RPC interface or data import module, with a delta-pickup window capturing any in-flight changes during the cutover period.

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

Perfect Books logo

Perfect Books

What's pushing teams away

  • Multiple unrelated entities share the 'Perfect Books' name — confusion with Perfect Books bookstore (Ottawa), Perfect Practice (US legal), and Perfect Law (US legal) creates friction in vendor discovery and procurement.
  • Limited public review footprint — minimal G2/Capterra reviews and a Capterra Canada page that 404s make independent benchmarking difficult.
  • Pricing is not published publicly — every prospect must engage UK sales, slowing comparison against transparent SaaS legal-accounting alternatives.
  • Small market footprint relative to Clio, MyCase, and PracticePanther limits the developer ecosystem, third-party plugins, and community knowledge base.
  • Concentrated UK-region focus reduces fit for non-UK firms needing local tax regimes, currencies, or compliance workflows outside the platform's design assumptions.

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

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

Perfect Books

Contact

maps to

Odoo CRM

res.partner (type=contact)

1:1
Fully supported

Perfect Books contacts map directly to Odoo res.partner records with partner_type='contact'. The name field splits into FirstName and LastName, while email, phone, street, city, state, and country fields map to their Odoo counterparts on the res.partner model. Owner resolution via email match against the Odoo user list creates the user_id link in Odoo, assigning the responsible sales rep to each contact record during migration.

Perfect Books

Company

maps to

Odoo CRM

res.partner (type=company)

1:1
Fully supported

Perfect Books company records become Odoo res.partner rows with partner_type='company'. Company name maps to the name field, domain to website, industry to industry_id via value mapping against Odoo's selection list, and employee count to employee_count. Annual revenue maps to turnover. Parent-company hierarchy maps to parent_id on res.partner, establishing the single-company hierarchy that Odoo supports natively for organizational structures.

Perfect Books

Deal

maps to

Odoo CRM

crm.lead (type=opportunity)

1:1
Fully supported

Perfect Books deals map to Odoo crm.lead records where the lead_type field is set to 'opportunity'. The deal name becomes the opportunity name, amount maps to planned_revenue, close date to date_closed, and probability to probability. The stage maps to stage_id referencing the named crm.stage record.

Perfect Books

Pipeline

maps to

Odoo CRM

crm.stage

1:1
Fully supported

Perfect Books pipeline definition (the track itself) maps to a set of Odoo crm.stage records. Each named stage in Perfect Books becomes a named stage in Odoo with sequence ordering, won/lost flags, and fold status matching the original pipeline behavior.

Perfect Books

Pipeline Stage

maps to

Odoo CRM

stage_id (on crm.lead)

1:1
Fully supported

Perfect Books stage pick-list values map to named Odoo crm.stage records by value. Stage probability and forecast-category flags on each stage are applied from Odoo's stage configuration. Stage-entered timestamps are preserved as a custom datetime field on the crm.lead record.

Perfect Books

Owner

maps to

Odoo CRM

user_id (on crm.lead and res.partner)

1:1
Fully supported

Perfect Books owner reference resolves by matching the owner's email address to an existing Odoo user account. Unmatched owners are flagged before migration; your team either pre-invites them to Odoo or assigns their records to a fallback user. Owner history is preserved as a custom text field if available.

Perfect Books

Custom Property

maps to

Odoo CRM

ir.model.fields (custom field on target model)

1:1
Fully supported

Any Perfect Books custom property that lacks a native Odoo equivalent is created as a custom field on the relevant Odoo model before the migration run. Type-aware mapping applies: text to char, number to integer or float, pick-list to selection, date to date. Field labels are preserved verbatim.

Perfect Books

File Attachment

maps to

Odoo CRM

ir.attachment

1:1
Fully supported

Perfect Books file attachments on contacts, companies, or deals are migrated as Odoo ir.attachment records. The original filename, MIME type, and binary content are preserved in the Odoo filestore. Files are linked to the parent res.model and res.id reference — ir.attachment records with res_model set to 'crm.lead' for deal attachments or 'res.partner' for contact and company attachments — ensuring proper navigation and access control in the Odoo interface.

Perfect Books

Note

maps to

Odoo CRM

mail.message (internal note)

1:1
Fully supported

Perfect Books notes attached to records migrate as Odoo mail.message records with message_type='comment' and subtype='note'. The note body text and original create date are preserved on the mail.message record. Any file attachments previously linked to the note in Perfect Books are migrated as separate ir.attachment records and associated with the mail.message via the attachment_ids field on the message, maintaining the complete note context within Odoo's chatter system.

Perfect Books

Activity / Task

maps to

Odoo CRM

mail.activity

1:1
Fully supported

Perfect Books tasks and scheduled activities map to Odoo mail.activity records attached to the relevant crm.lead or res.partner. Activity type, due date, owner, and completion status are preserved. Calls and meetings are stored as activity records with their respective activity_type_id set.

Perfect Books

Workflow / Automation

maps to

Odoo CRM

Odoo server action / automation rule (manual rebuild)

1:1
Fully supported

Perfect Books workflows and automation rules cannot be migrated to Odoo because Odoo implements automation through server actions, automated actions, and action rules that require manual configuration. FlitStack exports the complete workflow definitions from Perfect Books as a reference document for your Odoo admin to rebuild in Studio or via code.

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.

Perfect Books logo

Perfect Books gotchas

High

Catalog website (perfectbooks.ca) is an Ottawa bookstore, not the Perfect Books legal accounting software

High

Three different software products carry similar branding

Medium

Trust account reconciliation conventions differ from non-legal accounting destinations

Medium

Time entry import requires rate-table reconciliation

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

  • Company-contact N:N relationships require partner category mapping

    Perfect Books stores contacts and companies as separate objects with a native many-to-many relationship table. Odoo collapses both into res.partner, where the primary company link is the parent_id field — a one-to-one construct. When a contact in Perfect Books is associated with multiple companies, Odoo has no native equivalent for that N:N mapping. We surface these N:N associations during planning and offer two remediation paths: assign a single primary company per contact and tag secondary associations using partner categories, or retain the full association list in a custom text field on the contact record for manual reconciliation after migration.

  • Perfect Books Deal objects route to Odoo crm.lead with no lead-versus-opportunity distinction

    Perfect Books Deal records have no separate concept of a 'lead' versus an 'opportunity' — deals exist as their own object regardless of qualification status. Odoo's crm.lead model supports both states, but the distinction is determined by the lead_type field and the presence of a partner_id link. When migrating all Perfect Books deals as opportunities, the lead_type is set to 'opportunity' and partner_id is populated from the linked contact or company. However, the logic that determines which Perfect Books records represent raw leads versus qualified deals must be expressed during migration planning — either by inspecting a status or stage field in Perfect Books, or by applying a business rule your team defines — because Odoo has no automated mechanism to retroactively split an already-imported crm.lead into a lead and an opportunity.

  • Odoo custom fields must exist in the database schema before migration data can map to them

    Unlike some CRMs that accept custom field data on import even if the field definition does not yet exist, Odoo requires custom fields to be defined in its schema (via Settings > Technical > Models > Fields in the UI, or via ir.model.fields records) before import data can target those fields by name. FlitStack AI creates all Perfect Books custom field equivalents in Odoo during the planning phase, but if any custom property is missed or renamed during that step, the corresponding data cannot be written to those fields during the migration run. We cross-check the custom field list against the Perfect Books export before committing to the migration plan, and any gaps trigger a schema correction step before data moves.

  • Odoo Community Edition enforces XML-RPC rate limits that can block large API-based migrations

    The Odoo External API (XML-RPC) has no published per-hour request limit in the Community edition, but real-world Odoo Community deployments throttle requests to approximately 5 per hour under heavy load. For migrations involving more than a few thousand records with many fields, this rate limit causes the migration to stall mid-run. FlitStack AI detects throttling during the migration and falls back to Odoo's data import module, which uses batch CSV upload via the web interface and bypasses the API rate limit entirely. This fallback is scoped at the same project price — the CSV import fallback is not an additional charge, but it does require that your Odoo user account has access to the data import module in your Odoo edition.

  • Perfect Books deal_score and hot_rating fields have no Odoo native equivalent

    Perfect Books may carry numeric or categorical scoring properties on deal records — a hot/cold/warm rating or a calculated deal_score — that sales teams use for prioritization. Odoo CRM has no built-in deal scoring or rating field on crm.lead. The values from these fields are preserved as custom fields in Odoo (x_deal_score as an integer, x_rating as a selection field), but Odoo's kanban pipeline view does not natively sort or color-code cards based on these values. Teams that rely on deal_score for pipeline prioritization should plan to configure kanban card coloring or list sorting rules in Odoo after migration using Studio or a custom view.

Migration approach

Six steps for a successful Perfect Books to Odoo CRM data migration

  1. Assess Perfect Books data model and define Odoo schema plan

    FlitStack AI begins every migration by auditing the Perfect Books export. We count records per object, inventory all custom fields and their data types, and document pipeline and stage configurations. Simultaneously, we map each Perfect Books object and field to its Odoo equivalent and generate a schema setup plan: which crm.stage records to create, which custom fields to define on crm.lead and res.partner via ir.model.fields, and which Odoo user accounts will receive the resolved owner assignments. This plan is delivered before any data moves so your Odoo admin can create the fields in the correct order.

  2. Extract data from Perfect Books via API or CSV export

    We extract the full dataset from Perfect Books using the platform's native export tools or API endpoints. Owner resolution happens at this stage: we match Perfect Books owner email addresses against the list of Odoo user accounts to pre-flag any unmatched owners. We also identify the N:N company-contact relationships and flag records where a contact is linked to multiple Perfect Books companies so the partner category workaround can be applied. The extracted data is staged in a migration sandbox for transformation.

  3. Create Odoo custom fields and stage records before import

    Before any data loads into Odoo, we create all required custom fields via ir.model.fields on the relevant models (crm.lead and res.partner). We also create the crm.stage records that correspond to the Perfect Books pipeline stages, setting sequence order, fold status, and the is_won flag for closed-won stages. This step ensures that when the migration engine writes data, all target fields already exist in the database schema — preventing the custom field data loss that occurs when Odoo rejects import rows that target undefined fields.

  4. Run a sample migration with field-level diff

    A representative subset of records — typically 100 to 500 spanning contacts, companies, deals, and attachments — migrates first. We generate a field-level diff comparing the source values in Perfect Books against the resulting values in Odoo. You review the diff to verify that custom field values mapped correctly, owner assignments resolved, stage names translated accurately, and that the N:N company-contact associations are represented in Odoo partner categories. No records are permanently committed until you approve the sample.

  5. Execute full migration with delta-pickup window and rollback readiness

    The full dataset migrates into the production Odoo instance. A delta-pickup window — typically 24 to 48 hours — runs concurrently, capturing any records created or modified in Perfect Books during the cutover period. All operations are logged in the FlitStack audit trail: record counts per object, transformation decisions, owner resolution outcomes, and any skipped or flagged records. If post-migration reconciliation identifies missing or misaligned data, one-click rollback reverts the Odoo environment to its pre-migration state so the issue can be corrected and the migration re-run.

Platform deep dives

Context on both ends of the pair

Perfect Books logo

Perfect Books

Source

Strengths

  • Legal-vertical specialism with time recording, billing, and trust accounting designed for law firm workflows.
  • Remote/hybrid-friendly access for distributed practice staff and external bookkeepers.
  • Companion Perfect Case product provides integrated case management plus accounting from a single vendor.
  • Established UK legal market presence with domain familiarity for established firms.
  • Time recording built into the core platform without separate add-on cost.

Weaknesses

  • Name confusion with multiple unrelated Perfect-branded products complicates procurement and vendor discovery.
  • Limited public review presence on G2 and Capterra makes vendor due diligence harder.
  • Pricing is not publicly published; every quote requires UK sales engagement.
  • Smaller market footprint than Clio, MyCase, and PracticePanther limits third-party integrations and community support.
  • UK-region focus reduces fit for firms outside the UK with different tax, trust-account, and compliance requirements.
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. 1 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 Perfect Books and Odoo CRM.

  • Object compatibility

    B

    1 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

    Perfect Books: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

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

Book a free 30 minute consultation

Most Perfect Books to Odoo CRM migrations complete in 48 to 72 hours of clock time for datasets under 50,000 records. The planning phase — auditing Perfect Books custom fields and creating the corresponding Odoo schema — typically takes 1 to 3 business days and runs in parallel with Odoo configuration. Larger setups with more than 500,000 records or complex multi-field custom property configurations extend to 5 to 7 days. The longest single step is usually mapping non-standard deal stage names to named Odoo crm.stage records and getting the sample migration diff approved before the full run commits.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Perfect Books.
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