Skip to Content
Odoo Menu
  • Sign in
  • Try it free
  • Apps
    Finance
    • Accounting
    • Invoicing
    • Expenses
    • Spreadsheet (BI)
    • Documents
    • Sign
    Sales
    • CRM
    • Sales
    • POS Shop
    • POS Restaurant
    • Subscriptions
    • Rental
    Websites
    • Website Builder
    • eCommerce
    • Blog
    • Forum
    • Live Chat
    • eLearning
    Supply Chain
    • Inventory
    • Manufacturing
    • PLM
    • Purchase
    • Maintenance
    • Quality
    Human Resources
    • Employees
    • Recruitment
    • Time Off
    • Appraisals
    • Referrals
    • Fleet
    Marketing
    • Social Marketing
    • Email Marketing
    • SMS Marketing
    • Events
    • Marketing Automation
    • Surveys
    Services
    • Project
    • Timesheets
    • Field Service
    • Helpdesk
    • Planning
    • Appointments
    Productivity
    • Discuss
    • Approvals
    • IoT
    • VoIP
    • Knowledge
    • WhatsApp
    Third party apps Odoo Studio Odoo Cloud Platform
  • Industries
    Retail
    • Book Store
    • Clothing Store
    • Furniture Store
    • Grocery Store
    • Hardware Store
    • Toy Store
    Food & Hospitality
    • Bar and Pub
    • Restaurant
    • Fast Food
    • Guest House
    • Beverage Distributor
    • Hotel
    Real Estate
    • Real Estate Agency
    • Architecture Firm
    • Construction
    • Property Management
    • Gardening
    • Property Owner Association
    Consulting
    • Accounting Firm
    • Odoo Partner
    • Marketing Agency
    • Law firm
    • Talent Acquisition
    • Audit & Certification
    Manufacturing
    • Textile
    • Metal
    • Furnitures
    • Food
    • Brewery
    • Corporate Gifts
    Health & Fitness
    • Sports Club
    • Eyewear Store
    • Fitness Center
    • Wellness Practitioners
    • Pharmacy
    • Hair Salon
    Trades
    • Handyman
    • IT Hardware & Support
    • Solar Energy Systems
    • Shoe Maker
    • Cleaning Services
    • HVAC Services
    Others
    • Nonprofit Organization
    • Environmental Agency
    • Billboard Rental
    • Photography
    • Bike Leasing
    • Software Reseller
    Browse all Industries
  • Community
    Learn
    • Tutorials
    • Documentation
    • Certifications
    • Training
    • Blog
    • Podcast
    Empower Education
    • Education Program
    • Scale Up! Business Game
    • Visit Odoo
    Get the Software
    • Download
    • Compare Editions
    • Releases
    Collaborate
    • Github
    • Forum
    • Events
    • Translations
    • Become a Partner
    • Services for Partners
    • Register your Accounting Firm
    Get Services
    • Find a Partner
    • Find an Accountant
      • Get a Tailored Demo
    • Implementation Services
    • Customer References
    • Support
    • Upgrades
    Github Youtube Twitter Linkedin Instagram Facebook Spotify
    +32 2 290 34 90
    • Get a Tailored Demo
  • Pricing
  • Help
  1. APPS
  2. CRM
  3. BambooForge EspoCRM Connector v 17.0
  4. Sales Conditions FAQ

BambooForge EspoCRM Connector

by BambooForge Labs
Odoo

$ 101.51

v 17.0 Third Party
Apps purchases are linked to your Odoo account, please sign in or sign up first.
Versions 17.0 18.0 19.0
You bought this module and need support? Click here!
Availability
Odoo Online
Odoo.sh
On Premise
Odoo Apps Dependencies • CRM (crm)
• Contacts (contacts)
• Discuss (mail)
• Calendar (calendar)
Lines of code 6701
Technical Name bambooforge_espocrm_connector
LicenseOPL-1
Versions 17.0 18.0 19.0
  • Description
  • Manifest
  • Documentation
  • License
BambooForge Labs
BambooForge Labs Production-grade Odoo apps · source included · tested
Odoo 17.0 bambooforge.labs@gmail.com

BambooForge EspoCRM Connector

A real connector between Odoo 17 and EspoCRM — the free, open-source PHP CRM. Create one API User in EspoCRM, drop its API key into Odoo, and the connector imports your accounts, contacts, leads and opportunities straight into Odoo over the EspoCRM REST API — import-first and read-only, on a schedule, with dry-run safety and full source you can audit.

Odoo 17.0 EspoCRM 9.x / 8.x / 7.x REST API (X-Api-Key) Live-tested on EspoCRM 9.3 Read-only import Scheduled sync Source included
Buy & deploy today →
24-hour supportWe answer every request within 24 hours — setup help included.
2-month money-backReport a bug within 2 months of purchase — if it isn't resolved within 15 days, you get a full refund.
Live-tested, not theoreticalVerified against a real EspoCRM 9.3 instance — 3 accounts, 5 contacts, 4 leads, 3 opportunities, 0 errors.
Full source includedComplete source in the package — audit every line, extend it freely, never get locked in.
importaccounts · contacts · leads · opportunities
0errors on the live EspoCRM 9.3 import
API keyone X-Api-Key header — no OAuth, no passwords stored
read-onlynever writes back to EspoCRM
Tested for real

Verified live against a running EspoCRM

We don't just claim a vague version range. The connector was installed on Odoo 17, pointed at a live EspoCRM 9.3.9 instance over its REST API, and run through a full account / contact / lead / opportunity import — 0 errors.

EspoCRM versionAPILive result
9.3REST API (X-Api-Key)✔ Live-tested — 3 accounts / 5 contacts / 4 leads / 3 opportunities, 0 errors
8.xREST API✔ Compatible (same /api/v1) — validate on your build
7.x lineREST API✔ Supported where the API matches

The live test imported 3 accounts, 5 contacts, 4 leads and 3 opportunities with no errors. Accounts and contacts became Odoo partners — companies and the people linked to them — while leads and opportunities became Odoo CRM leads. For example, the opportunity “Globex ERP rollout” ($45,000, customer Umbrella Industries) imported as an Odoo opportunity with its amount, stage and customer intact.

Built to actually sync — not to look busy

EspoCRM exposes a clean REST API, and this connector treats it that way: it authenticates with a single API key, reads your accounts, contacts, leads and opportunities from /api/v1, and maps each one onto the right Odoo record — partners and CRM leads. Every model ships with verifiable sync logic, covered by tests — no fake dashboards, no “readiness score” with nothing behind it.

What you actually get

Everything below ships in the box — an import-first, read-only connector that reads your EspoCRM over the REST API with a single API key.

A

Accounts → companies

Each EspoCRM Account imports as an Odoo res.partner company — name, website, email, phone and city — ready to link to the people who work there.

C

Contacts → people

Each EspoCRM Contact becomes an individual res.partner, linked to its parent company so your account structure carries over into Odoo intact.

L

Leads → CRM leads

EspoCRM Leads import as Odoo crm.lead records of type “Lead” — name, contact name, company, email, phone, source and the EspoCRM lead status, carried across through the mapping.

O

Opportunities → CRM

EspoCRM Opportunities import as Odoo crm.lead records of type “Opportunity” — name, company, expected revenue, expected closing date, probability and the EspoCRM stage.

Scheduled sync

The connector imports from EspoCRM on a schedule (cron) — point it at your instance and it keeps Odoo up to date. Inbound webhooks and live-push are on the roadmap.

{ }

API-key REST client

One client authenticates with an EspoCRM API User key sent as the X-Api-Key header against /api/v1. No OAuth, no passwords stored — retry with backoff and rate-limit handling built in.

Sync Control Tower

A live operations dashboard for every instance — sync health, circuit-breaker state, queue backlog, dead-letter count, open conflicts and throughput, each a click-through to the jobs behind it. Know sync is healthy without reading a single log line.

Bulk dead-letter console

Every job that exhausted its retries lands here, grouped by instance and error. Select many at once and bulk requeue once you've fixed the cause, or bulk discard — no record-by-record clean-up.

Conflict-resolution workbench

When a local and a remote change collide, the conflict is captured with a side-by-side snapshot diff. Triage them in one place and bulk-resolve — keep local or take remote — instead of digging through history.

Field-mapping studio

Map source fields to Odoo fields visually, test the exact payload transform in a wizard before you save, and let one-click suggestions propose sensible mappings. Expression transforms and step conditions evaluate through Odoo's sandboxed safe_eval.

See it running

A live walkthrough inside Odoo 17

Recorded in a real Odoo 17 connected to a live EspoCRM 9.3 — the connection cockpit, a synced account and opportunity, the status / stage mapping and the flow engine, all on real data.

Your browser does not support embedded video — see the screenshots below.
Real screenshots

Every screen, from a live install

Captured from a running Odoo 17 connected to a live EspoCRM 9.3 — real data imported through the connector, not mockups.

Connection cockpit
Connection cockpit — API key, health, trustPer-instance API key, health, trust score and one-click safety controls — connected and green.
Synced company
An EspoCRM Account synced as an Odoo companyAn imported Account with its website, email, phone and city, live in Odoo as a company partner.
Synced opportunity
An EspoCRM Opportunity synced as an Odoo CRM opportunityCompany, expected revenue, closing date and probability — brought in through the stage mapping.
Status and stage mapping
Lead status / opportunity stage mappingEditable EspoCRM-status → Odoo table, seeded with sensible defaults per instance.
CRM import flow templates
Built-in CRM import flow templatesMulti-step import flows (fetch → map → upsert → log) ready to run.
Sync Control Tower — EspoCRM connector
Sync Control TowerEvery store on one board: health, circuit-breaker state, backlog, dead-letters, conflicts, 24h throughput and failure rate — drill into any number in a click.
Dead-letter console — EspoCRM connector
Dead-letter consoleExhausted-retry jobs grouped by error type with the exact API error kept — bulk requeue or discard once the remote system is fixed.
Conflict workbench — EspoCRM connector
Conflict workbenchRecords changed on both sides shown Odoo vs. remote with a field diff — resolve with “Odoo wins”, “Remote wins” or mark reviewed.
Premium operations, in motion

Run every EspoCRM store from one Control Tower

A short walkthrough of the operations tooling on real data: the Control Tower board, the side-by-side conflict workbench and the bulk dead-letter console.

Your browser does not support embedded video — see the screenshots above.

Production safety, by default

Resilient queue

Retry with exponential backoff, rate-limit awareness, dead-letter handling and conflict capture for every job.

Circuit breaker

Auto-pauses sync after N consecutive failures so a broken endpoint can never flood your data.

Dry-run mode

Default-ON for every new instance — preview the exact write before anything touches live records.

Pre-flight validation

Blocking and warning findings surfaced before go-live, with auto-fix suggestions.

Rollback snapshots

Capture record state before risky writes and roll back cleanly when needed.

Read-only by design

The connector only reads your EspoCRM over the API — it never creates, updates or deletes a record there, so a sync can never alter your live CRM.

Honest feature matrix

No asterisks, no fake checkmarks. Here is exactly what this version does — and what is on the roadmap.

CapabilityStatus
API-key REST connection (X-Api-Key against /api/v1)✔ Included
Accounts → res.partner companies (name, website, email, phone, city)✔ Included
Contacts → res.partner people, linked to their company✔ Included
Leads → crm.lead (type Lead) with source & lead status✔ Included
Opportunities → crm.lead (type Opportunity) with revenue, close date, probability✔ Included
Configurable lead-status / opportunity-stage mapping✔ Included
Scheduled (cron) import✔ Included
Queue: retry · backoff · dead-letter · circuit breaker✔ Included
Pre-flight validation · rollback snapshots · dry-run✔ Included
Built-in CRM import flow templates✔ Included
Sync Control Tower — live health / circuit / backlog / dead-letter / conflicts / throughput dashboard✔ Included
Bulk dead-letter console — grouped exhausted jobs, bulk requeue / discard✔ Included
Conflict-resolution workbench — snapshot diff, triage & bulk resolve✔ Included
Field-mapping studio — payload-test wizard, one-click suggestions, safe_eval transforms & conditions✔ Included
Inbound webhooks / live-push (instead of scheduled import)Roadmap
Write-back / export Odoo → EspoCRMRoadmap
Activities / tasks / calls importRoadmap

Live in four steps

A guided quick-setup wizard and onboarding checklist walk you from an EspoCRM API key to your first safe import.

Create a key

In EspoCRM, create an API User and copy its API key — no schema changes, no plugin to install.

Connect

In Odoo, enter your EspoCRM base URL plus the API key, then run the first scheduled import. One click tests reachability.

Dry-run

Preview exact writes with dry-run + validation on. Clear any blocking findings.

Go live

Let the scheduled (cron) import keep Odoo up to date from EspoCRM, read-only.

Buy with full clarity

In the box today

  • Read-only import: accounts & contacts → partners, leads & opportunities → CRM leads
  • API-key REST client (X-Api-Key) — no OAuth, no passwords stored
  • Scheduled (cron) import — point it at your EspoCRM and it stays current
  • Configurable lead-status / opportunity-stage mapping, dry-run safety, rollback snapshots
  • Full source included — audit and extend every line for your own use
  • Sync Control Tower — one live dashboard for health, circuit breaker, backlog, dead-letter, conflicts & throughput
  • Bulk dead-letter console & conflict-resolution workbench — triage and fix at scale, not row by row
  • Field-mapping studio — visual mapping, a payload-test wizard, one-click suggestions and safe_eval transforms

Roadmap

  • Inbound webhooks / live-push instead of a scheduled import
  • Write-back / export Odoo → EspoCRM (import is the only direction today)
  • Activities / tasks / calls import
  • Two-way status / stage synchronisation

Frequently asked

Which versions are supported?

Odoo 17.0 on the Odoo side. On the CRM side, the connector was live-tested on EspoCRM 9.3 and targets the EspoCRM 9.x / 8.x / 7.x lines that expose the same /api/v1 REST API. Validate on your specific build.

How does authentication work?

One mode: an API Key. You create an API User in EspoCRM, copy its key, and enter it plus your EspoCRM base URL in Odoo. The connector sends the key as the X-Api-Key header on every REST call — no OAuth, no passwords stored, and it only ever reads.

What does it import?

Four EspoCRM entities: Accounts become Odoo partner companies, Contacts become individual partners linked to their company, Leads become Odoo CRM leads, and Opportunities become Odoo CRM opportunities with amount, close date, probability and stage. A configurable mapping translates EspoCRM lead statuses and opportunity stages to Odoo.

Does it push changes in real time?

Not yet. The connector imports on a schedule (cron). Inbound webhooks / live-push and write-back to EspoCRM are on the roadmap.

Is it safe to run against production data?

Dry-run mode is ON by default for new instances, validation blocks risky writes, and rollback snapshots let you undo. The connector is read-only against EspoCRM, so it can never alter your CRM. You decide when to go live.

What support and refund policy do I get?

Every request is answered within 24 hours, setup help included. If you report a bug within 2 months of purchase and it isn't resolved within 15 days, you're entitled to a full money-back refund.

Connect Odoo and EspoCRM the honest way

24-hour support · Report a bug within 2 months — unresolved in 15 days = full refund · Full source included

bambooforge.labs@gmail.com

More from BambooForge Labs — one vendor, the same standard: tested, source included, supported.

EspoCRM Connector PrestaShop Connector Audit Pro — audit, alerts & compliance
Availability
Odoo Online
Odoo.sh
On Premise
Odoo Apps Dependencies • CRM (crm)
• Contacts (contacts)
• Discuss (mail)
• Calendar (calendar)
Lines of code 6701
Technical Name bambooforge_espocrm_connector
LicenseOPL-1

BambooForge EspoCRM Connector

A read-only, import-first bridge from EspoCRM into Odoo 17: pull your Accounts, Contacts, Leads and Opportunities into native Odoo contacts and CRM records over the EspoCRM REST API — with a resilient job queue, dry-run safety, pre-flight validation and rollback so you stay in control. The connector never writes back to EspoCRM.

This page is the complete manual. If you follow it top to bottom you can install, connect, run your first import, automate it, and fix the common issues without contacting support.

  • Overview
  • Requirements
  • Installation
  • Step 1 — Create an API key in EspoCRM
  • Step 2 — Create the connection in Odoo
  • Step 3 — First import (dry-run, then live)
  • Field mapping & customization
  • Automation (scheduled actions)
  • Safety features
  • Troubleshooting
  • Frequently asked questions
  • Data, privacy & limits
  • Support & updates
  • Upgrading & version compatibility
  • Uninstallation
  • Changelog

Overview

The connector reads from EspoCRM over its REST API and creates/updates the matching Odoo records. It is one-way only — Odoo ← EspoCRM (pull). Nothing is ever written back to EspoCRM.

It covers four EspoCRM source entities mapped onto two Odoo models:

EspoCRM entity Lands in Odoo as Notes
Account res.partner (company) Imported as a company contact (is_company = True).
Contact res.partner (individual) Imported as an individual, linked to its account where available.
Lead crm.lead (type Lead) The raw EspoCRM status is kept on the record.
Opportunity crm.lead (type Opportunity) Amount, close date, probability and the raw EspoCRM stage are kept.

Because four EspoCRM entities map onto only two Odoo models, the connector is keyed by the EspoCRM entity end to end. Accounts and Contacts never collide on res.partner, and Leads never collide with Opportunities on crm.lead.

Every remote call goes through a queue: nothing is written to Odoo until a job runs, jobs retry with back-off on transient failures, and a circuit breaker pauses an instance that keeps failing.

Requirements

  • Odoo: 17.0, Community or Enterprise. The connector depends on Contacts (contacts) and CRM (crm), which install automatically.
  • EspoCRM: any EspoCRM server exposing the standard REST API at /api/v1. The connector uses only generic list and single-record endpoints, so it is version-tolerant. EspoCRM must be reachable from the Odoo server.
  • Python: no extra libraries beyond a standard Odoo 17 install.
  • Odoo access: any internal user can open the connector screens. The EspoCRM API key and webhook secret are stored in system-only fields, so only a Settings / Administration user can read or change them.
  • Network: outbound HTTPS from Odoo to your EspoCRM server. By default the connector refuses internal/loopback/private hosts as an SSRF safeguard (see Safety features).

Installation

  1. Copy bambooforge_espocrm_connector into your Odoo addons path.
  2. Restart the Odoo service.
  3. Open Apps, click Update Apps List, search for EspoCRM, and press Activate / Install. Dependencies (Contacts, CRM) install automatically.

No EspoCRM server is required to evaluate the connector: a mock EspoCRM REST API ships inside the module, so you can install, explore and run the full import flow against sample data before pointing it at a real server. To use it, set the instance Base URL to <your-odoo-url>/espocrm/mock_api with API Path api/v1 and any non-empty API key.

Step 1 — Create an API key in EspoCRM

The connector authenticates with a single API key, sent as the X-Api-Key header on every request. There is no OAuth and no token exchange. Create a read-capable API user in EspoCRM:

  1. Sign in to EspoCRM as an administrator.
  2. Go to Administration ▸ API Users.
  3. Click Create API User.
  4. Set Authentication Method to API Key. EspoCRM generates the key for you.
  5. Give the API user read access to Accounts, Contacts, Leads and Opportunities via its Roles (read-only is enough — the connector never writes to EspoCRM).
  6. Save, then copy the generated API Key. You will paste it into Odoo in Step 2.

Keep the key somewhere safe; EspoCRM shows it on the API user record, but treat it like a password.

Step 2 — Create the connection in Odoo

Open EspoCRM Connector ▸ Configuration ▸ Instances and create a record. The fields that matter:

Field What to enter
Name A label for this server, e.g. Production EspoCRM. Must be unique per company.
Company The Odoo company that owns the imported records.
Base URL Your EspoCRM server root, e.g. https://crm.example.com. For the bundled demo, use <your-odoo-url>/espocrm/mock_api.
Authentication API Key — the only supported method. The key is sent as the X-Api-Key header.
API Key The key from Step 1 (visible to administrators only).
API Path The REST path. Leave the default api/v1 unless your server differs.
Verify SSL Keep on for production. Turn off only for self-signed test certificates.
Allow internal host Off by default. Turn on only to reach an EspoCRM on localhost or a private network (this lowers the SSRF guard — see Safety features).
Timeout (s) HTTP timeout per request. Default 30.

Then click Test Connection. The connector calls a lightweight EspoCRM endpoint (App/user, falling back to a one-row Account list) and, on success, sets the state to Connected and seeds default Lead/Opportunity status mappings. If it fails, the exact error is stored on the form (last connection error) and recorded in Logs (see Troubleshooting).

Tip: use Quick Setup (button on the instance) to pick a use case and apply a recommended set of auto-import toggles and a safety profile in one step.

Step 3 — First import (dry-run, then live)

New instances start with Dry-run ON. In dry-run, import jobs simulate writes: instead of creating or changing Odoo records they produce Validation Results you can review under EspoCRM Connector ▸ Operations ▸ Validation Results. This lets you confirm what would happen before anything is written.

To run a first import:

  1. On the instance, open the Import tab and click Queue Account Import (and/or Queue Contact Import, Queue Lead Import, Queue Opportunity Import). This enqueues jobs; it does not block the UI.
  2. Jobs are processed by the Espocrm Queue Processor scheduled action (every minute), or immediately if you trigger it from Operations ▸ Queue Jobs.
  3. Review Validation Results while still in dry-run.
  4. When satisfied, open the instance, turn Dry-run OFF, and run the imports again to write the records for real.

Imported records land in the standard Odoo apps:

  • Accounts and Contacts → Contacts (companies and individuals).
  • Leads and Opportunities → CRM (the pipeline; Leads as type Lead, Opportunities as type Opportunity).

Each imported record is tracked by a binder keyed on the EspoCRM entity and remote id, so re-imports update the same Odoo record instead of duplicating it.

Field mapping & customization

  • Field Mappings (Configuration ▸ Field Mappings) map EspoCRM source fields to Odoo target fields, per EspoCRM entity, in the EspoCRM → Odoo direction. Click Suggest Mappings on the instance to seed the business-critical defaults, then adjust. Out of the box the suggested mappings include, for example:

    Entity EspoCRM source path Odoo target field
    Account name / website / emailAddress / phoneNumber name / website / email / phone
    Contact name / emailAddress / phoneNumber name / email / phone
    Lead name / emailAddress / accountName name / email_from / partner_name
    Opportunity name / amount / probability name / expected_revenue / probability
  • Per-field transforms: each mapping can coerce values (String, Integer, Float, Boolean, Uppercase/Lowercase, JSON String, CSV Join, First Item) or run a safe Python Expression (variables value and default_value). A Preview shows the result on a sample input before you save.

  • Schema Fields (Configuration ▸ Schema Fields) lists the discovered EspoCRM fields per entity alongside the Odoo target fields. Click Schema Introspection on the instance to refresh it; the connector samples a live record (or the bundled mock when the API is unreachable) and flattens its shape.

  • Suggest Mappings vs Schema Introspection: run introspection first if you want the intelligent suggestions (name/type similarity scored) rather than only the core blueprint set.

Automation (scheduled actions)

The module ships these scheduled actions (Settings ▸ Technical ▸ Scheduled Actions):

Scheduled action Default Purpose
Espocrm Queue Processor every 1 min Processes queued import jobs.
Espocrm Reconciliation every 15 min Pulls recent remote records for entities with auto-reconcile enabled and re-queues any that are missing or previously failed.
Espocrm Maintenance every 1 hr Recovers stale/locked jobs and trims old jobs and logs (per the retention settings).
Espocrm Flow Scheduler every 5 min Runs scheduled import flows.
Espocrm Flow Metrics every 1 hr Aggregates flow-run metrics.
Espocrm Auto Recover every 15 min Reopens a tripped circuit breaker once the cooldown passes and no blocking validation issues remain.

Turn on Auto-import / Auto-reconcile per entity on the instance (Accounts, Contacts, Leads, Opportunities) to let the scheduled actions keep things in sync hands-free.

Webhooks (not used in this version). EspoCRM can emit outbound webhooks, but wiring them into the import queue is a roadmap item. A route at /espocrm/webhook exists only so that existing subscriptions or health checks do not return 404 — it acknowledges with HTTP 200 and imports nothing. Do not rely on it to bring in data; use the scheduled import and reconciliation actions instead.

Safety features

  • Dry-run mode (dry_run_mode, ON by default) — import jobs simulate writes and produce Validation Results to review before you go live.
  • Pre-flight validation (validation_enabled) with Minimal / Standard / Strict business-validation profiles — gates risky writes; Standard is the default. Use Run Validation Sweep to validate pending/failed jobs on demand, and Auto-fix Open Issues to clear the ones the connector can resolve.
  • Resilient queue — every import is a job with retry and configurable back-off (fixed or exponential), plus a dead-letter state for jobs that exhaust their retries.
  • Circuit breaker (circuit_state: Open / Protected / Tripped) — after repeated failures (default threshold 5), or immediately on an auth/configuration error, the instance auto-pauses (Tripped). The Espocrm Auto Recover action reopens it after a 30-minute cooldown, or click Resume Sync.
  • Rollback snapshots (rollback_enabled) — imports capture a snapshot so you can undo a batch from Operations ▸ Rollback Snapshots.
  • SSRF guard — the connector refuses internal/loopback/private/reserved hosts (including cloud metadata addresses) for the Base URL unless Allow internal host is explicitly enabled.
  • Safety profiles — Conservative / Balanced / Aggressive presets set dry-run, validation, batch size and delete strategy together; click Apply Safety Profile.
  • Credential isolation — the API key and webhook secret live in system-only fields, readable and editable only by administrators.

Troubleshooting

Symptom Cause and fix
Test Connection fails with 401/403 Wrong or missing API key, or the API user lacks read access. Re-check Step 1 and the API Key field; confirm the API user's role grants read on Accounts/Contacts/ Leads/Opportunities.
"Base URL is not allowed … non-public address" The Base URL points at localhost or a private/reserved IP. For a self-hosted server, enable Allow internal host on the instance (test/self-hosted only).
SSL errors on Test Connection Self-signed or invalid certificate. Use a valid cert, or turn off Verify SSL for testing only.
"EspoCRM resource not found" / 404 Wrong API Path or Base URL. The default path is api/v1; the connector calls <base>/api/v1/<Entity>. Confirm the server root has no trailing path.
"EspoCRM rate limit reached" (429) The server is throttling. The client retries with back-off automatically; lower the per-entity import limit or raise API retry settings if it persists.
Jobs stay in Pending The Queue Processor is off or the instance is paused. Confirm the Espocrm Queue Processor scheduled action is active and the instance is not Paused.
Instance shows Tripped The circuit breaker tripped after repeated failures (or an auth error). Fix the server/credentials; Auto Recover reopens it after cooldown, or click Resume Sync.
Nothing is written after Import You are in Dry-run. Review Validation Results, then turn dry-run off and re-run the import.
Records imported twice Imports are keyed by EspoCRM entity + remote id via the binder, so this should not happen. If it does, check that two instances do not point at the same EspoCRM server.
Jobs end up Dead They exhausted their retries. Open Operations ▸ Queue Jobs (Dead Letter), read the error on the job and in Logs, fix the cause, then re-queue.

For anything else, Operations ▸ Logs records every API call, payload and error with a timestamp.

Frequently asked questions

Does this connector write anything back to EspoCRM? No. It is read-only and import-first: it lists and fetches records from EspoCRM and creates or updates the matching Odoo records. Write-back to EspoCRM is a roadmap item.

Which versions are supported? Odoo 17.0 on the Odoo side. On the EspoCRM side the connector uses only the generic /api/v1 list and single-record endpoints, so it is version-tolerant. Validate your exact build with the bundled mock first.

Do I need an EspoCRM server to evaluate it? No. A mock EspoCRM REST API ships inside the module. Point the Base URL at <your-odoo-url>/espocrm/mock_api (API Path api/v1, any API key) to run the full import flow against sample data.

How does authentication work? A single API key sent as the X-Api-Key header. Create an API user with API-Key authentication under Administration ▸ API Users in EspoCRM. No OAuth, no tokens.

Where do Leads and Opportunities end up? Both land in the CRM pipeline as crm.lead records — Leads as type Lead, Opportunities as type Opportunity (with amount, close date, probability and the raw EspoCRM stage).

Is it safe to run against production data? Yes. Dry-run is ON by default, validation gates risky writes, and rollback snapshots let you undo a batch. You decide when to go live.

Does it support real-time webhooks? Not in this version. Real-time inbound webhooks are a roadmap item; the /espocrm/webhook route exists only to avoid 404s and imports nothing. Use the scheduled import and reconciliation actions instead.

What support and refund policy do I get? Every request is answered within 24 hours, setup help included. If you report a bug within 2 months of purchase and it is not resolved within 15 days, you are entitled to a full money-back refund.

Data, privacy & limits

  • The connector reads Accounts, Contacts, Leads and Opportunities from your EspoCRM server and writes the corresponding Odoo res.partner and crm.lead records. It never writes, updates or deletes anything in EspoCRM.
  • Credentials (API key, webhook secret) are stored in administrator-only fields.
  • In scope today: read-only import of the four entities, per-field mapping with transforms, schema introspection, dry-run + validation + rollback, a resilient queue, and scheduled import/reconciliation.
  • Out of scope / roadmap: write-back to EspoCRM, inbound webhooks (the route is a no-op), and incremental modifiedAt filtering (v1 lists by maxSize/offset).

Support & updates

  • Support: bambooforge.labs@gmail.com — answered within 24 hours, setup help included.
  • Refund: report a bug within 2 months of purchase; if unresolved within 15 days, full refund.
  • Full source is included. Updates track the supported Odoo 17 / EspoCRM REST api/v1 line.

Upgrading & version compatibility

This build targets Odoo 17.0. Each Odoo major series (17.0, 18.0, 19.0) has its own dedicated build of this module — always install the build that matches your Odoo version. Mixing a build with a different Odoo series is not supported.

Patch upgrades (same series, e.g. 17.0.1.0.0 → later)

  1. Back up your database and filestore first.

  2. Replace the module folder with the newer build.

  3. Restart Odoo with the module updated:

    ./odoo-bin -c your.conf -u bambooforge_espocrm_connector -d your_db
    
  4. Odoo applies any schema/data changes automatically. Your existing records and configuration are preserved.

Cross-version migration (e.g. Odoo 17 → 18)

Upgrading Odoo itself is a database migration handled by Odoo's standard upgrade tooling. When you migrate the database to the next Odoo series, install the matching build of this module for that series. Data created by this module carries over with the database migration.

After any upgrade the module's scheduled actions resume on their normal cadence — no manual re-activation is required.

Uninstallation

You can remove this module at any time from Apps → (this module) → Uninstall, or from the command line. Uninstalling is clean and reversible by reinstalling — but note what is and is not deleted.

What is removed

  • The module's own tables and every record in them (20 models, prefixed espocrm.*) — this is the data this module created.
  • The menus, actions, views and reports this module installed.
  • Its scheduled actions (cron jobs) — they stop immediately on uninstall.
  • Connection records, credentials, field mappings, queue jobs and sync logs stored in Odoo.

What is preserved

  • Your remote platform is never touched. Uninstalling only removes the Odoo-side connector; products, customers and orders on the external store/service are untouched.
  • Records already imported into standard Odoo models (e.g. contacts, products, sales orders) remain — they are ordinary Odoo records once created.
  • Attachments and chatter messages on standard records are kept.

As always, take a database backup before uninstalling in production.

Changelog

17.0.1.0.0

Current release for Odoo 17.0. This build includes:

  • Sync EspoCRM accounts, contacts, leads & opportunities into Odoo 17 over the REST API.
  • Now with a live Sync Control Tower, bulk dead-letter & conflict consoles and a field-mapping studio. Read-only against EspoCRM, resilient queue, dry-run safety, auditable source.

Feature additions and fixes ship as new builds on the Odoo Apps store; this page and the module's version reflect the current published release. Always keep the build matched to your Odoo series (see Upgrading & version compatibility).

Odoo Proprietary License v1.0

This software and associated files (the "Software") may only be used (executed,
modified, executed after modifications) if you have purchased a valid license
from the authors, typically via Odoo Apps, or if you have received a written
agreement from the authors of the Software (see the COPYRIGHT file).

You may develop Odoo modules that use the Software as a library (typically
by depending on it, importing it and using its resources), but without copying
any source code or material from the Software. You may distribute those
modules under the license of your choice, provided that this license is
compatible with the terms of the Odoo Proprietary License (For example:
LGPL, MIT, or proprietary licenses similar to this one).

It is forbidden to publish, distribute, sublicense, or sell copies of the Software
or modified copies of the Software.

The above copyright notice and this permission notice must be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.

Please log in to comment on this module

  • The author can leave a single reply to each comment.
  • This section is meant to ask simple questions or leave a rating. Every report of a problem experienced while using the module should be addressed to the author directly (refer to the following point).
  • If you want to start a discussion with the author or have a question related to your purchase, please use the support page.
Community
  • Tutorials
  • Documentation
  • Forum
Open Source
  • Download
  • Github
  • Runbot
  • Translations
Services
  • Odoo.sh Hosting
  • Support
  • Upgrade
  • Custom Developments
  • Education
  • Find an Accountant
  • Find a Partner
  • Become a Partner
About us
  • Our company
  • Brand Assets
  • Contact us
  • Jobs
  • Events
  • Podcast
  • Blog
  • Customers
  • Legal • Privacy
  • Security

Odoo is a suite of open source business apps that cover all your company needs: CRM, eCommerce, accounting, inventory, point of sale, project management, etc.

Odoo's unique value proposition is to be at the same time very easy to use and fully integrated.

Website made with