Skip to content

How to Connect HubSpot to Odoo: CRM Migration and Integration Guide

DeployMonkey Team · March 23, 2026 10 min read

HubSpot to Odoo: Migration vs Integration

Businesses connect HubSpot and Odoo for two reasons. Some want to migrate away from HubSpot entirely — moving contacts, deals, and history into Odoo CRM. Others want to run both systems: HubSpot for inbound marketing and lead capture, Odoo for operations, invoicing, and ERP. This guide covers both scenarios.

Option 1: Full Migration from HubSpot to Odoo

Step 1: Export Data from HubSpot

  1. Go to Contacts → Actions → Export
  2. Select all properties you need (name, email, company, phone, lifecycle stage, deal info)
  3. Export as CSV
  4. Repeat for Deals, Companies, and Tickets

Step 2: Map HubSpot Fields to Odoo

HubSpotOdoo ModelOdoo Field
Contactres.partnername, email, phone
Companyres.partner (company)name, is_company=True
Dealcrm.leadname, expected_revenue, stage_id
Lifecycle Stagecrm.stageMap to pipeline stages
Deal Ownercrm.leaduser_id (salesperson)
Tickethelpdesk.ticketname, description, priority

Step 3: Import into Odoo

  1. Clean your CSV files — remove duplicates, standardize phone formats, fix encoding
  2. Import Companies first (Contacts → Import → select CSV)
  3. Import Contacts next, linking to companies via company name
  4. Import Deals as CRM leads/opportunities, linking to contacts
  5. Verify record counts match after import

Step 4: Map Deal Stages

HubSpot deal stages rarely match Odoo's default CRM stages. Create matching stages in Odoo before importing:

# HubSpot stages → Odoo stages mapping
Appointment Scheduled → Qualified
Qualified to Buy → Qualified
Presentation Scheduled → Proposition
Decision Maker Bought-In → Proposition
Contract Sent → Negotiation
Closed Won → Won
Closed Lost → Lost

Option 2: Live Integration (Both Systems Running)

Using HubSpot API + Odoo Automated Actions

For real-time sync between HubSpot and Odoo, use HubSpot's REST API:

  1. Generate a Private App in HubSpot (Settings → Integrations → Private Apps)
  2. Grant scopes: crm.objects.contacts.read, crm.objects.contacts.write, crm.objects.deals.read
  3. Copy the access token
  4. In Odoo, store the token as a system parameter: hubspot_api_token

Sync Contacts Bidirectionally

Create an Odoo cron job that runs every 15 minutes:

# Pseudocode for HubSpot → Odoo sync
1. GET /crm/v3/objects/contacts?lastModified > last_sync_time
2. For each contact:
   a. Search Odoo by email
   b. If found: update fields
   c. If not found: create new res.partner
3. Update last_sync_time

Sync Deals to Odoo CRM

When a deal reaches a specific stage in HubSpot, create or update the corresponding opportunity in Odoo CRM. This lets your sales team work in HubSpot while operations and invoicing happen in Odoo.

Using Zapier as a Bridge

If you want to avoid custom code, Zapier connects HubSpot and Odoo with pre-built triggers and actions. See our Zapier integration guide for details. Common zaps:

  • HubSpot new contact → Create Odoo contact
  • HubSpot deal closed won → Create Odoo sale order
  • Odoo invoice paid → Update HubSpot deal property

Troubleshooting

Duplicate Contacts After Migration

HubSpot allows multiple contacts with the same email. Odoo does not enforce email uniqueness by default but will create duplicates. Use Odoo's Merge Contacts wizard or deduplicate before import.

Lost Deal History

HubSpot's activity timeline (emails, calls, notes) does not export cleanly to CSV. Use the API to pull activities and create corresponding chatter messages in Odoo for a complete history.

API Rate Limits

HubSpot's private app API allows 100 requests per 10 seconds. For initial migration of large databases (10K+ contacts), use the batch endpoints and add delays between batches.

DeployMonkey Migration Assistance

DeployMonkey's AI agent can help plan your HubSpot-to-Odoo migration, map fields, and validate imported data. Spin up a test Odoo instance on DeployMonkey, run your migration there first, verify everything, then apply to production.