CRM migration
Field-level mapping, validation, and rollback between Propeller CRM and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Propeller CRM
Source
Odoo CRM
Destination
Compatibility
8 of 12
objects map 1:1 between Propeller CRM and Odoo CRM.
Complexity
CModerate
Timeline
2-4 weeks
Overview
Moving from Propeller CRM to Odoo CRM is an archive reconstruction, not a live-API migration. Propeller CRM shut down on December 15, 2019 and no longer has an API, admin console, or support team. Any migration relies entirely on the data export produced at shutdown time. If that export was not requested before the February 15, 2020 deadline, the data may no longer be recoverable. We work with whatever archive exists, reconstruct record relationships from the exported CSV and JSON artifacts, and import into Odoo's Leads, Opportunities, and Contacts modules. Odoo CRM's dual lead-opportunity model differs from Propeller's single pipeline and deal approach, so we configure Odoo pipeline stages, assign custom fields for Propeller's original field names, and map owner assignments by email. We do not migrate activity logs (opens, clicks, replies, meeting events) because Propeller's Gmail extension did not expose them in the standard shutdown export. We do not migrate workflows, email sequences, or automation rules as code; these require manual rebuild in Odoo's workflow builder and require a separate effort after cutover.
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 Propeller 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.
Propeller CRM
Contact
Odoo CRM
Lead
1:1Propeller Contacts map to Odoo CRM Lead records. The Propeller Contact's name, email, phone, and company association migrate as Lead fields (partner_name maps to the related res.partner record created from the Company mapping). Propeller's contact record ID is preserved in a custom field x_propeller_id for audit. If the archived export includes contact status flags, we map them to Lead stage or priority in Odoo. The email field serves as the dedupe key.
Propeller CRM
Company
Odoo CRM
Partner (res.partner)
1:1Propeller Company records map to Odoo res.partner records with is_company=True. Company name becomes the partner name, domain becomes website, and any industry or employee-count fields map to Odoo custom partner fields. We resolve duplicates by company name during import scoping. Partner records are created before Contact import so that the many2one relationship to res.partner is satisfied at Lead insert time.
Propeller CRM
Deal
Odoo CRM
Opportunity (crm.lead)
1:1Propeller Deals map to Odoo CRM Opportunity (crm.lead records with type='opportunity'). Deal name becomes opportunity name, deal amount maps to Odoo's expected_revenue and a custom float field, and the Propeller contact association links to the corresponding Odoo Lead/Contact. Deal stage names are mapped to Odoo stage IDs during import (see Stage mapping object). Lost/won status from Propeller carries to Odoo's probability=0 (lost) or probability=100 (won) states.
Propeller CRM
Pipeline Stage
Odoo CRM
Stage (crm.stage)
lossyPropeller pipeline stages are fully custom per team. We map each Propeller stage name to an Odoo stage within the target pipeline, setting the probability percentage to match Propeller's stage order as closely as possible. Stages with no clear Odoo equivalent (e.g., 'verbal yes', 'awaiting finance') are flagged in the mapping document for customer confirmation before import. Stage ordering is preserved in Odoo by setting the sequence integer.
Propeller CRM
Pipeline
Odoo CRM
Pipeline (crm.team)
lossyPropeller supported a single deal pipeline. This maps to one Odoo crm.team record. If the archived export references pipeline-level settings (e.g., stage count, pipeline name), these configure the target team's name and stage sequence. Teams needing multiple Odoo pipelines for different business lines configure additional crm.team records as a post-migration step.
Propeller CRM
Email Campaign
Odoo CRM
Campaign (utm.campaign)
1:1Propeller Email Campaigns migrate to Odoo utm.campaign records as historical reference notes. Campaign name, associated contacts, and send date are preserved. The utm.campaign record links to the Odoo Contacts/Leads that were part of the campaign, but Odoo's mass mailing app (email marketing) is not migrated as a running system — only the historical campaign names and membership survive the migration.
Propeller CRM
Email Template
Odoo CRM
Email Template (mail.template)
1:1Propeller email templates with merge fields migrate to Odoo mail.template records. We map template body content to the Odoo template body field and resolve merge field names to Odoo's QWeb or Jinja2-style field interpolation syntax (e.g., {{object.partner_id.name}}). Customers review rendered output in Odoo before activating templates.
Propeller CRM
Owner
Odoo CRM
User (res.users)
1:1Propeller Owner records map by email address to Odoo res.users. We extract every distinct owner email referenced on Contact, Deal, and Campaign records in the archive. If a matching Odoo user exists (active or inactive), we link the record to that user. If no match exists, we create a placeholder user record flagged for the customer admin to activate and assign. Orphaned assignments — where the Propeller owner email has no corresponding Odoo user — are listed in the reconciliation report.
Propeller CRM
Activities (opens, clicks, replies, meetings)
Odoo CRM
Activity (mail.activity)
1:1Activity logs tracked by Propeller's Gmail extension — email opens, link clicks, reply events, and meeting scheduling — were not included in Propeller's standard shutdown data export. We flag this gap during scoping. We do not reconstruct per-contact activity timelines from external sources. The migration delivers no activity records. Customers who rely on historical engagement data for reporting or compliance must note this limitation before approving scope.
Propeller CRM
Custom Properties
Odoo CRM
Custom Fields (ir.model.fields)
lossyPropeller allowed custom field names on Contacts and Deals. We create matching custom fields in Odoo on the crm.lead (Lead/Opportunity) and res.partner models before migration. Field types are inferred from Propeller data (text fields, dates, numbers, picklists) and mapped to equivalent Odoo field types. Any picklist values in Propeller are created as selection options on the Odoo custom field. Customers confirm field type mapping during the scoping review.
Propeller CRM
Deal Stage History
Odoo CRM
Lead/Opportunity Stage
lossyPropeller tracked deal stage progression over time, but the archived export typically contains only the current stage per deal, not the full history log. We preserve the current stage name and last-modified date. The Odoo stage_id is set to the mapped current stage. If the archived export includes historical stage entries per deal, we create them as stage change log entries via a custom Odoo model or activity note.
Propeller CRM
Archived Attachments/Files
Odoo CRM
Attachment (ir.attachment)
1:1Any file attachments exported from Propeller (e.g., contact photos, deal documents) are imported as Odoo ir.attachment records linked to the corresponding Lead, Contact, or Opportunity record via res_model and res_id. We resolve the parent record ID at migration time and preserve the original filename and file type. Attachments without a resolvable parent record are listed in the orphaned attachments report.
| Propeller CRM | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | Lead1:1 | Fully supported | |
| Company | Partner (res.partner)1:1 | Fully supported | |
| Deal | Opportunity (crm.lead)1:1 | Fully supported | |
| Pipeline Stage | Stage (crm.stage)lossy | Fully supported | |
| Pipeline | Pipeline (crm.team)lossy | Fully supported | |
| Email Campaign | Campaign (utm.campaign)1:1 | Fully supported | |
| Email Template | Email Template (mail.template)1:1 | Fully supported | |
| Owner | User (res.users)1:1 | Fully supported | |
| Activities (opens, clicks, replies, meetings) | Activity (mail.activity)1:1 | Fully supported | |
| Custom Properties | Custom Fields (ir.model.fields)lossy | Fully supported | |
| Deal Stage History | Lead/Opportunity Stagelossy | Fully supported | |
| Archived Attachments/Files | Attachment (ir.attachment)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.
Propeller CRM gotchas
Platform shutdown — no active API or support
Activity history not included in standard export
Deal stage mapping requires manual review
Owner/user assignment requires remapping
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
Archive receipt and data quality assessment
We receive the Propeller CRM shutdown-era archive from the customer (CSV export, JSON dump, or whatever format was produced at the time of the February 2020 export request). We audit the archive for completeness across all eight supported object types: Contacts, Companies, Deals, Pipeline Stages, Email Campaigns, Email Templates, Owners, and any custom fields present. We flag any missing object types, assess duplicate rates per object, identify records with missing required fields (particularly contacts without email addresses), and produce a written data quality report before migration scope is confirmed.
Odoo CRM configuration and schema preparation
We configure the target Odoo CRM environment (Community or Enterprise edition) before any data loads. This includes creating custom fields on crm.lead and res.partner to hold Propeller-specific field names, configuring pipeline stages to match the Propeller stage list (with probability percentages), setting up crm.team records for each Propeller pipeline, and configuring lead stage and lead-to-opportunity convert rules. Schema changes are deployed in a test Odoo database first for validation.
Record dependency mapping and owner reconciliation
We map all record-to-record relationships in the archive: Contacts to Companies (via company name match), Deals to Contacts (via contact ID), Campaigns to Contacts (via membership records). We extract every unique owner email address from the archive and match against the destination Odoo User table. Unmatched owners are placed in a reconciliation queue; the customer admin provisions the corresponding Odoo users before migration resumes. This step gates the entire import because Owner (user) assignments are required on most standard CRM records.
Sandbox migration and reconciliation
We run a full test migration into a copy of the Odoo database or a staging environment. We validate record counts for each object type (Contacts in, Companies in, Deals in, Campaigns in), spot-check 25-50 records per object against the source archive for field-level accuracy, and confirm that stage mappings are producing the expected Odoo stage assignments. The customer reviews and approves the test results before production migration is scheduled. Any field mapping corrections, stage reassignments, or custom field additions happen here.
Production migration in dependency order
We run production migration in the following dependency order: res.partner (Companies), crm.lead Leads (Contacts without Deals), crm.lead Opportunities (Deals with resolved Contact and Stage mappings), utm.campaign (Campaigns), mail.template (Templates), ir.attachment (linked files), and custom field data on each record. OwnerId links are resolved at migration time using the reconciled User map. Each phase emits a row-count reconciliation report before the next phase begins. Activities are explicitly excluded per the scope agreement.
Cutover, validation, and rebuild handoff
We freeze the archive against further changes, run a final delta pass for any records modified during the migration window, then enable Odoo CRM as the system of record. We deliver a written inventory of what was migrated and what was not migrated, including a full list of Propeller Workflows and email sequences that cannot be transferred (these require manual rebuild in Odoo's CRM automation builder). We provide a one-week post-cutover support window to resolve reconciliation issues. Post-migration admin training, workflow rebuild, and ongoing Odoo configuration are outside standard migration scope and can be scoped as a separate engagement.
Platform deep dives
Propeller CRM
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Moderate CRM migration. 1 of 8 objects need a manual workaround.
Overall complexity
Moderate migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Propeller CRM and Odoo CRM.
Object compatibility
1 of 8 objects need a manual workaround.
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
Propeller CRM: Not applicable — platform shut down December 15, 2019.
Data volume sensitivity
Propeller 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 Propeller CRM to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Propeller 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 Propeller 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.