Odoo's CRM app, or one custom process as code you own?
Odoo, the open-core business suite
People ask this as: odoo crm alternative when the sales process is too custom for the suite
Odoo's CRM is one app inside a business suite that a company buys and runs; this is a framework that generates one commercial process as code. The research this page reads says outright that Odoo owns the self-host SMB buyer and that this project does not compete for that buyer directly — so most people weighing these two should take Odoo. The narrow case for the framework is a process specific enough that no suite app fits it, plus a requirement that every approval stay explainable long afterwards.
Where this stops
Read this before the rest of the page. Every line below is a thing this does not do.
Every fact about another project on this page is single-sourced to
docs/strategy/COMPETITOR_MAP.md and dated 2026-08-04. Nothing from
another project was installed, configured or run, and there is no network access here to re-verify
any of it.
- No hands-on evaluation: nothing from the other product was installed, configured or run to produce this page.
- Every competitor fact is single-sourced to docs/strategy/COMPETITOR_MAP.md and dated 2026-08-04; the Enterprise-only-AI point is flagged there as secondary-sourced and is flagged here the same way.
- No feature comparison, no pricing comparison and no migration path — the source carries none of the three.
- Licence descriptions are factual summaries, not legal advice.
- This framework is not a product a business buys: no hosted CRM, no free tier, no account (L-07).
- No authentication, tenancy or RBAC, so nothing here is ready for a sales team to log into (L-01).
- No email, calendar or marketing integration, and no import or export, so this does not connect to a suite you already run (L-05, L-06).
- Real customer data cannot go in yet: no export and no erasure path means a subject request cannot be serviced (L-09).
No authentication, tenancy or RBAC. The server is local-development-only. An actor header is an assertion, not an identity. Do not expose it to a network. Every claim and every limitation is on one page.
Where Odoo wins
It is a suite, and CRM is one app inside it: the CRM arrives attached to the rest of the business system rather than as something you integrate later. The research file records a community edition under LGPL, deployment on Odoo.sh or self-hosted, a monorepo at roughly 53.5k GitHub stars as of August 4, 2026, and a target buyer running from SMB to mid-market — a buyer with a purchase order, not a repository. Its summary of the position is blunt and worth repeating rather than softening: Odoo owns the self-host SMB buyer, not the developer builder, and this project does not compete for that buyer directly.
Against this framework's own ledger the asymmetry is not subtle. No authentication, tenancy or RBAC (L-01). No email, calendar or marketing integration — a notification provider contract exists and no adapter sends anything to anyone (L-05). No import, export, dedupe, merge, bulk edit, saved views or global search (L-06). No hosted product to sign up for; the output is an application in your repository (L-07). And you cannot put real customer data in this yet: with no export and no erasure path, a data-subject access or deletion request cannot be serviced at all (L-09). If a sales team is meant to log in on Monday, that list is the whole answer.
Pipeline reporting is the same story in miniature. Reporting pipeline is recorded here as partially supported, not as a feature: there are no saved views, no dashboards and no report builder to hand to a sales manager.
Where this is different
Licensing shape. The research file records Odoo as the canonical open-core case — LGPL community alongside a proprietary Enterprise edition, with Studio, mobile and AI gated, and it notes from a secondary source that all AI features are Enterprise-only as of v19. That hedge travels with the claim: it is secondary-sourced there and it stays secondary-sourced here. This repository is MIT, one edition, nothing gated (ADR-023). The counterweight is the same one as everywhere else on this site: nothing is gated partly because there is not very much to gate, and none of the absences above carries a delivery date.
Customization model. The file describes Odoo customization as Python modules written in their framework idiom, and calls it upgrade-fragile, with no agent substrate for building — AI there is an Enterprise UI feature rather than a way to author the system. Here customization is the deliverable rather than a tolerated extension: a customer-authored package attaches and detaches with the kernel's fingerprint unchanged and reaches other packages only through declared capabilities (C-13), and generated modules evolve through explicit revisions and append-only named migrations rather than rewritten history (C-19).
What the process holds while it runs. Commercial policy is deterministic code rather than a model's judgement, and a renewal at or above the threshold stops and waits for a named human (C-03). The same refusal holds where the money is: an agent actor asking to approve a discounted quote is rejected with a 403 and code HUMAN_APPROVAL_REQUIRED, and only a human user actor can decide (C-21). That refusal is asserted by a test rather than promised in a README (C-04), and every mutation leaves an audit event and a step-level trace behind it (C-16). This is not a longer feature list than a suite's. It is a much shorter one that can be accounted for line by line.
How to choose
Choose Odoo if you are buying a CRM rather than building one — especially if you also need the rest of the suite around it, if it has to be running this quarter, if configuration by an admin or an implementation partner is how customization is meant to happen at your company, and if the Enterprise gating fits your budget.
Choose this framework in the narrow case: one commercial process specific enough that no suite app fits it, which must live as reviewable code in your repository, where a coding agent does most of the writing, and where you can supply authentication, hosting and data governance yourself — because this supplies none of them.
If both are true — you already run a suite and one process does not fit it — these are not mutually exclusive and this page does not argue that they are. It does have to say that no integration exists in this direction: there is no integration runtime, no adapter and no import, so connecting the two is engineering work you would own (L-05, L-06).
What this comparison does not cover
Nothing was installed or run. Every Odoo fact traces to docs/strategy/COMPETITOR_MAP.md, researched on August 4, 2026, and this environment has no network access to check any of it.
No feature comparison. That file does not enumerate Odoo's CRM features, so this page cannot and does not — no statement is made about its pipeline, its reporting, its mobile app or its AI features beyond the licensing note above.
No pricing. The file carries no Odoo price, so this page carries none either, and the Enterprise-only-AI point is repeated with the same secondary-source hedge it was recorded under.
Licence descriptions are factual summaries of published texts and third-party commentary, not legal advice. Open-core, LGPL and share-alike questions belong with counsel before anyone relies on them.
No migration path and no upgrade analysis. There is no import of any kind here (L-06), and nothing is claimed about Odoo's upgrade behaviour beyond the file's own word for it, upgrade-fragile. When that research is refreshed, this entry must be re-read against it.
The evidence this page rests on
Claims and limitations are printed from site/claims.json word for word. Job statuses come from docs/benchmarks/jobs.json; a job with no page of its own is listed with its status rather than linked.
Claims
- C-03 Commercial policy is deterministic code, not a model's judgement: a renewal at or above the threshold stops and waits for a named human.
LimitProven for the built-in renewal object and its single value threshold. A general policy engine over arbitrary custom objects does not exist.
- C-04 The agent cannot approve on the human's behalf. A test asserts the refusal, so the boundary is a property of the system rather than a promise in a README.
LimitThe actor is asserted, not authenticated: there is no auth, tenancy or RBAC, and an actor header is not identity. This holds a boundary against an honest agent, not against an attacker with network access.
- C-13 A customer-authored domain package attaches and detaches with the kernel's fingerprint unchanged, and reaches another package only through a capability it declares.
LimitNo scaffold, no registry, no marketplace, and no sandboxing — package code runs with the host process's authority. Detaching leaves its data behind; there is no uninstall.
- C-16 Every mutation goes through a module service or a named workflow, and leaves an audit event and a step-level trace behind it.
LimitAudit records what the process did under an asserted actor. It is not a tamper-evident or externally attestable log, and it is not a compliance control.
- C-19 Generated modules evolve without rewriting history: explicit revisions, a checked-in state file and append-only named migrations.
LimitThe view is source-only: what the checked-in revisions and migrations say is knowable; what a particular database has actually applied is not.
- C-21 The same refusal holds where the money is: an agent actor asking to approve a discounted quote is refused with a 403, and only a human user actor can decide.
LimitThe assertion lives inside a composite end-to-end test rather than a test named for it, so the citation is a file and a line rather than a test name. Extracting it into a named test is tracked in docs/strategy/GO_TO_MARKET.md; until then, cite the line.
Limitations
- L-01 No authentication, tenancy or RBAC. The server is local-development-only. An actor header is an assertion, not an identity. Do not expose it to a network.
- L-05 No email, calendar or marketing integrations. An in-memory notification provider contract exists. No adapter sends anything to anyone.
- L-06 No import, export, dedupe, merge, bulk edit, saved views or global search. Table stakes in every commercial CRM, and none of them has a milestone yet. This is recorded deliberately rather than left for you to discover.
- L-07 This is a framework, not a product you sign up for. There is no hosted CRM, no free tier and no account. The output is an application in your repository that you run.
- L-09 You cannot put real customer data in this yet. A CRM is a personal-data system by definition, and this one has no authentication, no tenancy, no export and no erasure path — so there is no way to service a data-subject access or deletion request with it. Data governance is designed and unimplemented. The one thing that does hold today: lead scoring is deterministic, versioned and explainable, not a model's judgement about a person.
Jobs it covers
- JTBD-01 Manage a custom CRM business object end to end — validated end to end
- JTBD-02 Request commercial approval on a deal — validated end to end
- JTBD-13 Report pipeline — partially supported
- JTBD-14 Integrate email / calendar / marketing — not supported
- JTBD-15 Enforce team / tenant permissions — not supported
- JTBD-AN-02 Create a report from approved metrics/dimensions — not supported
- JTBD-AN-03 Create a role-aware dashboard — not supported
- JTBD-CO-01 Create a Quote from a Price Book — validated end to end
- JTBD-CO-03 Request a discount under a deterministic policy — validated end to end
- JTBD-DO-01 Import records from CSV — not supported
- JTBD-DO-04 Export records — not supported