Odoo ERP Connector
Full-featured Odoo 19 ERP integration for OpenClaw. Control your entire business via natural language chat commands.
📦 Full Source Code: https://github.com/NullNaveen/openclaw-odoo-skill
Quick Install
\ash
npx clawhub install odoo-erp-connector
\
Overview
The Odoo ERP Connector bridges OpenClaw and Odoo 19, enabling autonomous, chat-driven control over 153+ business modules including:
- - Sales & CRM
- Purchasing & Inventory
- Invoicing & Accounting
- Projects & Task Management
- Human Resources
- Fleet Management
- Manufacturing (MRP)
- Calendar & Events
- eCommerce
All operations use smart actions that handle fuzzy matching and auto-creation workflows.
Capabilities
Sales & CRM
- - Create quotations with dynamic line items
- Manage sales orders (draft → confirmed → done)
- Search and filter orders by status, customer, date range
- Create and qualify leads and opportunities
- Move leads through CRM pipeline stages
- View full sales pipeline with revenue forecasting
Purchasing
- - Create purchase orders from vendors
- Manage PO status (draft → purchase → received)
- Receive and validate goods
- Search and filter POs by vendor, status, date
- Track purchase history and vendor performance
Inventory & Products
- - Create products (consumables, stockable, services)
- Query stock levels and availability
- Set reorder points and receive low-stock alerts
- Search products by name, code, or category
- Track stock movements and valuations
Invoicing & Accounting
- - Create and post customer invoices
- Manage payment terms and schedules
- Query unpaid and overdue invoices
- Search by customer, date range, or amount
- Track invoice status (draft → posted → paid)
Projects & Tasks
- - Create projects and organize by team/status
- Create tasks with priority, dates, and assignments
- Log timesheets and track project hours
- Search and filter tasks by project, status, assignee
- Manage project stages and closure
Human Resources
- - Create employees and departments
- Manage job titles and work schedules
- Process expense reports and reimbursements
- Search employees by name, department, job
- Track leave requests and attendance
Fleet Management
- - Create and track vehicles
- Log odometer readings and service records
- Track maintenance schedules and costs
- Search fleet by license plate, status, brand
- Generate fleet reports
Manufacturing (MRP)
- - Create Bills of Materials (BOMs)
- Manage manufacturing orders (MOs)
- Track component requirements and production status
- Search MOs by product or status
- Link BOMs to product variants
Calendar & Events
- - Create meetings and events with attendees
- Set reminders and locations
- Search events by date range or attendee
- Track calendar availability
eCommerce
- - Publish products to website
- View website orders and customer activity
- Manage product visibility and pricing
Command Examples
Sales
- - "Create a quotation for Acme Corp with 10 Widgets at $50 each"
- "Confirm sales order SO00042"
- "Show me all draft quotations from the past week"
- "What's the total revenue from completed orders this month?"
- "Create a quote for Rocky with product Rock"
CRM
- - "Create a lead for Rocky, email rocky@example.com, potential $50k deal"
- "Move lead #47 to Qualified stage"
- "Show me the sales pipeline with all open opportunities"
- "What leads are at proposal stage?"
- "Create an opportunity for Acme with $100k expected value"
Purchasing
- - "Create a PO for 500 widgets from Supplier ABC"
- "Confirm purchase order PO00123"
- "Show all pending purchase orders"
- "Get me the vendor history for ABC Supplies"
- "What's on order that's overdue?"
Inventory & Products
- - "Create a new product: TestWidget, $25 price, min stock 10"
- "Show products with stock below 20 units"
- "What's the stock level for Widget X?"
- "Search for all consumable products"
- "Set reorder point for Product Y to 50 units"
Invoicing
- - "Create an invoice for Acme Corp with 5 units at $50 each"
- "Show me unpaid invoices"
- "What invoices are overdue?"
- "Post invoice INV-001"
- "Send a reminder for invoice INV-002"
Projects & Tasks
- - "Create a project called Website Redesign"
- "Create a task 'Fix login button' in Website Redesign project"
- "Show me all tasks assigned to me"
- "Log 3 hours of work on task #42"
- "What's the status of the Website Redesign project?"
HR
- - "Create employee John Smith, job title Developer"
- "Create department Engineering"
- "Show me all employees in Engineering"
- "Submit expense report for $45.99"
- "What are the pending leave requests?"
Fleet
- - "Create vehicle: Tesla Model 3, license plate TESLA-001"
- "Log odometer reading: 50,000 miles for vehicle #1"
- "Show all vehicles with service due"
- "What's the maintenance cost for this month?"
- "Search for blue vehicles"
Manufacturing
- - "Create BOM: Widget contains 3 Components A and 2 Components B"
- "Create manufacturing order: produce 50 Widgets"
- "Confirm production order #1"
- "What's the status of MO-001?"
- "Show all in-progress manufacturing orders"
Calendar
- - "Create meeting: Team Standup, tomorrow at 10am, 1 hour"
- "Show me my meetings for next week"
- "What events do I have on the 15th?"
- "Schedule a 2-hour planning session with the team"
eCommerce
- - "Publish Widget X to the website"
- "Show me website orders from this week"
- "What's my website revenue?"
Smart Actions
The connector handles fuzzy/incomplete requests with intelligent find-or-create logic.
How Smart Actions Work
Example: "Create quotation for Rocky with product Rock"
The system:
- 1. Searches for a customer named "Rocky" (case-insensitive,
ilike matching) - If not found: Creates a new customer "Rocky" (auto-company flag)
- Searches for product "Rock"
- If not found: Creates a basic product "Rock" (consumable type, default price $0)
- Creates the quotation, linking both the found/created customer and product
- Reports what was found vs. created:
- "Created quotation QT-001 for new customer Rocky with 1 × Rock at $0.00"
This pattern applies across all smart actions:
- -
smart_create_quotation() — customer + products - INLINECODE2 — vendor + products
- INLINECODE3 — partner (optional)
- INLINECODE4 — project + task
- INLINECODE5 — department
- INLINECODE6 — event only (no dependencies)
Benefits
- - Fuzzy matching: Searches are case-insensitive and forgiving
- Auto-creation: Missing dependencies are created automatically
- Transparency: Each response explains what was created vs. found
- No IDs needed: Use names instead of Odoo IDs
- Batch operations: Create multiple related records in one call
Architecture
Core Components
OdooClient — Low-level XML-RPC wrapper
- - Connects to Odoo 19 instance
- Handles authentication via API key
- Provides
search(), read(), create(), write(), unlink() methods - Built-in retry logic and error handling
Model Ops Classes — Business logic for each module
- -
PartnerOps — Customers/suppliers - INLINECODE13 — Quotations and sales orders
- INLINECODE14 — Customer invoices
- INLINECODE15 — Products and stock
- INLINECODE16 — Leads and opportunities
- INLINECODE17 — POs and vendors
- INLINECODE18 — Projects and tasks
- INLINECODE19 — Employees, departments, expenses
- INLINECODE20 — BOMs and MOs
- INLINECODE21 — Events and meetings
- INLINECODE22 — Vehicles and odometer
- INLINECODE23 — Website orders and products
SmartActionHandler — High-level natural-language interface
- - Wraps all Ops classes
- Implements find-or-create workflows
- Fuzzy name matching (case-insensitive)
- Multi-step transaction orchestration
- Detailed response summaries
Field Handling
The connector auto-detects required vs. optional fields in Odoo 19:
- - Implicit defaults: Fields with Odoo defaults (e.g., state) are omitted
- Smart creation: Auto-fills reasonable defaults for optional fields
- Error reporting: Missing required fields raise clear
OdooError with field name
Configuration
config.json Format
CODEBLOCK0
Getting Your API Key
- 1. Log in to your Odoo instance
- Go to Settings → Users & Companies → Users
- Open your user record
- Scroll to Access Tokens
- Click Generate Token
- Copy the token and paste into INLINECODE25
Environment Variables
Alternatively, set in .env:
CODEBLOCK1
The client auto-loads from .env if config.json is missing.
Python API
Basic Usage
CODEBLOCK2
Smart Actions API
CODEBLOCK3
Low-Level Ops API
CODEBLOCK4
Response Format
All API methods return structured dictionaries:
Smart Action Response
CODEBLOCK5
Standard Response
CODEBLOCK6
Error Handling
The connector uses custom exceptions:
CODEBLOCK7
Supported Odoo Modules
The connector supports 153+ installed modules in Odoo 19:
Core
Sales & CRM
- - sale, crm, salemanagement, websitesale, event, survey
Purchasing
- - purchase, purchasestock, purchaserequisition
Inventory
- - stock, stockintrastat, stockdropshipping
Accounting
- - account, accountaccountant, accountanalytic, account_payment
HR
- - hr, hrattendance, hrexpense, hrcontract, hrholidays, hrorgchart
Projects
- - project, projectenterprise, taskbase, projecttimesheetforecast
Manufacturing
- - mrp, mrpbyproduct, quality, batch, shelflife
Fleet
Marketing
- - marketingautomation, emailmarketing, massmailing, sms, websiteform
eCommerce
- - websitesale, websitesaleanalytics, websitesalecomparison, websiteform_project
Tools
- - calendar, documents, spreadsheet, discuss, mail, knowledge
Plus 50+ more specialized modules
Limits & Constraints
- - Search limit: 100 records by default (configurable)
- Timeout: 60 seconds per request (configurable)
- Retries: 3 automatic retries on network failure
- Concurrency: Single-threaded; queue requests if needed
- Rate limiting: Follow your Odoo instance's API limits
Troubleshooting
Connection Issues
- - Verify
url, db, username, api_key in config.json - Check Odoo server is running: INLINECODE33
- Ensure API key is generated in Odoo user settings
- Check network connectivity and firewall rules
Authentication Errors
- - Regenerate API key in Odoo
- Verify username (email format)
- Check that the user has API access enabled
- Ensure database name matches exactly
Missing Field Errors
- - Field names must match Odoo 19 exactly (e.g.,
product_tmpl_id, not product_id) - Some fields are read-only in Odoo (state, computed fields)
- Check Odoo model definition: Settings → Technical → Database Structure → Models
Smart Action Issues
- - Fuzzy matching is case-insensitive but searches only the
name field - For exact matching, use the low-level Ops API with
id directly - If a name exists in multiple records, the first match is used
Performance
- - Large searches (limit > 100) may timeout
- Use date range filters:
date_from, INLINECODE39 - Consider batch operations for bulk data
Examples in OpenClaw
Natural Language Sales Order
CODEBLOCK8
Pipeline Status Check
CODEBLOCK9
Inventory Alert
CODEBLOCK10
Development
Project Structure
CODEBLOCK11
Running Tests
CODEBLOCK12
Adding a New Smart Action
- 1. Implement the method in
SmartActionHandler class - Use
find_or_create_* primitives for dependencies - Return a dict with
summary, the main record, and creation details - Add docstring with example usage
- Test with INLINECODE43
Example:
CODEBLOCK13
License & Support
This connector is part of the OpenClaw project. For issues, questions, or contributions, contact the development team.
Last Updated: 2026-02-09
Odoo Version: 19.0
Python: 3.10+
Status: Production Ready