CRM migration

Migrate from Bluwave CRM to Odoo CRM

Field-level mapping, validation, and rollback between Bluwave CRM and Odoo CRM. We move data and schema; workflows are rebuilt natively in Odoo CRM.

Bluwave CRM logo

Bluwave CRM

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

58%

7 of 12

objects map 1:1 between Bluwave CRM and Odoo CRM.

Complexity

BStandard

Timeline

4-6 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from Bluwave CRM to Odoo CRM is a migration from a South African SMB-focused CRM with no public API and bundled CRM-and-Service licensing, to a modular Belgian ERP-CRM with a REST API and per-user pricing. Bluwave CRM has no documented public API, so our extraction runs through the built-in Excel export, which requires all relevant module columns to be visible before extraction. Odoo stores Contacts and Companies as a single res.partner record with a company_type flag, which means Bluwave's separate Company and Contact records must be merged or kept distinct depending on whether the customer wants a unified partner model. Deals map to Odoo Opportunities within the CRM module's pipeline stages, and face-to-face activity records carry their geocoded location as custom fields since Odoo has no native travel claim or visit-location feature. Custom fields on both sides require type inference from sample data because Bluwave does not publish a schema reference. We do not migrate workflows, automations, or report definitions as code; we deliver a written inventory of Bluwave's automation objects for the customer's admin to rebuild in Odoo's Action Rules or Studio.

Field-level fidelity

Every standard and custom field arrives verified.

Schema-aware mapping

AI proposes the map; you confirm before any record moves.

Relationships preserved

Parent–child, lookups, and ownership stay linked.

Full activity history

Calls, emails, meetings — with original timestamps.

Attachments & notes

Documents, uploads, and inline notes move with the record.

Why teams make this switch

Two sides of the same decision

Leaving

Bluwave CRM logo

Bluwave CRM

What's pushing teams away

  • Small businesses find the per-user monthly cost in ZAR prohibitive as headcount grows, with reviews citing it as expensive relative to alternatives.
  • The platform lacks a built-in report writer, forcing power users to export to Excel for any analysis beyond pre-built dashboards.
  • Limited customisation options mean teams with non-standard sales processes struggle to fit the CRM to their workflow rather than adapting their workflow to the CRM.
  • No publicly documented API means integrations with external tools rely on third-party connectors or manual exports, creating friction for technically-minded teams.

Choosing

Odoo CRM logo

Odoo CRM

What's pulling them in

  • Teams choose Odoo CRM for its modular architecture — one base install with one-click app additions means they can adopt CRM alone and add accounting, inventory, or sales later as the business grows.
  • Small businesses pick Odoo because the Community edition is free and open-source, with no per-user or contact limits, allowing full evaluation before committing to a paid Enterprise tier.
  • The drag-and-drop Kanban pipeline and AI lead scoring are highlighted across G2 reviews as concrete features that make lead management faster and more visual than spreadsheet-based workflows.
  • Odoo's native integration with email, live chat, SMS, VoIP, and WhatsApp means inbound leads from multiple channels feed into a single pipeline without third-party middleware.
  • Companies in retail, supply chain, and construction value that Odoo's CRM module shares the same PostgreSQL database and UI as its ERP modules, eliminating data silos between sales and operations.

Object mapping

How Bluwave CRM objects map to Odoo CRM

Each row shows how a Bluwave 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.

Bluwave CRM

Contact

maps to

Odoo CRM

res.partner (company_type = contact)

1:many
Fully supported

Bluwave Contact records with a link to a Bluwave Company map to a single Odoo res.partner record with company_type=contact and parent_id pointing to the merged Company partner. Contacts without a Company link map to res.partner with company_type=contact and no parent_id. Email, phone, mobile, address fields map directly. The Bluwave geocoded latitude/longitude appends as custom fields latitude and longitude on res.partner. We resolve the parent-company lookup before inserting Contact partners because parent_id is a required foreign key on the relationship.

Bluwave CRM

Company

maps to

Odoo CRM

res.partner (company_type = company)

1:1
Fully supported

Bluwave Company records map to Odoo res.partner with company_type=company. The company name becomes the partner name, industry maps to industry_id via Odoo's industry picklist, and address fields map directly. This record is inserted before Contact records so that the parent_id lookup is satisfied at import time. Duplicate companies (same name) are deduped by name normalisation before insert.

Bluwave CRM

Lead

maps to

Odoo CRM

crm.lead (type = lead)

1:1
Fully supported

Bluwave Leads map to Odoo crm.lead records with type=lead. Source attribution (how the lead entered) maps to medium_id, and lifecycle stage maps to tag_ids or a custom stage field we create during schema setup. Lead priority and rating map to priority and tag_ids on crm.lead. Owner assignment maps to user_id via email-match lookup against Odoo res.users.

Bluwave CRM

Deal

maps to

Odoo CRM

crm.lead (type = opportunity)

1:1
Fully supported

Bluwave Deals map to Odoo crm.lead with type=opportunity. Deal value maps to planned_revenue, expected close date maps to date_deadline, stage name maps to stage_id via Odoo's crm.stage lookup, and owner maps to user_id. The associated Bluwave Contact becomes the partner_id on the Opportunity; the associated Bluwave Company becomes the partner_id parent or is resolved via contact_id. We configure the Odoo pipeline stages before migration so that stage_id references are satisfied.

Bluwave CRM

Pipeline Stage

maps to

Odoo CRM

crm.stage

lossy
Fully supported

Bluwave pipeline stage names and reorder logic are extracted during scoping and recreated as Odoo crm.stage records within the target team's pipeline. Stage probability percentages are stored on crm.stage as probability. Each Odoo crm.team gets its own stage sequence. If Bluwave uses multiple pipelines, we create multiple crm.team records in Odoo with separate stage sets.

Bluwave CRM

Activity (face-to-face visit)

maps to

Odoo CRM

mail.activity

1:1
Fully supported

Bluwave face-to-face activities map to Odoo mail.activity records linked to the migrated crm.lead (opportunity) or res.partner. Activity type picklist values (Call, Meeting, Site Visit) are mapped to Odoo's activity_type taxonomy during scoping. Geocoded latitude/longitude from the Bluwave activity record is stored as custom fields on mail.activity since Odoo has no native visit-location feature. Travel claim associations are preserved as a note attachment or a custom field link.

Bluwave CRM

Custom Fields

maps to

Odoo CRM

ir.model.fields (custom)

lossy
Mapping required

Bluwave custom fields are inferred from exported sample data during scoping — we infer the data type (text, number, date, picklist) from content patterns and validate with a small batch before committing the full load. Each custom field becomes a custom ir.model.fields entry on the relevant Odoo model (res.partner, crm.lead, or mail.activity). Picklist values in Bluwave become selection fields or ir.model.fields.selection entries in Odoo.

Bluwave CRM

Users / Owners

maps to

Odoo CRM

res.users

1:1
Mapping required

Bluwave Owner records are matched to Odoo res.users by email address. We extract every distinct owner referenced on Contact, Company, Deal, and Activity and create a reconciliation queue for any that have no matching Odoo user. The customer's Odoo admin provisions missing users before record migration resumes because user_id is a required foreign key on crm.lead and a displayed field on res.partner.

Bluwave CRM

Attachments

maps to

Odoo CRM

ir.attachment

1:1
Mapping required

Bluwave file attachments on Deals and Contacts do not export via Excel. We extract them separately via the Bluwave web interface where accessible, mapping file names and linked record IDs. Each attachment becomes an ir.attachment record in Odoo linked via res_model and res_id to the target res.partner or crm.lead. Binary attachment volume is estimated during scoping to determine whether a separate file-storage step is required.

Bluwave CRM

Mail List / Segment

maps to

Odoo CRM

mailing.list + mailing.contact

1:1
Fully supported

Bluwave mail list segments and their member Contact associations are migrated to Odoo mailing.list and mailing.contact records. The mailing.list name maps from the Bluwave segment name, and mailing.contact records are created from each member Contact. Email campaign history (send logs, open rates) does not transfer; we note the segment structure for the customer to rebuild campaign sends in Odoo's Email Marketing app post-migration.

Bluwave CRM

Companies + Contacts relationship

maps to

Odoo CRM

res.partner parent_id hierarchy

lossy
Fully supported

Bluwave stores the Company-Contact relationship as a linked pair. In Odoo, the equivalent is the parent_id field on res.partner. We build a lookup table from the Bluwave export linking each Contact to its parent Company, then set parent_id on each Contact partner during import. This preserves the account hierarchy that sales reps use to navigate from a contact up to its parent company in Odoo's kanban and list views.

Bluwave CRM

Geocoded location data

maps to

Odoo CRM

Custom latitude/longitude fields on res.partner and mail.activity

lossy
Fully supported

Bluwave geocodes addresses at entry, appending latitude and longitude to customer addresses and to face-to-face activity records. These are forward-geocoded approximations, not GPS captures at visit time. We preserve them as custom float fields on res.partner (for customer address location) and on mail.activity (for visit location). We flag these values for customer review because they represent approximate geocoding, not actual travel routes, and any travel claim accuracy depends on this distinction.

Gotchas + challenges

What specifically takes care here

Platform-specific issues from each side, plus the pair-specific challenges that don't show up on either platform's page on its own.

Bluwave CRM logo

Bluwave CRM gotchas

High

No public API — migration relies on Excel export

Medium

Custom field schema is not publicly documented

Medium

Pricing is in ZAR with mandatory upfront training package

Low

Geocoded location data is address-derived, not GPS-captured

Odoo CRM logo

Odoo CRM gotchas

High

Odoo.sh version gating blocks assisted migrations from trial

High

Enterprise modules fail to install on Community after database restore

Medium

Custom module view inheritance breaks between Odoo major versions

Medium

Custom fields risk losing their application context on Community

Low

API access for Community is gated behind the Custom Plan

Pair-specific challenges

  • Bluwave has no public API — extraction relies on Excel export

    Bluwave CRM does not publish API documentation or a developer portal, so our migration engine cannot call a Bluwave API to pull records programmatically. We extract data via the system's built-in Excel export, which is limited to the currently visible columns in each module view. We request access to all relevant modules before export to ensure columns are not hidden by default configuration or custom views. Binary attachments (PDFs, images) and the full activity timeline do not export via this method and must be handled separately via the web interface where accessible. This constraint adds a manual step and a validation layer that API-based migrations do not require.

  • Bluwave custom field schema is not publicly documented

    Bluwave CRM supports custom fields but no public schema reference exists — field names, data types, and picklist values are undocumented. During scoping, we export sample records and infer field types from content to build a mapping guide. Any misidentified field type causes validation failures at import into Odoo (for example, Odoo will reject a date string in a text field). We validate with a small batch of 50–100 records before committing the full load, and we flag any custom field that cannot be confidently typed as requiring manual review in Odoo after migration.

  • Odoo uses one res.partner for Companies and Contacts

    Bluwave CRM stores Companies and Contacts as separate objects with an explicit link between them. Odoo CRM uses a single res.partner model where company_type=company for organisations and company_type=contact for people, with parent_id linking individual contacts to their employing company. During migration we must decide whether to merge each Bluwave Company-Contact pair into one res.partner record or keep them as two separate partner records with a parent-child relationship. This decision affects how the account hierarchy appears in Odoo's pipeline kanban and reporting views, and it must be confirmed with the customer before record insertion begins.

  • Activity types and picklist values differ between platforms

    Bluwave activity types (face-to-face visits, calls, emails) and their associated picklist values have no direct Odoo equivalents in the mail.activity model. Odoo's activity_type taxonomy is configurable, but the standard types (Call, Meeting, Todo, Reminder) do not include a visit-specific type. We create a custom activity type during schema setup to handle Bluwave's face-to-face visit records, and we preserve the travel claim association as a note or custom field. If the customer relies on specific activity-type reporting in Bluwave, we rebuild that reporting structure in Odoo using Odoo's group-by and pivot views on mail.activity.

  • Odoo self-hosted vs cloud changes migration scope

    If the destination is Odoo Community (self-hosted) rather than Odoo Cloud, the migration involves additional steps: database provisioning, module installation, and server configuration that sit outside the data migration itself. Odoo Cloud migrations land within the standard migration timeline. Self-hosted Odoo migrations add one to two weeks for environment setup before data migration begins, and the customer is responsible for ongoing server maintenance post-migration. We scope cloud vs self-hosted at discovery and adjust the timeline and price accordingly.

Migration approach

Six steps for a successful Bluwave CRM to Odoo CRM data migration

  1. Discovery and Excel extraction request

    We audit the Bluwave CRM account across all modules (Contacts, Leads, Deals, Activities, Companies, Pipeline Stages, Custom Fields, Mail Lists). We request the customer to export each module via Bluwave's built-in Excel export, ensuring all columns are visible in the module view before export to avoid hidden fields. We receive the exported files and validate record counts, column headers, and data completeness. We also extract a list of all distinct Owner email addresses for user reconciliation, and identify any attachments accessible via the web interface for separate extraction.

  2. Schema design and Odoo environment preparation

    We design the destination Odoo schema based on the extracted Bluwave data. This includes provisioning custom fields on res.partner (latitude, longitude, and any Bluwave custom contact properties), on crm.lead (custom lead and deal fields), and on mail.activity (visit location coordinates and travel claim reference). We create the crm.stage pipeline stages matching the Bluwave pipeline structure, and configure crm.team records if multiple pipelines are in use. For self-hosted Odoo destinations, we coordinate with the customer's technical team to provision the environment before schema deployment.

  3. Staging migration and record reconciliation

    We run a first migration into an Odoo staging environment using 10–15 percent of the full record volume. We reconcile record counts (Contacts in, Leads in, Deals/Opportunities in, Activities in) against the source export totals. We spot-check 30–50 records across each object for field-level accuracy — particularly geocoded coordinates, owner assignments, and custom field values. We validate the res.partner parent_id hierarchy by selecting a random sample of Company-Contact pairs and confirming the Odoo partner shows the correct company and contact sub-record. We resolve any mapping failures before the next staging round.

  4. User and Owner reconciliation

    We extract every distinct Bluwave Owner referenced on Deals, Activities, and Contacts, and match by email against the Odoo res.users table. Any Owner without a matching Odoo user enters a reconciliation queue. The customer's Odoo admin provisions missing users (with appropriate access rights and CRM team assignments) before record import resumes. We cannot insert crm.lead records with a user_id reference that does not exist in Odoo, so this step gates the main migration.

  5. Production migration in dependency order

    We run production migration in record-dependency order: res.partner (Companies first, then Contacts with parent_id resolved), crm.lead (Leads, then Opportunities), mail.activity (Activities linked to crm.lead or res.partner), ir.attachment (files linked via res_model and res_id), and mailing lists last. Each phase emits a row-count reconciliation report. Custom field data is loaded in the same phase as its parent object. We apply Odoo's batch-commit limits and handle validation errors (type mismatches, required field gaps) by logging and retrying with corrected values from the source export.

  6. Cutover, validation, and automation inventory handoff

    We freeze Bluwave record creation during cutover and run a final delta migration for any records modified in Bluwave during the migration window. We validate record counts, parent relationships, and owner assignments in Odoo production. We deliver a written inventory of Bluwave automations, workflow rules, and report definitions for the customer's admin to rebuild using Odoo Studio or Action Rules. We support a five-business-day hypercare window to resolve any data discrepancies raised by the Odoo user team. We do not rebuild Bluwave automations as Odoo workflows within the migration scope; that is a separate engagement.

Platform deep dives

Context on both ends of the pair

Bluwave CRM logo

Bluwave CRM

Source

Strengths

  • Simple onboarding with mandatory setup and training packages that get new users operational quickly.
  • Integrated field sales tools including geocoding, travel claim reports, and face-to-face activity logging.
  • Bundled after-sales service module means field service and CRM share a single database and licence.
  • Strong ease-of-use ratings across G2 and Capterra with minimal learning curve for sales reps.
  • Monthly licence is cancellable with 7 days notice, reducing long-term commitment risk for small teams.

Weaknesses

  • No public API documentation or developer reference, limiting migration tooling and third-party integration options.
  • Mandatory setup package (from R9,750 for 1-3 users) adds significant upfront cost before a single user logs in.
  • Lacks a built-in report writer, requiring Excel exports for any custom analysis.
  • Customisation is limited compared to platforms like HubSpot or Zoho, with fewer field types and workflow options.
  • The platform is primarily documented in English but priced exclusively in South African Rand, which may complicate budgeting for international teams.
Odoo CRM logo

Odoo CRM

Destination

Strengths

  • Modular open-source architecture lets teams start with CRM and add ERP apps as needs grow, all sharing one PostgreSQL database.
  • Free Community edition with no contact limits and full source code access means zero licensing cost for evaluation and small deployments.
  • Drag-and-drop Kanban pipeline with AI lead scoring gives a visual, prioritized view of the sales funnel without requiring custom configuration.
  • Native integrations with email, live chat, SMS, VoIP, WhatsApp, and social media feed all inbound leads into a single unified inbox.
  • Active Odoo Community Association (OCA) maintains dozens of community-maintained modules on GitHub for extended functionality.

Weaknesses

  • Gmail and email integration reliability is a recurring complaint — threads drop and conversations scatter across inboxes, disrupting sales team workflows.
  • Enterprise edition pricing stacks quickly: multiple apps at per-user rates ($25–$50/user/month) plus Odoo.sh hosting costs more than many SMBs anticipate.
  • Setup and configuration complexity increases significantly once custom fields, automation rules, and multiple installed modules are in play.
  • Odoo.sh trial databases run on a version (e.g., 18.3) that is not directly migratable to Odoo.sh, blocking the assisted migration path Odoo advertises.
  • Version upgrades between major Odoo releases (e.g., 17→18) frequently break custom module view definitions and XPath expressions, requiring manual remediation.

Complexity grading

How hard is this migration?

Standard CRM migration. 2 of 8 objects need a mapping; the rest are 1:1.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across Bluwave CRM and Odoo CRM.

  • Object compatibility

    B

    2 of 8 objects need a mapping; the rest are 1:1.

  • Field mapping clarity

    C

    Field mapping is derived from defaults — final spec confirmed during the sample migration.

  • Timeline complexity

    B

    8-object category — typical timelines run 2–7 days end-to-end.

  • API constraints

    B

    Bluwave CRM: Not publicly documented.

  • Data volume sensitivity

    B

    Bluwave CRM doesn't expose a bulk API — REST + parallelization used for high-volume runs.

Estimator

Estimate your Bluwave CRM to Odoo CRM migration cost

Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.

Step 1

What are you migrating?

Pick a category, then your source and destination platforms.

Category

FAQ

Frequently asked questions about Bluwave CRM to Odoo CRM data migrations

Answers to the questions buyers ask most during Bluwave CRM to Odoo CRM migration scoping. Not seeing yours? Book a call.

Can't find your answer?

Walk through your Bluwave CRM to Odoo CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Migrations under 15,000 Contacts and 3,000 Deals with no custom objects and a cloud-hosted Odoo destination land between four and six weeks. Migrations with custom objects, large activity histories, multi-company structures, or a self-hosted Odoo Community destination requiring server setup move to eight to fourteen weeks because of Excel extraction validation rounds, res.partner deduplication work, and staging import corrections.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Bluwave CRM.
Land in Odoo CRM, intact.

Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.

Accuracy guarantee Rollback included Quote in 1 business day