CRM migration

Migrate from Basic Online CRM to Odoo CRM

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

Basic Online CRM logo

Basic Online CRM

Source

Odoo CRM

Destination

Odoo CRM logo

Compatibility

83%

10 of 12

objects map 1:1 between Basic Online CRM and Odoo CRM.

Complexity

BStandard

Timeline

2-4 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from Basic Online CRM to Odoo CRM is a structural upgrade for teams that have outgrown a staging CRM and need a full business suite. Basic Online CRM exports data as flat CSV with Deals referencing Contacts by internal numeric ID rather than name or email, which requires a cross-reference pass before Odoo import. Odoo uses the crm.lead model (which doubles as both lead and opportunity) and res.partner for contacts, with many2one relationships that must resolve to existing record IDs at insert time. We split the migration into contact-first and company-first import phases, create all custom fields in Odoo Studio before data arrives, and flag orphaned Deals (those referencing deleted Contacts) for customer resolution before cutover. Workflows, automation rules, and any configured email BCC rules do not migrate; we deliver a written inventory of these for the customer's admin to rebuild in Odoo 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

Basic Online CRM logo

Basic Online CRM

What's pushing teams away

  • No published pricing creates procurement friction — buyers comparing against HubSpot Free, Pipedrive, or Zoho cannot self-serve evaluate cost and must initiate a sales conversation just to get a ball-park figure.
  • Limited public review footprint — Basic Online has minimal presence on G2, Capterra, or independent comparison sites, which makes diligence difficult for buyers who rely on peer reviews.
  • Suite breadth comes at the cost of depth — the CRM trades feature depth (automation, AI scoring, advanced reporting) for tight integration with the vendor's other apps, so teams that need pipeline analytics or workflow rules outgrow it.
  • Small-vendor risk — Basic Business Systems Ltd is a UK SMB software house rather than a global CRM platform, which raises continuity questions for organisations standardising on a long-term system of record.
  • Niche geographical and customer-segment fit — the product is positioned for UK SMBs in service industries; buyers needing native multi-currency, multi-region tax, or large user counts move to broader platforms like HubSpot or Zoho.

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 Basic Online CRM objects map to Odoo CRM

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

Basic Online CRM

Contact

maps to

Odoo CRM

res.partner

1:1
Fully supported

Basic Online CRM Contact records map to Odoo res.partner. The source name, email, phone, and address fields map directly. Basic Online CRM custom fields migrate as char, selection, or float fields on res.partner, created in Odoo Studio before import. Partners flagged as company contacts in Basic Online CRM set the is_company checkbox on the Odoo partner record. Email address uniqueness is the dedupe key during import; duplicate emails trigger a skip with a flag for manual review.

Basic Online CRM

Company

maps to

Odoo CRM

res.partner (company type)

1:1
Fully supported

Basic Online CRM Company records map to Odoo res.partner with is_company = True. The source company name maps to the partner name field, domain/website to website, and any company-level custom fields to partner fields. If a Basic Online CRM Company shares a name with an existing Odoo partner record, we flag it as a potential duplicate for customer resolution before committing the import.

Basic Online CRM

Deal

maps to

Odoo CRM

crm.lead

1:1
Fully supported

Basic Online CRM Deal records map to Odoo crm.lead in the Opportunity stage (not the Lead stage). The Deal name becomes crm.lead name, amount becomes planned_revenue, and pipeline stage maps to stage_id via a stage-name lookup we run against the Odoo pipeline configuration before import. Closed-won Deals set the probability to 100 and stage to the Odoo closed-won stage; closed-lost sets probability to 0.

Basic Online CRM

Deal-Contact association

maps to

Odoo CRM

crm.lead.partner_id (many2one)

1:1
Fully supported

Basic Online CRM exports Deals with Contact linked by internal numeric ID, not by email or name. We run a dual extraction: Contacts first (capturing id and email/name), then Deals (capturing id and contact_id). During the transform phase, we cross-reference every contact_id against the extracted contact list, resolving to partner_id. Deals where contact_id references a deleted or absent Contact are flagged as orphaned Deals and held in a reconciliation queue; we do not create them without a resolved partner.

Basic Online CRM

Deal-Company association

maps to

Odoo CRM

crm.lead.partner_id (many2one)

1:1
Fully supported

If Basic Online CRM Deal records also reference a Company by internal ID, we resolve both associations during the same transform pass. Odoo crm.lead allows only one partner_id (Contact) and one partner_assigned_id (salesperson), so Company is informational and stored in a custom char field if it does not align with the Contact's company partner.

Basic Online CRM

Note

maps to

Odoo CRM

crm.lead.description (text) or mail.message

1:1
Fully supported

Basic Online CRM Notes are free-text and untyped with no explicit timestamp. We map them to the description field on the related crm.lead. If the Note has an explicit creation date, we store it as a custom date field and note it in the migration report. If the customer requires threaded note history, we optionally create mail.message records with note subtype, linked to the crm.lead via res_id and model fields.

Basic Online CRM

Custom Field (string-stored)

maps to

Odoo CRM

ir.model.fields (via Studio)

lossy
Fully supported

Basic Online CRM custom fields are stored as untyped strings on export. We ask customers to confirm intended data types (date, number, dropdown, text) during scoping. We pre-create the fields in Odoo Studio with the confirmed types before any data import. Date fields in particular may export with inconsistent formatting (Jan 15 2024 vs 15/01/2024); we apply a standardisation transform pass before writing.

Basic Online CRM

Owner/User

maps to

Odoo CRM

res.users

1:1
Fully supported

Basic Online CRM does not surface Owner assignment in its exports. We ask customers upfront which team member should own migrated records in Odoo. If multiple Basic Online CRM users exist, we extract unique user references from Deal and Note records and match them to Odoo res.users by email during the transform phase. Unmatched users are held in a reconciliation queue for the customer's Odoo admin to provision before the write-back phase continues.

Basic Online CRM

Activity/Task

maps to

Odoo CRM

mail.activity

1:1
Fully supported

If the Basic Online CRM instance contains task records (title, status, no assignee), we migrate them to Odoo mail.activity linked to the related crm.lead. activity_type_id maps to Odoo's standard activity types (Email, Call, Meeting, To Do). Odoo requires an activity_type_id and a res_model reference; we set res_model to crm.lead and resolve the res_id from the parent Deal mapping.

Basic Online CRM

Pipeline configuration

maps to

Odoo CRM

crm.stage

lossy
Fully supported

Basic Online CRM pipeline stages (up to 5 on Free, more on paid tiers) map to Odoo crm.stage records within the default CRM team. We query the existing stage configuration in the destination Odoo database, map each source stage name to the nearest matching Odoo stage, and create any missing stages via the Odoo interface or XML-RPC before Deal import begins.

Basic Online CRM

Tags/Labels

maps to

Odoo CRM

crm.tag

1:1
Fully supported

Basic Online CRM tag values stored on Contacts, Companies, or Deals migrate to Odoo crm.tag records. Tags are created on-demand during the transform phase (deduped by name), then linked via crm.lead.tag_ids many2many field. If Basic Online CRM tags are free-text without a dedicated tag field, we create a custom many2many field on crm.lead for them.

Basic Online CRM

Company-Contact hierarchy

maps to

Odoo CRM

res.partner.parent_id

1:1
Fully supported

If Basic Online CRM stores a Contact's parent Company as a linked Company record (rather than a field on the Contact), we resolve that relationship during the partner import pass and set the child Contact's parent_id to the company partner ID. Odoo enforces that parent_id points to an is_company partner; we validate this constraint before writing and flag any violations.

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.

Basic Online CRM logo

Basic Online CRM gotchas

High

CSV export silently truncates large contact lists

High

Deal-Contact associations are stored by internal ID only

Medium

Custom field data types are not preserved on export

Medium

No native attachment storage means files are not migrated

Low

User/owner structure is not explicit in exported data

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

  • CSV export truncates at 5,000 rows silently

    Basic Online CRM's bulk CSV export silently caps downloads at approximately 5,000 rows. We detect record counts during scoping and split large exports into multiple CSV files (one per 5,000-row block), then merge them in the staging environment before writing to Odoo. Customers with more than 5,000 contacts must manually run multiple exports unless they have Enterprise-tier API access. We flag this during discovery and include the multi-file extraction step in the migration plan.

  • Deal-Contact associations use internal IDs not email

    When Basic Online CRM exports Deals to CSV, the linked Contact is referenced by an internal numeric ID rather than name or email. We run a dual export (Contacts first, then Deals), cross-reference the IDs against the contact list during the transform phase, and recreate the partner_id relationship in Odoo by matched name or email. If a Deal references a deleted Contact, we flag it as an orphaned Deal in the migration report and hold it for customer resolution before cutover.

  • Custom field data types are lost on export

    Basic Online CRM exports all custom field values as plain strings regardless of intended type. Date fields may appear as Jan 15 2024 in one export and 15/01/2024 in another, and numeric fields appear alongside text in the same column. We apply a standardisation transform during the mapping phase and ask customers to confirm field-type intent before Odoo Studio schema creation. Fields with mixed-format dates in the same column require manual review before import.

  • Odoo crm.lead requires explicit stage_id on import

    Odoo's crm.lead model enforces a many2one relationship to crm.stage. If the destination Odoo database has a pipeline with non-standard stage names (different from the Odoo defaults), we must create or rename the stages before Deal import can succeed. We query the destination Odoo stage configuration during scoping, map source Deal stages to matching Odoo stage names, and create any missing stages before the write-back phase begins.

  • Owner/User provisioning is required before record insert

    Basic Online CRM does not surface record-level owner assignment in its exports. We ask customers which Odoo res.users record should own migrated Deals and Contacts before migration day. If the customer has multiple Basic Online CRM users, we reconcile them by email against the destination Odoo User table and hold any without a match in a provisioning queue. Migration cannot proceed past the Deal import phase until OwnerId resolution is complete because Odoo requires a valid user_id on crm.lead.

Migration approach

Six steps for a successful Basic Online CRM to Odoo CRM data migration

  1. Discovery and scoping

    We audit the Basic Online CRM instance: record counts (Contacts, Companies, Deals, Notes, Tasks), custom field definitions, pipeline stage count, and any multi-file export requirement triggered by the 5,000-row cap. We also identify any orphaned Deals (those referencing deleted Contacts) from the CSV headers. The discovery output is a written scope document with a record-count table, a custom field type confirmation request sent to the customer, and a flag for any Deals without resolvable Contact associations.

  2. CSV extraction in batches

    For instances with more than 5,000 contacts, we extract in multiple CSV files: a base export of records 1-5,000, then a second export for 5,001 onward. We run a reconciliation check comparing total extracted rows against Basic Online CRM's reported record count. If the counts match, we merge the files in the staging environment. If they diverge, we request a manual re-export or flag the discrepancy for customer investigation.

  3. Contact-to-partner resolution and orphan handling

    We run the dual-extract resolution pass: Contacts export first (capturing id, email, name), then Deals export (capturing id and contact_id). The transform script cross-references every contact_id against the contact list and replaces the numeric ID with a resolved partner name or email. Deals where contact_id has no match enter the orphan queue. We deliver the orphan list to the customer and do not create those Deals until the customer either creates the missing Contact or assigns the Deal to an existing Contact in the destination.

  4. Odoo Studio schema pre-creation

    Before any data write-back, we create all confirmed custom fields in Odoo Studio on the crm.lead and res.partner models using the data types confirmed by the customer during scoping. We set field labels to match the source Basic Online CRM labels for admin recognition. We validate that stage names in the destination Odoo pipeline match the source Deal stages or create the missing stages in Odoo before the Deal import phase begins.

  5. Staged import into Odoo

    We import in dependency order: res.partner (Companies first, then Contacts with parent_id resolved), crm.lead (Deals with resolved partner_id, stage_id, and planned_revenue), mail.activity (Tasks linked to crm.lead), and crm.tag (tags created on-demand then linked to crm.lead via tag_ids). Each phase emits a row-count reconciliation report showing records attempted, records written, and records skipped with reason codes. The customer reviews the reconciliation report before the next phase begins.

  6. Cutover, delta migration, and automation inventory handoff

    We freeze Basic Online CRM writes during the cutover window, run a final delta pass for any records modified during the migration, then enable Odoo as the system of record. We deliver the written automation inventory document listing every Basic Online CRM workflow and automation rule that requires rebuild in Odoo Studio, with a recommended equivalent action in Odoo for each. We support a one-week post-cutover window for reconciliation issues. We do not rebuild automations inside the migration scope; that is a separate engagement or internal admin task.

Platform deep dives

Context on both ends of the pair

Basic Online CRM logo

Basic Online CRM

Source

Strengths

  • Zero-installation browser-based interface with no desktop client required
  • Free tier available for single-user evaluation with basic contact and deal management
  • Immediate onboarding with no credit card required for trial
  • Built-in email tracking and basic pipeline visualisation on the free plan
  • Ships with pre-built CSV import for Contacts and Companies

Weaknesses

  • No native mobile app; fully browser-dependent on desktop
  • Limited reporting and analytics beyond basic pipeline totals
  • No workflow automation or custom business logic on any tier
  • API access is undocumented or absent on lower tiers
  • No native integrations with email clients, calendars, or third-party tools
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. 3 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 Basic Online CRM and Odoo CRM.

  • Object compatibility

    B

    3 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

    Basic Online CRM: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

Estimate your Basic Online 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 Basic Online CRM to Odoo CRM data migrations

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

Can't find your answer?

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

Book a free 30 minute consultation

Most migrations land between two and four weeks for accounts under 10,000 Contacts and 2,000 Deals with under 10 custom fields and no orphan-resolution complexity. Migrations with 10,000+ Contacts requiring multi-file CSV batching, significant orphan-Deal resolution, or Odoo multi-company configuration move to six to ten weeks. The two-week addition accounts for the orphan-review cycle (where the customer resolves orphaned Deals before we complete the Deal import phase) and any schema correction rounds in Odoo Studio.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Basic Online 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