Why Odoo for my ERP
1. What? — Definition and context
Section titled “1. What? — Definition and context”Odoo is a horizontal ERP/CRM: a generalist piece of software designed to be used across every industry. The same technical foundation serves very different companies, with adaptation through configuration, extra modules or custom development.
Personal context
Section titled “Personal context”As a solo developer running several projects, I needed to consolidate:
| Need | Previous tool | Problem |
|---|---|---|
| Projects and tasks | GitHub Issues + Trello | Scattered data |
| Commit tracking | GitHub alone | No link to business tasks |
| Contacts and leads | Spreadsheet + notes | No structured CRM |
| Time spent | Nothing | Quote estimates done by guesswork |
Odoo Community at a glance
Section titled “Odoo Community at a glance”| Property | Value |
|---|---|
| License | LGPL v3 (free, self-hosted) |
| Language | Python 3 + PostgreSQL |
| Architecture | MVC with proprietary ORM |
| API | XML-RPC (native) + REST (module) |
| Extensibility | Inheritance-based addon system |
2. Why? — Stakes and motivations
Section titled “2. Why? — Stakes and motivations”Comparing the alternatives
Section titled “Comparing the alternatives”| Criterion | Odoo 18 | ERPNext | Dolibarr | Notion/Trello |
|---|---|---|---|---|
| Open-source | Yes (Community) | Yes | Yes | No |
| Self-hosted | Yes | Yes | Yes | No |
| Native API | XML-RPC + REST | REST | REST | REST |
| Built-in modules | 30+ apps | 13 modules | 20+ modules | Third-party apps |
| Extensibility | Python (addons) | Python/JS | PHP | Limited |
| UI | Modern | Modern | Dated | Modern |
| Resources | 1.5 GB RAM | 2+ GB RAM | 512 MB RAM | Cloud |
Decision drivers for Odoo
Section titled “Decision drivers for Odoo”1. Complete and integrated ERP
Odoo Community ships the essential modules for free:
- Projects — Kanban, Gantt, tasks, sub-tasks
- CRM — Pipeline, leads, opportunities
- Contacts — Companies, individuals, tags
- Timesheets — Time tracking per task
Every module shares the same database and is naturally interconnected.
2. Native N8N integration via XML-RPC
The Odoo XML-RPC API is stable and well documented. N8N talks to Odoo directly without Zapier or paid integrations:
// Create a task from a GitHub webhook{ "model": "project.task", "method": "create", "args": [{ "name": "Issue #123: Fix login bug", "project_id": 1, "x_github_issue_id": 123, "x_github_url": "https://github.com/owner/repo/issues/123" }]}3. Self-hosted = data sovereignty
| Benefit | Detail |
|---|---|
| Ownership | Data on my VPS, not at a third party |
| No limits | Unlimited rows, users, API calls |
| Resilience | Works even offline |
| GDPR | Compliant by design |
4. Python extensibility (custom addons)
Odoo’s inheritance system lets you extend any model. Every custom field uses the x_ prefix, which never collides with Odoo’s native fields:
class ProjectTask(models.Model): _inherit = 'project.task'
x_github_issue_id = fields.Integer(string='GitHub Issue Number') x_github_url = fields.Char(string='GitHub URL') x_github_repo = fields.Char(string='GitHub Repo (owner/repo)') x_github_commit_ids = fields.One2many( 'project.task.github.commit', 'task_id', string='Linked Commits', )3. How? — The project_github_sync addon
Section titled “3. How? — The project_github_sync addon”To address the GitHub centralisation need, I built a custom addon.
Features
Section titled “Features”| Feature | Description |
|---|---|
| Two-way sync | GitHub issues ↔ Odoo tasks |
| Linked commits | Every commit referencing an issue is recorded |
| Synced states | Closing a GitHub issue closes the Odoo task |
| Configurable mapping | Map each repo to an Odoo project |
Data models
Section titled “Data models”project.project├── x_github_sync_enabled (boolean)├── x_github_repo (char): "owner/repo"└── task_ids → project.task
project.task├── x_github_issue_id (integer)├── x_github_url (char)├── x_github_repo (char)├── x_github_commit_ids → project.task.github.commit├── x_github_commit_count (integer, compute)├── x_github_milestone_id (integer)└── x_github_parent_issue_id (integer)
project.task.github.commit (new model)├── task_id → project.task├── sha (char)├── sha_short (char)├── message (text)├── author (char)├── url (char)└── commit_date (datetime)The addon also adds 13 x_claude_* fields for Claude Code telemetry, 2 x_ai_*_triaged_at fields for AI double-triage, and 2 x_estimated_hours / x_complexity fields for estimation. See Odoo 18 on Docker for the full list.
Integration architecture
Section titled “Integration architecture”4. What if? — Limits and evolutions
Section titled “4. What if? — Limits and evolutions”What Odoo does well
Section titled “What Odoo does well”| Strength | Detail |
|---|---|
| Project management | Native Kanban/Gantt UI |
| Modern UI | Responsive, intuitive |
| Stable API | XML-RPC is documented with few breaking changes |
| Ecosystem | Thousands of community addons |
What Odoo does less well
Section titled “What Odoo does less well”| Limit | Impact | Alternative if critical |
|---|---|---|
| No real-time collaboration | No simultaneous editing | Notion, Outline |
| Learning curve | Training needed | Trello, Plane |
| Paid Enterprise | Marketing automation, signatures | Budget or N8N workaround |
| Memory overhead | ~1.5 GB RAM minimum | Dolibarr if resources are tight |
The hidden cost of customisation
Section titled “The hidden cost of customisation”Odoo is fast to deploy (short time-to-market) but customisation can be expensive:
| Type of adaptation | Effort | Example |
|---|---|---|
| Configuration | Low | Change displayed fields |
| Existing module | Medium | Install an OCA addon |
| Custom development | High | Build project_github_sync |
Decision grid: Odoo or something else?
Section titled “Decision grid: Odoo or something else?”| If your top need is… | Pick… |
|---|---|
| Real-time collaborative docs | Notion, Outline |
| Lightweight ERP + simple invoicing | Dolibarr |
| Manufacturing / production | ERPNext |
| Pure task management | Plane, Focalboard |
| Full self-hosted ERP + API | Odoo Community |
Future evolutions under consideration
Section titled “Future evolutions under consideration”| Evolution | Module/Action | Expected benefit |
|---|---|---|
| Full CRM | Native module | Structured sales pipeline |
| Automatic quotes | Timesheets + templates | History-based estimation |
| Marketing automation | Enterprise or N8N | Nurturing sequences |
Related pages
Section titled “Related pages”Infrastructure
Section titled “Infrastructure”- Odoo 18 on Docker — Deployment guide
- VPS Architecture — Overview
Workflows
Section titled “Workflows”- GitHub-Odoo sync — Full sync workflow
- N8N in queue mode — Automation
Reference
Section titled “Reference”- Glossary — ERP, XML-RPC, addon