CRM migration
Field-level mapping, validation, and rollback between Crank CRM and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Crank CRM
Source
Odoo CRM
Destination
Compatibility
9 of 12
objects map 1:1 between Crank CRM and Odoo CRM.
Complexity
BStandard
Timeline
4-6 weeks
Overview
Moving from Crank CRM to Odoo CRM is a migration from a demo-recording platform with optional CRM add-ons to a purpose-built CRM embedded within a full ERP suite. Crank CRM's core entities are screen-sharing and demo session records; its Contacts, Pipelines, and Deals exist only when CRM modules are activated and paid for separately. Odoo CRM uses a Lead-to-Opportunity model with configurable pipeline stages, per-user access controls, and tight integration to Odoo Sales, Accounting, and Inventory modules. We resolve the schema audit first because the existence of CRM objects in Crank cannot be assumed until scoping confirms which modules are active. Demo session records and recording URL references are preserved as CRM Log Notes or linked Documents in Odoo, not as native pipeline objects. Workflows, automations, and Sequences do not migrate; we deliver a written inventory for the customer's Odoo admin to rebuild using Odoo Studio Actions and Automated Actions.
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 Crank CRM 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.
Crank CRM
Organization
Odoo CRM
Partner (res.partner)
1:1Crank CRM Organizations map to Odoo res.partner records with partner_type = company. The organization name, domain, and any associated session metadata become Partner fields. We preserve the organization identifier as an external reference field for dedupe validation during import. Parent-company relationships in Crank map to the res.partner parent_id field in Odoo if a hierarchy exists.
Crank CRM
Contact
Odoo CRM
Partner (res.partner) with contact_type = contact
1:1Crank CRM Contacts map to Odoo res.partner records with partner_type = contact, linked to their parent Organization Partner via the parent_id field. Email, phone, job title, and address fields migrate directly. Any custom fields detected during the schema audit are pre-created in Odoo via Odoo Studio metadata before Contact import begins. Demo interaction history from Crank is preserved as CRM Log Notes on the Contact record.
Crank CRM
Pipeline (if CRM module active)
Odoo CRM
CRM Team + Sales Process
lossyCrank CRM Pipelines map to Odoo CRM Teams (crm.team) and the corresponding Sales Process configuration. Each Crank Pipeline becomes a separate CRM Team in Odoo with its own stage sequence and team member assignment. We create the stage names and probabilities from the Crank stage definitions during Odoo configuration, noting that Crank stage probability percentages map to Odoo stage probability fields.
Crank CRM
Deal (if CRM module active)
Odoo CRM
Opportunity (crm.lead)
1:1Crank CRM Deals map to Odoo crm.lead records in the Opportunities view. Deal name becomes the Opportunity name, deal amount becomes the Expected Revenue field, and the Crank pipeline assignment determines the Odoo CRM Team and Sales Process. If Crank Deals have a contact or organization link, we resolve the Odoo partner_id reference before inserting the Opportunity record.
Crank CRM
Demo Session
Odoo CRM
CRM Log Note or Document attachment
lossyDemo sessions are Crank CRM's primary data entity and have no native Odoo equivalent. We preserve session metadata (timestamp, viewer count, duration, sharing method, recording URL) as a CRM Log Note attached to the related Contact or Organization Partner record in Odoo. The session_id is stored as an external reference. If Odoo Document app is active, recording URL references are stored as ir.attachment records linked to the Partner. Customers should confirm during scoping whether Odoo Document management is part of their target configuration.
Crank CRM
Usage Log
Odoo CRM
CRM Log Note (mail.message)
1:1Usage log entries from Crank CRM's API are mapped to Odoo mail.message records with subtype = comment, attached to the relevant Partner or Opportunity. Each log entry's timestamp, activity type (screen share, recording, email campaign), and outcome data become the note body text. We preserve the original usage event type in a custom field if Odoo Studio custom fields have been pre-created.
Crank CRM
Owner/User Assignment
Odoo CRM
User (res.users)
1:1Crank CRM account owners map to Odoo res.users records by email match. We extract all distinct owner references from Contacts, Organizations, Deals, and Demo Sessions and resolve them against the destination Odoo User table. Any owner without a matching Odoo User is held in a reconciliation queue; the customer's Odoo admin provisions missing Users before record import resumes. Active and inactive status is preserved from the Crank owner record.
Crank CRM
Custom Field (CRM module active)
Odoo CRM
Custom Field (ir.model.fields)
1:1Crank CRM custom fields on Contacts and Organizations migrate to Odoo custom fields on res.partner. We pre-create the Odoo field definition (field name, type, required flag, selection options for selection fields) via Odoo Studio or direct metadata before data import. Field type mapping follows: text properties become char or text fields, date properties become date fields, numeric properties become float or integer fields, and multi-select properties become selection fields in Odoo.
Crank CRM
Recording and Attachment
Odoo CRM
Ir.attachment
1:1Crank CRM demo recordings are stored on CrankWheel's external infrastructure and referenced by URL in the session record. We extract the recording URL, re-upload the file to Odoo's ir.attachment storage (or a linked document system if the customer has Odoo Document management configured), and link the attachment to the related Contact or Organization Partner record. The migration carries a dependency on recording URL availability at export time; expired or deleted recordings result in broken link notes rather than data loss in the Odoo Partner record.
Crank CRM
Stage (if CRM module active)
Odoo CRM
Stage (crm.stage)
lossyCrank CRM pipeline stages map to Odoo crm.stage records within the corresponding CRM Team's stage sequence. Stage name, display order, and probability percentage migrate from Crank to Odoo. Odoo requires at least one stage per team pipeline; if Crank has only a single stage, we create a default three-stage Odoo pipeline (New, Qualified, Won/Lost) to ensure the pipeline view renders correctly.
Crank CRM
Contact Address
Odoo CRM
Contact Address (res.partner)
1:1Crank CRM contact addresses map to Odoo address fields on res.partner (street, city, state, zip, country). Multi-address contacts in Crank (billing, shipping, office) map to Odoo's address type distinction via the type field on partner address records. We normalize international address formats during the transform phase to match Odoo's expected format before insertion.
Crank CRM
Activity Timeline Reference
Odoo CRM
Mail Activity
1:1Crank CRM engagement timestamps (demo start, demo end, last activity) are preserved as Odoo mail.activity records attached to the relevant Partner or Opportunity. Activity type is set to a custom type identifier derived from the Crank engagement type field. Activity date migrates from the Crank timestamp to the Odoo date_deadline and create_date fields to preserve the original sequence.
| Crank CRM | Odoo CRM | Compatibility | |
|---|---|---|---|
| Organization | Partner (res.partner)1:1 | Fully supported | |
| Contact | Partner (res.partner) with contact_type = contact1:1 | Fully supported | |
| Pipeline (if CRM module active) | CRM Team + Sales Processlossy | Fully supported | |
| Deal (if CRM module active) | Opportunity (crm.lead)1:1 | Fully supported | |
| Demo Session | CRM Log Note or Document attachmentlossy | Fully supported | |
| Usage Log | CRM Log Note (mail.message)1:1 | Fully supported | |
| Owner/User Assignment | User (res.users)1:1 | Mapping required | |
| Custom Field (CRM module active) | Custom Field (ir.model.fields)1:1 | Fully supported | |
| Recording and Attachment | Ir.attachment1:1 | Fully supported | |
| Stage (if CRM module active) | Stage (crm.stage)lossy | Fully supported | |
| Contact Address | Contact Address (res.partner)1:1 | Fully supported | |
| Activity Timeline Reference | Mail Activity1: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.
Crank CRM gotchas
No public bulk export API endpoint
Modular pricing means data scope is unknown until scoping
Recording storage is external to the CRM
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
Schema audit and CRM module detection
We connect to the Crank CRM API and enumerate all active objects, fields, and CRM modules for the target account. This step determines whether Contacts, Organizations, Pipelines, Deals, custom fields, and stage data exist before we commit to a migration scope. The audit output is a written schema map with object counts and field type definitions, shared with the customer before extraction begins. If no CRM modules are active, we adjust the scope to screen-sharing and contact data only and update the price estimate.
Destination Odoo configuration planning
We review the target Odoo database configuration: Odoo Online vs self-hosted, installed apps (CRM, Document, Project), existing CRM Teams, and any pre-existing custom fields. We document the custom field definitions that need to be created in Odoo before import (mapped from Crank CRM custom fields), the CRM Team and Stage configuration for each Crank Pipeline, and the contact-address normalization rules for international data. Odoo Studio or direct metadata deployment creates the custom fields in a Sandbox environment first for validation.
Sandbox migration and reconciliation
We run a full migration into a test environment using production-like data volumes. The customer reconciles record counts (Organizations in, Contacts in, Deals in, Demo Sessions logged), spot-checks 25-50 records against the Crank CRM source, and validates that recording URL references resolve correctly. Schema and mapping corrections happen in the test environment, not in production. The customer signs off the test results before we schedule the production migration window.
Owner reconciliation and User provisioning
We extract every distinct Crank CRM owner referenced on Contacts, Organizations, Deals, and Demo Sessions and match by email against the Odoo res.users table. Owners without a matching Odoo User go to a reconciliation queue. The customer's Odoo admin provisions any missing Users and confirms active or inactive status. Migration cannot proceed past this step because partner_id and user_id references must be valid at insertion time in Odoo.
Production migration in dependency order
We run production migration in dependency order: Partners (Organizations first as companies, then Contacts with parent_id resolved), CRM Teams and Stages (configuration records), Opportunities (with partner_id and team_id resolved), Demo Session metadata (as CRM Log Notes with external reference), Usage Logs (as mail.message records), and Recording attachments (as ir.attachment records). Each phase emits a row-count reconciliation report. We use Odoo's batch import API with rate-limit handling and exponential backoff for large record sets.
Cutover, validation, and automation inventory handoff
We freeze writes to Crank CRM during cutover, run a final delta migration of records modified during the migration window, then mark Odoo as the system of record. We validate record counts and spot-check key Accounts, Contacts, and Opportunities. We deliver the automation inventory document listing every Crank CRM workflow and automation rule with its trigger, conditions, and recommended Odoo equivalent. We do not rebuild automations in Odoo Studio inside the migration scope. We provide a one-week hypercare window for reconciliation issues raised by the sales team.
Platform deep dives
Crank CRM
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 Crank CRM 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
Crank CRM: Not publicly documented.
Data volume sensitivity
Crank CRM 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 Crank CRM to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Crank CRM 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 Crank CRM
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.