CRM migration
Field-level mapping, validation, and rollback between Wyvern Magic and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Wyvern Magic
Source
Odoo CRM
Destination
Compatibility
10 of 12
objects map 1:1 between Wyvern Magic and Odoo CRM.
Complexity
CModerate
Timeline
3-5 weeks
Overview
Moving from Wyvern Magic to Odoo CRM is a platform migration that also restructures how deal management and pipeline configuration work. Wyvern Magic stores Deals with a tenant-configurable pipeline model; Odoo CRM uses a stage kanban tied to its crm.team and crm.stage records that must be configured before any Opportunity import. We extract the active pipeline definition from Wyvern Magic, create the matching Odoo CRM pipeline with stage names, sequence order, and probability values, then migrate deal records into the correct stage. Activity history (calls, emails, meetings, notes) migrates as CRM log note records linked to the parent Contact or Opportunity, preserving timestamps and owner assignments. Custom objects and custom properties require pre-creation of the Odoo model schema before any data import. Workflows, marketing automations, and reporting configurations do not migrate; we deliver a written inventory of these for the customer to rebuild in Odoo's studio or with a certified Odoo partner.
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 Wyvern Magic 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.
Wyvern Magic
Contact
Odoo CRM
Contact
1:1Wyvern Magic Contacts map directly to Odoo CRM Contacts (res.partner with customer_rank set to 1). Standard fields (name, email, phone, street, city, country) migrate as typed fields on res.partner. Custom contact properties from Wyvern Magic (such as industry classifications or custom rating fields) are mapped to custom Char, Selection, or Float fields on the res.partner model that we pre-create via Odoo's Settings > Technical > Models interface before migration. Owner email from Wyvern Magic maps to the user_id field on the Odoo partner record.
Wyvern Magic
Company
Odoo CRM
Company
1:1Wyvern Magic Company records map to Odoo CRM Company records (res.partner with customer_rank set to 0 and is_company = True). The Wyvern Magic domain field maps to the website field on res.partner. We create the Company records before Contact import so that the child Contacts can reference the parent Company via the parent_id field on res.partner. Employee count, industry, and any custom company fields migrate as typed custom fields on the res.partner model.
Wyvern Magic
Deal
Odoo CRM
Opportunity
1:1Wyvern Magic Deals map to Odoo CRM Opportunities (crm.lead with type = 'opportunity'). The Wyvern Magic dealstage property maps to the stage_id field on crm.lead, which references a crm.stage record. The pipeline assignment from Wyvern Magic maps to a crm.team record that we create and configure before migration. Deal amount, close date, and probability migrate to expected_revenue, date_closed, and the probability field on the Opportunity.
Wyvern Magic
Lead
Odoo CRM
Lead
1:1Wyvern Magic Lead records map to Odoo CRM Lead records (crm.lead with type = 'lead'). Lead status, lead source, and any custom lead scoring fields migrate to the crm.lead fields priority, source_id (via crm.lead.source), and a custom float field for imported lead score values. Owner assignments migrate via user_id on crm.lead by email lookup against Odoo User records.
Wyvern Magic
Pipeline
Odoo CRM
crm.team + crm.stage
lossyWyvern Magic pipeline definitions (stage names, probabilities, stage order) are extracted during discovery and recreated in Odoo CRM as crm.team records (one per pipeline) with corresponding crm.stage records (stage_ids on the team). We set sequence values to match Wyvern Magic's stage ordering and probability percentages on each stage. This configuration step is required before any Deal or Opportunity records can be imported.
Wyvern Magic
Activity (calls, emails, meetings, notes, tasks)
Odoo CRM
CRM Log Note + Calendar Event
1:1Wyvern Magic Engagement records (email, call, meeting, note, task) migrate to Odoo CRM as crm.lead log notes (mail.message with model = 'crm.lead' and sub_type = 'crm.lead_msg_act') for activities attached to Leads or Opportunities, and as mail.message records linked to res.partner for activities attached to Contacts. Call subtype, duration, and disposition map to custom fields on the log note record. Meeting activities create crm.calendar.event records with start_datetime, stop_datetime, and attendee_ids preserved. All activity timestamps and owner assignments migrate directly.
Wyvern Magic
Owner/User
Odoo CRM
User
1:1Wyvern Magic Owner records map to Odoo User records (res.users) by email match. We extract every distinct owner referenced on Contact, Company, Deal, and Lead records and resolve them against the destination Odoo instance's User table. Any Wyvern Magic Owner without a matching Odoo User is placed in a reconciliation queue for the customer's admin to provision before record import resumes. Active/inactive status on the Odoo User controls read/write access post-migration.
Wyvern Magic
Custom Object
Odoo CRM
Custom Model
1:1Wyvern Magic custom objects with tenant-specific schemas migrate to Odoo custom models (ir.model records with a custom model definition). We inspect the Wyvern Magic custom object schema during discovery, create the matching Odoo model with the same field types (Char, Integer, Float, Date, Many2one, One2many, Text, Selection), and set up any lookup relationships to standard objects (res.partner, crm.lead) before importing data. Custom object records with required field constraints must have those constraints satisfied during import or the batch fails.
Wyvern Magic
Custom Property
Odoo CRM
Custom Field on Standard Model
1:1Wyvern Magic custom fields on standard objects (Contacts, Companies, Deals, Leads) migrate to Odoo custom fields on the corresponding Odoo model (res.partner for Contacts and Companies; crm.lead for Leads and Opportunities). We use Odoo's Settings > Technical > Fields interface to pre-create each custom field with the correct type (Char, Integer, Float, Selection, Date, Datetime, Text, Many2one) inferred from the Wyvern Magic property type during the discovery type-inference step.
Wyvern Magic
Tag/Label
Odoo CRM
CRM Tag
lossyWyvern Magic tags applied to Contacts, Deals, and Companies migrate to Odoo CRM tags (crm.tag records) and are associated to the res.partner and crm.lead records via the crm.tag.rel many-to-many table. Multi-value tag arrays from Wyvern Magic are flattened into multiple crm.tag entries per record. Tag names and tag colors (if stored in Wyvern Magic) are preserved as tag_name and color fields on the crm.tag record.
Wyvern Magic
Attachment (file reference)
Odoo CRM
Document (ir.attachment)
1:1Wyvern Magic attachments stored with URL references or file export are migrated as ir.attachment records linked to the parent res.partner or crm.lead record. The attachment name, URL, and associated record reference migrate directly. Large file attachments may require a separate file-migration pass after the record migration, depending on Odoo's attachment storage configuration (file store vs database storage) and the customer's file size limits.
Wyvern Magic
Reporting/Analytics
Odoo CRM
Not migrated
1:1Historical analytics, dashboards, and report configurations from Wyvern Magic do not migrate. Odoo provides a native CRM dashboard and reporting tool (crm.forecast.report and custom Pivot/Graph views) that the customer configures post-migration. We deliver a written summary of the reporting structure in Wyvern Magic (report types, fields used, filter logic) as a reference guide for rebuilding in Odoo.
| Wyvern Magic | Odoo CRM | Compatibility | |
|---|---|---|---|
| Contact | Contact1:1 | Fully supported | |
| Company | Company1:1 | Fully supported | |
| Deal | Opportunity1:1 | Fully supported | |
| Lead | Lead1:1 | Fully supported | |
| Pipeline | crm.team + crm.stagelossy | Fully supported | |
| Activity (calls, emails, meetings, notes, tasks) | CRM Log Note + Calendar Event1:1 | Fully supported | |
| Owner/User | User1:1 | Fully supported | |
| Custom Object | Custom Model1:1 | Fully supported | |
| Custom Property | Custom Field on Standard Model1:1 | Fully supported | |
| Tag/Label | CRM Taglossy | Fully supported | |
| Attachment (file reference) | Document (ir.attachment)1:1 | Fully supported | |
| Reporting/Analytics | Not migrated1:1 | Not 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.
Wyvern Magic gotchas
Hierarchical calendar approval workflows don't map to flat calendars in modern CRMs
Sponsorship and event objects don't have standard equivalents in most CRMs
Email metrics history is denormalized into contact records
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 Wyvern Magic tenant audit
We audit the source Wyvern Magic tenant across object types (Contacts, Companies, Deals, Leads, custom objects), active pipeline definitions, custom property schemas, engagement volume (emails, calls, meetings, notes, tasks), owner count, and tag taxonomy. We also identify any tier-gated export restrictions that require a Wyvern Magic plan upgrade before data extraction. The discovery output is a written migration scope document with record counts per object, a preliminary field map, and an Odoo edition recommendation (Community for cost-sensitive migrations, paid plans if the customer needs the Odoo Discuss module, VoIP integration, or advanced forecasting).
Odoo schema pre-creation and pipeline configuration
We install Odoo CRM in the destination instance and configure the pipeline structure before any data moves. This includes creating crm.team records (one per Wyvern Magic pipeline), creating crm.stage records with correct sequence values and probability percentages matched to the Wyvern Magic stage definition, configuring lead prefix and name formatting rules in Settings, and creating custom fields on res.partner and crm.lead for any Wyvern Magic custom properties. Custom Odoo models for any Wyvern Magic custom objects are created via the Technical > Models interface with field types inferred from the source schema during discovery. All schema work is validated in an Odoo test database before production migration begins.
Data extraction, cleansing, and transformation
We extract all Wyvern Magic records via the platform's REST endpoints, sequencing by dependency order: Companies first (as parent records for Contacts), then Contacts (with parent_id resolved to the Company record), then Leads, then Deals/Opportunities (with stage_id resolved to the Odoo pipeline stage). Custom objects are extracted last. We run a data quality pass that identifies duplicate records (by email on Contacts, by company domain on Companies), fills missing required fields with defaults where appropriate, and flags records that cannot be imported without manual resolution. Activity history (calls, emails, meetings, notes, tasks) is extracted in a separate pass and held for the engagement migration phase.
Owner reconciliation and User provisioning
We extract every distinct Wyvern Magic owner email from Contact, Company, Deal, and Engagement records and match against the destination Odoo instance's res.users table. Any owner without a matching Odoo User goes to a reconciliation queue. The customer's Odoo administrator provisions the missing Users (with appropriate access rights per Odoo's access rights model) before record import resumes. This step is mandatory because user_id on res.partner and crm.lead is a required reference for activity attribution.
Production migration in dependency order
We run production migration in record-dependency order: Companies (res.partner is_company records) first, then Contacts with parent_id resolved, then Leads, then Opportunities with stage_id resolved to the Odoo pipeline, then custom object records. Activity history (calls, emails, meetings, notes, tasks) migrates after the primary record objects as mail.message and crm.calendar.event records linked to the parent crm.lead or res.partner by database ID. Each phase emits a row-count reconciliation report comparing extracted count, transformed count, and imported count. Migrations with over 200,000 activity records use Odoo's batch import with chunking to avoid request timeout errors.
Cutover, validation, and handoff
We freeze Wyvern Magic write access during cutover, run a final delta migration of any records modified during the migration window, then set the Odoo CRM instance as the system of record. We deliver a written Workflow and Automation Inventory documenting every Wyvern Magic workflow, ad booking rule, and marketing automation with a recommended Odoo alternative (Odoo Studio automation, CRM Activity Rules, or a scheduled action). We do not rebuild automations as Odoo Workflow or Studio automations inside the migration scope; that is a separate engagement or an Odoo partner task. We support a five-business-day hypercare window for reconciliation issues raised by the customer's team.
Platform deep dives
Wyvern Magic
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Moderate CRM migration. 4 of 8 objects need a mapping; the rest are 1:1.
Overall complexity
Moderate migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Wyvern Magic and Odoo CRM.
Object compatibility
4 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
Wyvern Magic: Not publicly documented.
Data volume sensitivity
Wyvern Magic 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 Wyvern Magic to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Wyvern Magic 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 Wyvern Magic
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.