CRM migration
Field-level mapping, validation, and rollback between Shark Byte CRM and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.
Shark Byte CRM
Source
Odoo CRM
Destination
Compatibility
9 of 12
objects map 1:1 between Shark Byte CRM and Odoo CRM.
Complexity
BStandard
Timeline
5-8 weeks
Overview
Shark Byte CRM and Odoo CRM serve different markets and carry fundamentally different data models. Shark Byte is a vertical CRM built for mechanical contractors and HVAC shops where the core object is the Estimate calibrated on $350M in historical service contracts across term buckets (1-3 year, 3-5 year, 10+ year). Odoo CRM is a module within the Odoo ERP suite using a standard Lead-and-Opportunity model with a custom crm.lead schema that supports custom fields. There is no publicly documented API for Shark Byte CRM, so we extract via CSV and direct file coordination with their team. We preserve the contract-term classification from Shark Byte Estimates as custom selection fields on Odoo's crm.lead or crm.opportunity, and we map Work Orders to Odoo Project Tasks with the timesheet app enabled. Shark Byte's mobile survey attachments, proposal PDFs, and service agreement documents migrate as Odoo attachments. We do not migrate the estimating engine itself or the pricing logic embedded in Shark Byte's contract-term templates. We deliver a written inventory of Shark Byte's custom workflows for the customer to rebuild in Odoo Studio or with an 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 Shark Byte 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.
Shark Byte CRM
Customer
Odoo CRM
res.partner
1:1Shark Byte Customer records (representing the end-client organization or homeowner for service work) map to Odoo res.partner records with partner_type set to 'contact' for the organization entity. Standard fields including company name, address, phone, and email map directly. The customer_id in Shark Byte becomes the Odoo partner's external_id for dedupe validation. We apply Odoo's partner deduplication on (email, website_domain) during import to prevent duplicate organization records.
Shark Byte CRM
Contact
Odoo CRM
res.partner (individual)
1:1Shark Byte Contact records (individual points of contact at each Customer site with name, phone, email, and role) map to Odoo res.partner records with partner_type set to 'contact' and parent_id referencing the linked organization partner. Role and title fields migrate to Odoo's function and title fields. We resolve parent_id references during import so that every Contact is correctly attached to its parent Organization partner, satisfying Odoo's partner hierarchy requirement.
Shark Byte CRM
Estimate
Odoo CRM
crm.lead (custom fields)
1:1Shark Byte Estimates are the core product object and include line items, labor rates, material costs, and contract-term classification (1-3 year, 3-5 year, 10+ year). We map Estimates to Odoo crm.lead records and create custom selection fields x_contract_term (for the term bucket), x_labor_rate, x_material_cost, and x_equipment_spec on the crm.lead model. The Estimate's total amount and line item count are stored as Odoo custom fields. We do not migrate the Shark Byte pricing engine itself; the customer documents their pricing logic for Odoo configuration post-migration.
Shark Byte CRM
Proposal
Odoo CRM
crm.lead + ir.attachment
1:1Shark Byte Proposals are generated from Estimates and include pricing, scope, and terms. Each Proposal record maps to an Odoo crm.lead capturing the proposal status (draft, sent, accepted, lost), estimated value, and linked customer. The Proposal PDF (if generated in Shark Byte) migrates as an Odoo ir.attachment linked to the crm.lead via res_model='crm.lead' and res_id set to the lead's ID. Proposal-to-Estimate linkage is preserved via the custom x_source_estimate_id field on the crm.lead.
Shark Byte CRM
Service Agreement
Odoo CRM
crm.lead (custom model)
1:1Shark Byte Service Agreements represent recurring maintenance contracts with 1-3 year, 3-5 year, and 10+ year term buckets. We create a custom Odoo model (x_service_agreement) inheriting from crm.lead via model inheritance, with fields for agreement_term, annual_value, start_date, end_date, and equipment_list. The crm.lead's name field stores the agreement title and the x_contract_term field captures the term bucket classification. Active and expired agreement status is preserved in the migration.
Shark Byte CRM
Work Order
Odoo CRM
project.task
1:1Shark Byte Work Orders track individual jobs dispatched to technicians with status, assigned technician, line items, and mobile survey attachments. We map Work Orders to Odoo project.task records within a dedicated Project record created during migration setup. Work order status (pending, in_progress, completed, cancelled) maps to Odoo task.stage_id with a stage sequence. Technician assignment migrates as task.user_id resolved against the User table by email. Work order line items migrate as task description notes or to a related sale.order if the Work Order feeds into a billing document.
Shark Byte CRM
Mobile Survey Attachment
Odoo CRM
ir.attachment
1:1Photos and site condition data captured via Shark Byte's mobile surveying tools are attached to Work Orders and Estimates. We extract all available attachments at original resolution from Shark Byte exports and create Odoo ir.attachment records linked to the corresponding project.task (for Work Orders) or crm.lead (for Estimates). Image format, compression, and EXIF metadata vary based on the source mobile device; we extract at the highest available fidelity and note that some images from older surveys may be compressed or missing EXIF data. This is documented in the migration validation report.
Shark Byte CRM
Proposal PDF
Odoo CRM
ir.attachment
1:1Shark Byte Proposal PDFs generated from Estimates are exported and attached to the corresponding crm.lead in Odoo via ir.attachment with res_model='crm.lead'. The PDF file name is preserved to indicate proposal version and date. If Shark Byte does not generate PDFs directly, we flag this and the customer generates proposals post-migration using Odoo's proposal template builder.
Shark Byte CRM
Custom Properties (Estimates)
Odoo CRM
crm.lead custom fields
lossyShark Byte CRM supports custom fields on Estimates and Service Agreements to capture industry-specific data like equipment specifications, refrigerant type, tonnage ratings, or contract classification. We create equivalent custom fields on the Odoo crm.lead model (x_equipment_type, x_refrigerant_type, x_tonnage_rating) using Odoo's web interface or XML data migration before importing Estimate data. Field type mapping (text to char, number to float, date to date) is validated during the Sandbox phase.
Shark Byte CRM
Custom Properties (Service Agreements)
Odoo CRM
x_service_agreement custom fields
lossyService Agreement custom fields for contract classification, equipment schedules, and compliance flags migrate to the x_service_agreement custom model. We create these fields during schema setup, validate type mapping in the Sandbox phase, and import the values during the main migration. Custom fields that reference other Shark Byte objects are resolved via the external_id lookup during import to maintain referential integrity.
Shark Byte CRM
Owner
Odoo CRM
res.users
1:1Shark Byte Owner records (technicians and sales reps) map to Odoo res.users by email address. Any Owner without a matching Odoo User is placed in a reconciliation queue for the customer to provision before record import. Inactive Owners in Shark Byte map to Odoo Users with active=False so that historical assignment is preserved without licensing impact.
Shark Byte CRM
Workflows / Automations
Odoo CRM
Not migratable
lossyShark Byte Workflows and automations are vertical-specific (service agreement renewal reminders, technician dispatch rules, estimate approval flows) and do not have a documented export mechanism. We deliver a written inventory of every active Shark Byte workflow including its trigger, conditions, actions, and recommended Odoo Automations or Studio action equivalent. Odoo Automations (the successor to server actions and scheduled actions) rebuild is outside the migration scope and requires the customer's Odoo admin or an Odoo partner.
| Shark Byte CRM | Odoo CRM | Compatibility | |
|---|---|---|---|
| Customer | res.partner1:1 | Fully supported | |
| Contact | res.partner (individual)1:1 | Fully supported | |
| Estimate | crm.lead (custom fields)1:1 | Fully supported | |
| Proposal | crm.lead + ir.attachment1:1 | Fully supported | |
| Service Agreement | crm.lead (custom model)1:1 | Fully supported | |
| Work Order | project.task1:1 | Fully supported | |
| Mobile Survey Attachment | ir.attachment1:1 | Fully supported | |
| Proposal PDF | ir.attachment1:1 | Fully supported | |
| Custom Properties (Estimates) | crm.lead custom fieldslossy | Fully supported | |
| Custom Properties (Service Agreements) | x_service_agreement custom fieldslossy | Fully supported | |
| Owner | res.users1:1 | Fully supported | |
| Workflows / Automations | Not migratablelossy | 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.
Shark Byte CRM gotchas
No publicly documented API for programmatic data export
Estimating templates and contract-term mappings are custom to the account
Mobile survey attachments may have inconsistent file formats
Small vendor footprint complicates support coordination during cutover
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 extraction coordination
We audit the source Shark Byte CRM environment across all primary objects: Customers, Contacts, Estimates, Proposals, Service Agreements, Work Orders, Attachments, and Custom Properties. We assess the volume of each object, the existence and structure of custom fields on Estimates and Service Agreements, the contract-term bucket distribution across Estimates and Agreements, and the attachment file types and sizes. We also identify which Shark Byte integrations the customer relies on (QuickBooks, Xero, Procore, Dropbox) for Odoo equivalent mapping. Because Shark Byte has no documented API, we coordinate directly with their team for CSV exports and file downloads, establishing a clear export schedule and data delivery format before migration planning begins.
Odoo schema design and custom field creation
We design the destination Odoo schema before any data moves. This includes creating custom selection fields for contract-term classification (x_contract_term with values 1-3yr, 3-5yr, 10+yr) on the crm.lead model, creating custom fields for equipment specifications and service history on crm.lead and x_service_agreement, configuring crm.lead stage values to match Shark Byte's pipeline stages, setting up a Project in the Project app for Work Order migration, and creating the x_service_agreement custom model inheriting from crm.lead. All custom fields are created in Odoo Studio or via XML data migration files before record import. We deploy this schema to the destination Odoo database and validate field existence before proceeding.
Sandbox migration and reconciliation
We run a full migration into an Odoo Sandbox environment (if available) or a staging database using production-like data volume. The customer's operations lead reconciles record counts (Customers in vs res.partner out, Estimates vs crm.lead, Work Orders vs project.task), spot-checks 25-50 randomly selected records against the Shark Byte source export, and validates that custom field values populated correctly on each object. The reconciliation report identifies any mapping corrections, missing attachments, or custom field gaps before the production migration begins.
Owner and user reconciliation
We extract every distinct Shark Byte Owner (technician, sales rep) referenced on Work Orders, Estimates, Proposals, and Service Agreements and match by email against the destination Odoo res.users table. Any Owner without a matching Odoo User is placed in a reconciliation queue for the customer to provision before record import. User provisioning is required at this stage because project.task.user_id and crm.lead.user_id are required references for task assignment and opportunity ownership. We also flag any inactive Owners in Shark Byte for Odoo User provisioning with active=False to preserve historical assignment without licensing cost.
Production migration in dependency order
We run production migration in the following record-dependency order: res.partner organizations (Customers), res.partner contacts with parent_id resolved, crm.lead records with all custom fields (Estimates, Proposals, Service Agreements as x_service_agreement), project.project created for Work Order migration, project.task records (Work Orders with user_id, stage_id, and description), ir.attachment records linked to crm.lead and project.task (proposal PDFs and mobile survey images). Each phase emits a row-count reconciliation report before the next phase begins. We use Odoo's XML-RPC API with batch chunking and retry logic for large record sets.
Cutover, final validation, and handoff
We freeze Shark Byte data entry during cutover, run a final delta migration of any records modified during the migration window, and enable Odoo as the system of record. We deliver a reconciliation report comparing record counts and spot-check results between Shark Byte exports and the Odoo destination. We provide the Workflow and Automation Inventory document listing every Shark Byte workflow with its trigger, conditions, and recommended Odoo Automations equivalent for the customer's admin to rebuild. We support a one-week hypercare window where we resolve data quality issues raised by the customer's team. We do not rebuild Shark Byte workflows as Odoo Automations inside the migration scope; that is a separate engagement.
Platform deep dives
Shark Byte CRM
Source
Strengths
Weaknesses
Odoo CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between Shark Byte CRM and Odoo CRM.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Shark Byte CRM and Odoo CRM.
Object compatibility
All 8 core objects map 1:1 between Shark Byte CRM 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
Shark Byte CRM: Not publicly documented.
Data volume sensitivity
Shark Byte 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 Shark Byte CRM to Odoo CRM migration scoping. Not seeing yours? Book a call.
Walk through your Shark Byte 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 Shark Byte 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.