CRM migration
Field-level mapping, validation, and rollback between Pure Chart and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Pure Chart
Source
Odoo CRM
Destination
Compatibility
10 of 12
objects map 1:1 between Pure Chart and Odoo CRM.
Complexity
BStandard
Timeline
48–72 hours
Overview
Pure Chart stores CRM data in a standard per-record model — contacts with company links, deals attached to pipelines, and activity logs keyed by owner. Odoo CRM collapses leads and opportunities into a single crm.lead table, differentiating them by the type field, with pipeline stages managed through Odoo stage definitions rather than separate pipeline objects. We map every contact to res.partner, every deal to a crm.lead with type='opportunity', and preserve activity history against the correct record IDs. Odoo's team-based access control (crm.team) replaces Pure Chart owner scoping, requiring owner resolution by email match against Odoo internal users before records land. We surface workflow definitions for manual rebuild in Odoo's Automation menu and handle custom fields through Odoo's ir.model.fields interface. Data moves via Odoo's XML-RPC/Bulk API; the migration includes a delta-pickup window capturing in-flight changes during cutover and a one-click rollback if reconciliation fails. All imported records retain their original creation timestamps, and the migration audit log records every field transformation for compliance review. After the primary load, a second pass validates referential integrity between partner records and deals, flagging any orphaned entries for manual resolution before the system goes live.
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 Pure Chart 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.
Pure Chart
Contact
Odoo CRM
res.partner
1:1Pure Chart contacts map directly to Odoo res.partner. Partners of company type=false represent people; those with company=True represent organizations. The primary company link uses parent_id on res.partner — Pure Chart's primary-company flag drives which partner receives parent_id for proper hierarchy.
Pure Chart
Company
Odoo CRM
res.partner (company)
1:1Pure Chart companies map to res.partner with company=True. Parent-child hierarchies in Pure Chart map to Odoo's parent_id on res.partner — the top-level company in a hierarchy has no parent_id set. Multi-company networks collapse to a flat partner tree with the hierarchy preserved via parent links.
Pure Chart
Deal
Odoo CRM
crm.lead (type=opportunity)
1:1Pure Chart deals become Odoo crm.lead records with type='opportunity'. The crm.lead model carries all opportunity fields — name, planned_revenue, probability, date_deadline — in one record. Pipeline association is indirect via crm.team membership, which Odoo derives from the sales team assigned to the record.
Pure Chart
Pipeline
Odoo CRM
crm.team + crm.stage
1:1Pure Chart pipelines do not have a direct Odoo equivalent — each pipeline maps to a crm.team whose stage definitions (crm.stage) represent the pipeline stages. The crm.team record holds the sales team name and member list; the crm.stage records attached to that team define the Kanban columns visible in the pipeline view.
Pure Chart
Pipeline Stage
Odoo CRM
crm.stage
1:1Pure Chart stage names map value-by-value to Odoo crm.stage records scoped to the target crm.team. Stage probability values map to the probability field on each stage. Custom stage names in Pure Chart require new crm.stage records to be created in Odoo before data import begins.
Pure Chart
Activity (Call/Email/Meeting)
Odoo CRM
crm.activity + mail.message
many:1Pure Chart calls, emails, and meetings merge into two Odoo constructs: crm.activity holds the scheduled next activity (next_activity_id) and planned date, while mail.message stores the actual logged communication body with the original timestamp. Owner links map to Odoo res.users matched by email.
Pure Chart
Note / Attachment
Odoo CRM
ir.attachment + mail.message
1:1Pure Chart notes and file attachments map to Odoo ir.attachment records linked to the res.partner or crm.lead via the res_model/res_id pattern. Rich-text formatted notes in Pure Chart store as HTML in mail.message.body on the related record. Large attachments re-upload to Odoo's filestore under the attachment store path.
Pure Chart
Owner
Odoo CRM
res.users
1:1Pure Chart owner_id on every record resolves to Odoo res.users by email match. Unmatched owners are flagged before migration; their records receive a fallback user assigned during the migration plan phase. This prevents orphan records that would block Odoo record access rules from evaluating correctly.
Pure Chart
Custom Object
Odoo CRM
ir.model + ir.model.fields
1:1Pure Chart custom objects require new Odoo ir.model definitions created before migration begins. Each custom object becomes its own Odoo model; N:N associations between custom objects and standard objects map to Odoo's rel-style ir.property or explicit many-to-many columns defined in the model.
Pure Chart
Quote / Proposal
Odoo CRM
sale.order
1:1Pure Chart quotes attached to deals map to Odoo sale.order records linked to the crm.lead via the opportunity_id field. Odoo sale.order.line items require an existing product.product catalog in Odoo — we flag missing products before migration so they can be created or the quote lines stored as notes.
Pure Chart
Tag / Label
Odoo CRM
crm.tag
1:1Pure Chart tags migrate to Odoo crm.tag records and linked via crm.lead.tag_ids. Tags with no Odoo equivalent are created during migration setup. Tag names with special characters are sanitized to Odoo's name-cleaning rules for tag_id field compatibility in the target system.
Pure Chart
Campaign
Odoo CRM
crm.team
1:manyPure Chart campaigns that track deal sources map to crm.team as a sales-unit construct. If a campaign tracks marketing lists separate from sales pipeline, we store it as a crm.tag for reference and note that Odoo's native marketing automation apps handle list management separately in the marketing module.
| Pure Chart | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | res.partner1:1 | Fully supported | |
| Company | res.partner (company)1:1 | Fully supported | |
| Deal | crm.lead (type=opportunity)1:1 | Fully supported | |
| Pipeline | crm.team + crm.stage1:1 | Fully supported | |
| Pipeline Stage | crm.stage1:1 | Fully supported | |
| Activity (Call/Email/Meeting) | crm.activity + mail.messagemany:1 | Fully supported | |
| Note / Attachment | ir.attachment + mail.message1:1 | Fully supported | |
| Owner | res.users1:1 | Fully supported | |
| Custom Object | ir.model + ir.model.fields1:1 | Fully supported | |
| Quote / Proposal | sale.order1:1 | Fully supported | |
| Tag / Label | crm.tag1:1 | Fully supported | |
| Campaign | crm.team1:many | 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.
Pure Chart gotchas
Pricing stacks per office plus per user — model the full bill before committing
AI tools may be add-ons rather than baseline
No public API documentation
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
Data discovery and schema audit
FlitStack extracts all object records from Pure Chart via its export API: contacts, companies, deals, pipelines, activities, attachments, tags, and custom objects. We analyze the field inventory and flag custom field types, multi-value pick-lists, and N:N association tables. For Odoo, we inspect the target database's ir.model.fields and crm.team structure to identify which models and stage definitions already exist versus what must be created before import. The discovery output is a migration manifest listing every object, field, and mapping rule — reviewed by your team before any data moves.
Schema preparation in Odoo
We create all missing Odoo ir.model.fields definitions for custom properties identified in discovery. For each Pure Chart pipeline, we create a corresponding crm.team and its crm.stage records with stage names and probability values matching the source. Custom industry records, country and state entries, and utm.source definitions are added to the Odoo database in this phase. No data is written during schema preparation — this phase validates that every mapped field has a valid destination before the first import batch runs.
Owner and user resolution
Pure Chart owner_id values are matched against Odoo res.users by email address. FlitStack generates a user-resolution report listing every matched owner, unmatched owner, and the fallback user assigned for each gap. Your Odoo administrator reviews and approves the fallback assignments before the migration manifest is finalized. This step prevents records from landing in Odoo without a valid user_id — which would block Odoo's record access rules from evaluating correctly for those rows.
Test migration with field-level diff
A representative slice of 100–500 records — spanning contacts, companies, deals, and a sample of activities — migrates first. We generate a field-level diff comparing source values against Odoo destination values for every mapped field. You review the diff to confirm stage probability values, owner assignments, custom field population, and parent_id resolution for contact-company links. No records are deleted during the test migration; the diff report is your approval checkpoint before the full run commits.
Full data migration and delta-pickup cutover
The full migration runs against the Odoo production database: res.partner records first (companies then contacts), crm.lead records second, and activity logs third. A delta-pickup window of 24–48 hours captures any records created or modified during the cutover window. All operations are logged to a migration audit trail with source record ID, destination record ID, field name, and timestamp. If reconciliation fails, one-click rollback reverts all records created by the migration run without touching pre-existing Odoo data.
Platform deep dives
Pure Chart
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 Pure Chart 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
Pure Chart: Not publicly documented — typical SaaS limits assumed and confirmed during scoping.
Data volume sensitivity
Pure Chart 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 Pure Chart to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Pure Chart 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 Pure Chart
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.