CRM migration

Migrate from Pure Chart to Odoo CRM

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 logo

Pure Chart

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

83%

10 of 12

objects map 1:1 between Pure Chart and Odoo CRM.

Complexity

BStandard

Timeline

48–72 hours

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

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

Pure Chart logo

Pure Chart

What's pushing teams away

  • Per-office + per-user pricing stacks fast for mid-size practices: a 10-user single office runs ~$470/month before add-ons.
  • AI features (transcription, virtual receptionist, X-ray analysis) appear to be add-ons rather than universal inclusions — net price climbs with usage.
  • Vendor does not publish a public developer API portal — custom integrations require vendor engagement.
  • Smaller third-party reviewer footprint than Dentrix or Open Dental — less independent benchmarking.
  • Multi-location operators with established Carestream/Dolphin imaging stacks may face integration scoping versus dedicated dental imaging platforms.

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

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

maps to

Odoo CRM

res.partner

1:1
Fully supported

Pure 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

maps to

Odoo CRM

res.partner (company)

1:1
Fully supported

Pure 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

maps to

Odoo CRM

crm.lead (type=opportunity)

1:1
Fully supported

Pure 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

maps to

Odoo CRM

crm.team + crm.stage

1:1
Fully supported

Pure 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

maps to

Odoo CRM

crm.stage

1:1
Fully supported

Pure 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)

maps to

Odoo CRM

crm.activity + mail.message

many:1
Fully supported

Pure 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

maps to

Odoo CRM

ir.attachment + mail.message

1:1
Fully supported

Pure 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

maps to

Odoo CRM

res.users

1:1
Fully supported

Pure 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

maps to

Odoo CRM

ir.model + ir.model.fields

1:1
Fully supported

Pure 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

maps to

Odoo CRM

sale.order

1:1
Fully supported

Pure 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

maps to

Odoo CRM

crm.tag

1:1
Fully supported

Pure 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

maps to

Odoo CRM

crm.team

1:many
Fully supported

Pure 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.

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.

Pure Chart logo

Pure Chart gotchas

Medium

Pricing stacks per office plus per user — model the full bill before committing

Medium

AI tools may be add-ons rather than baseline

High

No public API documentation

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

  • Odoo lead-to-opportunity conversion runs through crm.lead.type and requires a sales team

    Odoo crm.lead records carry a type field set to 'lead' for unqualified prospects and 'opportunity' for active deals. When migrating Pure Chart deals as opportunities, FlitStack sets type='opportunity' directly — bypassing Odoo's native Convert to Opportunity wizard. However, Odoo's access control rules evaluate user_ids on crm.team when deciding which sales team owns the record; if no team membership is resolved from Pure Chart owner data, the record may land in a default team or be invisible to users. We resolve crm.team membership by matching Pure Chart owner email to Odoo res.users and inferring team assignment from the user's team membership list.

  • Custom fields require Odoo ir.model.fields definitions before data import runs

    Odoo enforces schema-on-write for custom fields — the ir.model.fields record must exist before any data containing that field can be inserted via XML-RPC. Pure Chart custom fields that have no direct Odoo equivalent require a two-step process: first create the ir.model.fields definition in Odoo (including field type, label, and model assignment), then import the data. If custom fields reference a model that does not yet exist in Odoo, the import fails silently at the record level. FlitStack's migration plan identifies all custom field types from Pure Chart's schema export, creates the corresponding Odoo field definitions in the staging phase, and validates field existence before each import batch commits.

  • Multi-company contact associations collapse to parent_id on Odoo res.partner

    Pure Chart supports assigning one contact record to multiple companies simultaneously. Odoo res.partner uses a single parent_id field for company linkage — a contact can have only one parent company. When a Pure Chart contact has more than one associated company, FlitStack assigns the primary company (most recently modified, or as specified in the migration plan) as the parent_id and stores the secondary company associations as a note in the contact's description field or as custom Char fields for post-migration review. The relationship is not preserved as a native Odoo association model without custom junction table development.

  • Pipeline-to-crm.team mapping creates a new team for each Pure Chart pipeline

    Every Pure Chart pipeline maps to a distinct crm.team in Odoo so that stage definitions are correctly scoped. Teams with more than ten members require Odoo's sales team configuration; if the pipeline owner count exceeds Odoo's default team visibility settings, some users may not see their pipeline Kanban view until the team access rules are updated by an Odoo administrator. FlitStack delivers a crm.team setup manifest before migration data lands, listing each new team, its members, and the stage definitions required so that the Odoo admin can pre-create the structure.

  • Odoo stage IDs are database-specific and do not transfer between Odoo instances

    Odoo crm.stage records carry integer IDs generated at database creation time. When migrating to a new Odoo database (for example, moving from an Odoo.sh trial to a self-hosted production instance), the stage IDs in our mapping manifest will not match the destination IDs. FlitStack re-resolves stage_id values during the test migration run against the actual destination database, regenerating the manifest with correct IDs before the full migration commits. This re-resolution step adds approximately 15–30 minutes to the full migration window.

Migration approach

Six steps for a successful Pure Chart to Odoo CRM data migration

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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

Context on both ends of the pair

Pure Chart logo

Pure Chart

Source

Strengths

  • Transparent published per-office and per-user pricing.
  • Scales from solo to 600+ location DSOs in one product.
  • Bundled GPS timeclock, payroll, and door access modules beyond standard dental PMS scope.
  • Multi-location production analytics and dashboards.
  • Free 14-day trial without credit card.

Weaknesses

  • Costs stack as offices and users grow.
  • AI capabilities are largely add-ons rather than baseline inclusions.
  • No public API documentation.
  • Limited third-party reviewer corpus relative to entrenched dental PMS leaders.
  • Imaging integrations depend on vendor relationships — confirm against existing imaging stack.
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 Pure Chart 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

    Pure Chart: Not publicly documented — typical SaaS limits assumed and confirmed during scoping.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

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 consultation

Most Pure Chart to Odoo CRM migrations complete in 48–72 hours of clock time for under 50,000 total records. Larger setups with 500k+ records, more than five pipelines, or extensive custom field definitions extend to 5–7 days. The longest phase is schema preparation — creating Odoo ir.model.fields definitions and crm.stage records for every custom property and pipeline stage before data import begins. The test migration diff review adds 2–4 hours of your team's time before the full run commits.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Pure Chart.
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