CRM migration
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
Source
Odoo CRM
Destination
Compatibility
11 of 11
objects map 1:1 between Perfect Books and Odoo CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
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.
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 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
Odoo CRM
res.partner (type=contact)
1:1Perfect 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
Odoo CRM
res.partner (type=company)
1:1Perfect 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
Odoo CRM
crm.lead (type=opportunity)
1:1Perfect 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
Odoo CRM
crm.stage
1:1Perfect 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
Odoo CRM
stage_id (on crm.lead)
1:1Perfect 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
Odoo CRM
user_id (on crm.lead and res.partner)
1:1Perfect 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
Odoo CRM
ir.model.fields (custom field on target model)
1:1Any 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
Odoo CRM
ir.attachment
1:1Perfect 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
Odoo CRM
mail.message (internal note)
1:1Perfect 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
Odoo CRM
mail.activity
1:1Perfect 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
Odoo CRM
Odoo server action / automation rule (manual rebuild)
1:1Perfect 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.
| Perfect Books | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | res.partner (type=contact)1:1 | Fully supported | |
| Company | res.partner (type=company)1:1 | Fully supported | |
| Deal | crm.lead (type=opportunity)1:1 | Fully supported | |
| Pipeline | crm.stage1:1 | Fully supported | |
| Pipeline Stage | stage_id (on crm.lead)1:1 | Fully supported | |
| Owner | user_id (on crm.lead and res.partner)1:1 | Fully supported | |
| Custom Property | ir.model.fields (custom field on target model)1:1 | Fully supported | |
| File Attachment | ir.attachment1:1 | Fully supported | |
| Note | mail.message (internal note)1:1 | Fully supported | |
| Activity / Task | mail.activity1:1 | Fully supported | |
| Workflow / Automation | Odoo server action / automation rule (manual rebuild)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.
Perfect Books gotchas
Catalog website (perfectbooks.ca) is an Ottawa bookstore, not the Perfect Books legal accounting software
Three different software products carry similar branding
Trust account reconciliation conventions differ from non-legal accounting destinations
Time entry import requires rate-table reconciliation
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
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.
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.
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.
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.
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
Perfect Books
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 Perfect Books 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
Perfect Books: Not publicly documented.
Data volume sensitivity
Perfect Books 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 Perfect Books to Odoo CRM migration scoping. Not seeing yours? Book a call.
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 consultationAdjacent paths
Other ways to leave Perfect Books
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.