Skip to content

Why Odoo for my ERP

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.

As a solo developer running several projects, I needed to consolidate:

NeedPrevious toolProblem
Projects and tasksGitHub Issues + TrelloScattered data
Commit trackingGitHub aloneNo link to business tasks
Contacts and leadsSpreadsheet + notesNo structured CRM
Time spentNothingQuote estimates done by guesswork
PropertyValue
LicenseLGPL v3 (free, self-hosted)
LanguagePython 3 + PostgreSQL
ArchitectureMVC with proprietary ORM
APIXML-RPC (native) + REST (module)
ExtensibilityInheritance-based addon system

CriterionOdoo 18ERPNextDolibarrNotion/Trello
Open-sourceYes (Community)YesYesNo
Self-hostedYesYesYesNo
Native APIXML-RPC + RESTRESTRESTREST
Built-in modules30+ apps13 modules20+ modulesThird-party apps
ExtensibilityPython (addons)Python/JSPHPLimited
UIModernModernDatedModern
Resources1.5 GB RAM2+ GB RAM512 MB RAMCloud

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

BenefitDetail
OwnershipData on my VPS, not at a third party
No limitsUnlimited rows, users, API calls
ResilienceWorks even offline
GDPRCompliant 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:

addons/project_github_sync/models/project_task.py
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',
)

To address the GitHub centralisation need, I built a custom addon.

FeatureDescription
Two-way syncGitHub issues ↔ Odoo tasks
Linked commitsEvery commit referencing an issue is recorded
Synced statesClosing a GitHub issue closes the Odoo task
Configurable mappingMap each repo to an Odoo project
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.

Webhooks

XML-RPC

Odoo 18

project.project · linked repos

project.task · synced issues

project.task.commit · history

N8N · github-project-sync

Parse event type

Look up mapping · Data Table

Transform data

Call Odoo XML-RPC

GitHub

Issues · opened, closed, edited, labeled…

Pull Requests

Push events · commits


StrengthDetail
Project managementNative Kanban/Gantt UI
Modern UIResponsive, intuitive
Stable APIXML-RPC is documented with few breaking changes
EcosystemThousands of community addons
LimitImpactAlternative if critical
No real-time collaborationNo simultaneous editingNotion, Outline
Learning curveTraining neededTrello, Plane
Paid EnterpriseMarketing automation, signaturesBudget or N8N workaround
Memory overhead~1.5 GB RAM minimumDolibarr if resources are tight

Odoo is fast to deploy (short time-to-market) but customisation can be expensive:

Type of adaptationEffortExample
ConfigurationLowChange displayed fields
Existing moduleMediumInstall an OCA addon
Custom developmentHighBuild project_github_sync
If your top need is…Pick…
Real-time collaborative docsNotion, Outline
Lightweight ERP + simple invoicingDolibarr
Manufacturing / productionERPNext
Pure task managementPlane, Focalboard
Full self-hosted ERP + APIOdoo Community
EvolutionModule/ActionExpected benefit
Full CRMNative moduleStructured sales pipeline
Automatic quotesTimesheets + templatesHistory-based estimation
Marketing automationEnterprise or N8NNurturing sequences