CRM migration
Field-level mapping, validation, and rollback between Proton and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Proton
Source
Odoo CRM
Destination
Compatibility
8 of 12
objects map 1:1 between Proton and Odoo CRM.
Complexity
BStandard
Timeline
2-4 weeks
Overview
Proton and Odoo CRM serve fundamentally different roles. Proton is a privacy-first encrypted productivity suite — email, calendar, contacts, drive, and password management built around end-to-end encryption and Swiss jurisdiction. Odoo CRM is a modular sales platform with pipeline management, lead scoring, and deep ERP integration. The migration is not a like-for-like CRM swap; it is a data extraction from Proton's encrypted ecosystem into Odoo CRM's structured object model. We extract Proton Contacts and map them to Odoo res.partner records, migrate Proton Calendar events to Odoo calendar.event, preserve Proton email message history as Odoo mail.message records linked to the relevant partner, and transfer Proton Drive files as ir.attachment records. Proton has no native deal pipeline, opportunity stage, lead scoring, or workflow automation — those Odoo CRM features require fresh configuration by the customer's admin post-migration. We deliver a written inventory of Proton labels and hide-my-email aliases for the admin to rebuild as Odoo tags and email aliases. Custom domain DNS cutover runs as a separate parallel workstream with the domain registrar.
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 Proton 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.
Proton
Contact
Odoo CRM
res.partner
1:1Proton Contacts extract as vCard format including name, email addresses (primary and aliases), phone numbers, physical addresses, and custom fields. They map to Odoo res.partner records. The primary email address becomes partner email; additional addresses populate email_normalized and are noted as aliases. We preserve the original Proton contact ID as an external ID field for reference. If the Odoo deployment uses the Contacts app separately from CRM, the same res.partner record is shared across both apps.
Proton
Contact organization data
Odoo CRM
res.partner (company_type = company)
lossyProton Contacts that include organizational affiliation (company name, job title, department) are split: the company name creates or matches a res.partner with company_type = company, and the individual contact becomes a child res.partner with company_id pointing to the parent. This mirrors Odoo's partner hierarchy model. If Proton stores only individual contacts without company linkage, we load them as individual res.partner records and leave company_id blank for the admin to link manually or via Odoo's contact deduplication.
Proton
Calendar event
Odoo CRM
calendar.event
1:1Proton Calendar events export via the Proton Calendar API with title, description, location, start/end datetime, reminders, attendees, and recurrence rules. They map to Odoo calendar.event. Attendees from Proton map to calendar.attendee records linked to the event and to corresponding res.partner records. Recurrence rules (RRULE) translate to Odoo's rrule format. We preserve the original event ID for timeline reconciliation.
Proton
Email message
Odoo CRM
mail.message + ir.attachment
1:1Proton Mail messages are decrypted client-side before export. We map the message body to Odoo mail.message linked to the sender's res.partner (WhoId) and optionally to a related crm.lead or project.task if the customer has a linking convention. Attachments migrate as ir.attachment records linked via mail.message. The Proton folder hierarchy (INBOX, Sent, custom folders) is preserved as a tag field on mail.message rather than as Odoo folder structure, since Odoo does not replicate a hierarchical email folder model natively.
Proton
Email folder and label
Odoo CRM
mail.tag
lossyProton Mail folders (hierarchical) and labels (tag-style with color coding) do not have a direct Odoo equivalent. We export the full taxonomy and deliver a mapping table that the customer's admin uses to create mail.tag records in Odoo. Proton labels that represent CRM-relevant categories (e.g., Customer, Prospect, High Priority) map to Odoo tags on crm.lead if applicable. Folder structure is noted as a read-only reference rather than a functional Odoo feature.
Proton
Hide-my-email alias
Odoo CRM
mail.alias configuration
1:1Proton Mail supports up to 10 hide-my-email aliases on Mail Plus plans. We extract these as separate address objects. Odoo CRM uses mail.alias on res.partner for incoming email-to-record routing. We deliver a configuration table mapping each Proton alias to a recommended Odoo mail.alias pattern, noting that Odoo's alias routing requires the incoming email server to be configured and that Proton aliases tied to a specific inbox may need forwarding rules set up at the DNS or mail relay level.
Proton
Drive file
Odoo CRM
ir.attachment
1:1Proton Drive files extract with end-to-end decryption client-side, preserving binary content and folder structure. They map to Odoo ir.attachment records. Folder structure maps to Odoo's document.model filesystem hierarchy if the Odoo deployment includes the Documents app; otherwise, files attach to the related res.partner or crm.lead record. Version history (up to 365 days on Workspace Standard and Premium) is included when within scope and migratable. Shared Proton Drive links become invalid at the destination and are documented in the handoff checklist.
Proton
Custom email domain
Odoo CRM
mail.domain alias + DNS configuration
lossyProton Workspace Standard supports up to 15 custom email domains; Workspace Premium supports up to 20. We extract the domain configuration and DNS records (MX, SPF, DKIM, DMARC) as a separate workstream. The customer updates DNS at their registrar to point to Odoo's mail server. Domain verification in Odoo requires TXT record confirmation. We deliver a domain cutover checklist and recommend running both Proton and Odoo email in parallel during the DNS propagation window to avoid message loss.
Proton
User and team member
Odoo CRM
res.users
1:1Proton organization members map to Odoo res.users. We extract user accounts, roles, and team membership and match by email address against the destination Odoo instance. Any Proton team without a matching Odoo user goes to a reconciliation queue for the admin to provision before the contact import phase. Proton's role-based access model (Admin, Member) maps partially to Odoo's internal and portal user types.
Proton
Proton Mail Professional plan aliases (legacy)
Odoo CRM
mail.alias configuration
1:1The deprecated Proton Mail Professional plan (no new sign-ups) supported multiple addresses per account. Existing Mail Professional subscribers migrate with their address inventory intact. We inventory every Proton address within scope and map each to a corresponding Odoo user or shared inbox alias. Any address that cannot map directly is flagged for the admin to resolve at the DNS level.
Proton
Password vault entry
Odoo CRM
External note documentation
1:1Proton Pass stores credentials in an end-to-end encrypted vault. We extract vault entries in a structured format and deliver them as a password inventory document. Odoo CRM does not have a native credential vault. The customer uses this document to provision credentials in their preferred password manager (1Password, Bitwarden, or similar). Proton's E2E encryption means the vault cannot be decrypted by any third party including FlitStack AI without the customer's key.
Proton
No equivalent object
Odoo CRM
crm.lead (lead/opportunity)
lossyProton does not have a CRM data model — there are no leads, deals, opportunity stages, or sales pipelines in the source platform. Odoo CRM's crm.lead object is the primary record type for the destination but has no source counterpart. We flag this clearly in the migration scope: crm.lead records are created as placeholder entries for the customer's admin to populate post-migration, or are seeded from a prospect list that the customer provides separately. We do not fabricate pipeline data that did not exist in Proton.
| Proton | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | res.partner1:1 | Fully supported | |
| Contact organization data | res.partner (company_type = company)lossy | Fully supported | |
| Calendar event | calendar.event1:1 | Fully supported | |
| Email message | mail.message + ir.attachment1:1 | Fully supported | |
| Email folder and label | mail.taglossy | Fully supported | |
| Hide-my-email alias | mail.alias configuration1:1 | Fully supported | |
| Drive file | ir.attachment1:1 | Fully supported | |
| Custom email domain | mail.domain alias + DNS configurationlossy | Fully supported | |
| User and team member | res.users1:1 | Fully supported | |
| Proton Mail Professional plan aliases (legacy) | mail.alias configuration1:1 | Fully supported | |
| Password vault entry | External note documentation1:1 | Fully supported | |
| No equivalent object | crm.lead (lead/opportunity)lossy | 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.
Proton gotchas
Storage quota enforcement blocks all write operations at limit
End-to-end encryption keys must be available at extraction time
Mail Professional plan deprecated — no new sign-ups, migration requires plan upgrade
Large mailbox migration via Easy Switch is slow and non-streaming
Custom domain DNS migration requires manual re-verification
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
Discovery and data inventory
We audit the source Proton account across all apps in scope: total Contact count, Calendar event count, email message volume and folder taxonomy, Drive file count and size, custom domain count, and hide-my-email alias count. We validate account storage against the current plan limit (1 GB Free, 15 GB Mail Plus, 1 TB Workspace Standard) and confirm key availability for E2E decryption. The discovery output is a written migration scope, data volume summary, and a pre-migration checklist including any storage reduction required before extraction begins.
Odoo environment review and schema design
We review the destination Odoo instance's installed apps, existing res.partner records, and CRM configuration. If crm.lead pipelines are not yet configured, we deliver a pipeline design worksheet for the customer to complete. We design the mail.tag taxonomy based on Proton label inventory, define the domain cutover sequence, and map Proton contact fields to Odoo res.partner field types (char, text, phone, email, address). Schema design is validated against the Odoo edition in use (Community, Standard SaaS, or Enterprise SaaS) since certain features are edition-gated.
Sandbox extraction and contact reconciliation
We run a Proton data extraction into a staging environment, validate record counts against the discovery inventory, and reconcile a 25-50 record sample against the source Proton account for field-level accuracy. For contact records, we verify name parsing, email deduplication, and company linkage. Calendar events are spot-checked for datetime accuracy across timezones. Any extraction failures or data quality issues are resolved before production migration begins. If the customer has an Odoo Sandbox available, we use it as the staging target for this validation pass.
DNS and domain verification preparation
We deliver the DNS cutover checklist including the target MX, SPF, DKIM, and DMARC records for the Odoo mail server. The customer updates DNS at their registrar and confirms propagation before the email migration phase begins. We recommend setting DNS TTL values to 3600 seconds 24 hours before cutover to accelerate propagation. The domain verification TXT record is applied to Odoo during this phase, and the customer confirms successful verification in Odoo's mail domain settings.
Production migration in dependency order
We run production migration in record-dependency order: res.users first (if provisioning new Odoo users), res.partner records next (with company_type hierarchy resolved), calendar.event records with attendee links, then mail.message records with ir.attachment for emails, then ir.attachment for Drive files, then mail.tag taxonomy. Each phase emits a row-count reconciliation report before the next phase begins. Proton email folder structure is written to a mail.tag field and the mapping table is delivered to the admin for Odoo tag creation.
Cutover, validation, and handoff
We freeze Proton writes during the cutover window, run a final delta migration of any records modified during the migration, then mark Odoo as the system of record. We deliver the automation inventory (label-based routing rules requiring Odoo server action rebuild), the shared link replacement checklist, and the DNS finalization confirmation. We support a 72-hour hypercare window for reconciliation issues. Odoo CRM pipeline configuration, lead scoring setup, and workflow automation remain the customer's admin responsibility and are outside our migration scope.
Platform deep dives
Proton
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between Proton and Odoo CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Proton and Odoo CRM.
Object compatibility
All 8 core objects map 1:1 between Proton and Odoo CRM.
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
Proton: Not publicly documented in official documentation.
Data volume sensitivity
Proton 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 Proton to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Proton 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 Proton
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.