If you sell anything B2B — or run any team that tracks leads, deals, accounts, or support tickets — you have a CRM problem the moment your pipeline outgrows a spreadsheet. HubSpot Free locks your data behind a portal. Salesforce is $165/user/month before you add a single integration. Pipedrive's "unlimited" tier still charges per seat. The math stops working somewhere between 3 and 20 seats.
This guide compares the four self-hosted CRMs that are actually production-ready in 2026: SuiteCRM (the SugarCRM fork), EspoCRM (the lightweight PHP option), Odoo Community (the ERP-shaped Swiss army knife), and Twenty (the YC W24 newcomer rewriting the category on a modern stack). I have deployed all four on real production data, and this is the comparison I wish I had when I cancelled my HubSpot subscription.
You can also browse the full CRM category on the SelfHostStack directory for adjacent tools (contacts sync, email marketing, scheduling).
Quick comparison table
| Tool | Stack | License | DB | Mobile | API | Best for |
|---|---|---|---|---|---|---|
| SuiteCRM | PHP 8.1 / Laravel-influenced MVC | AGPL-3.0 | MySQL/MariaDB | Responsive web | REST + GraphQL | Mid-market sales orgs that need workflows, approvals, reporting |
| EspoCRM | PHP 8 / Slim framework | AGPL-3.0 | MySQL/MariaDB | Responsive web + PWA | REST | SMBs and agencies that want a clean UI and easy customization |
| Odoo Community | Python / Odoo framework | LGPL-3.0 | PostgreSQL | Native iOS/Android | XML-RPC + JSON-RPC | Companies that want CRM + invoicing + inventory in one platform |
| Twenty | NestJS + React + PostgreSQL | AGPL-3.0 | PostgreSQL | Responsive web | GraphQL + REST | Tech-forward teams of 5-50 who want a modern UI and clean data model |
The short version: EspoCRM is the easiest to deploy and use, SuiteCRM is the most feature-complete, Odoo Community is the best value if you also need ERP, and Twenty is the future — but you should wait 6 months if you are risk-averse.
SuiteCRM (the legacy powerhouse)
SuiteCRM is a 2014 fork of SugarCRM Community Edition, maintained by SalesAgility. It has every feature a sales org expects: lead capture, opportunity stages, quote-to-cash, workflow engine, approval chains, contract management, reports, dashboards, forecast modules, and an AOP (Advanced OpenPortal) for customer self-service.
A minimal production deploy on Docker:
version: "3.8"
services:
suitecrm-db:
image: mariadb:11
restart: unless-stopped
environment:
MARIADB_DATABASE: suitecrm
MARIADB_USER: suitecrm
MARIADB_PASSWORD: change_me_strong
MARIADB_RANDOM_ROOT_PASSWORD: "yes"
volumes:
- ./dbdata:/var/lib/mysql
suitecrm:
image: suitecrm/suitecrm:8
restart: unless-stopped
depends_on:
- suitecrm-db
environment:
DB_HOST: suitecrm-db
DB_NAME: suitecrm
DB_USER: suitecrm
DB_PASSWORD: change_me_strong
SITE_URL: https://crm.example.com
ports:
- "8080:80"
volumes:
- ./suitecrm-data:/bitnami/suitecrm
Pros
- Most feature-complete open-source CRM. Has lead scoring, marketing campaigns, a BPMN-style workflow designer, granular role-based permissions, and a built-in report writer.
- Mature ecosystem: 200+ extensions on the SuiteCRM Store, most free or under $200/year.
- Supports massive datasets: deployments with 5M+ contacts and 200+ concurrent users are documented.
- REST and GraphQL APIs both available; Zapier and n8n connectors exist.
Cons
- UI is dated — 2014 Sugar aesthetic. Theming helps but it never looks modern.
- PHP monolith. Memory hungry: expect 512MB minimum, 1-2GB for non-trivial installs.
- The upgrade path between minor versions is occasionally painful; LTS releases are safer than chasing the latest.
- Documentation is fragmented. The community forum is the source of truth for most "how do I…" questions.
When NOT to use it: if you have 5 users and a modern product, EspoCRM will get you 80% there in 20% of the setup time. SuiteCRM's workflow engine pays off only when you actually have 10+ people and 3+ pipelines.
EspoCRM (the lightweight, configurable choice)
EspoCRM is a single-tenant PHP application written in 2014 and actively developed since. The architectural philosophy is the opposite of SuiteCRM: small core, lots of custom entities, clean admin UI, and a no-code layout editor for almost everything.
A minimal Docker deploy is two services and ~200MB RAM:
version: "3.8"
services:
espocrm-db:
image: mariadb:11
restart: unless-stopped
environment:
MARIADB_DATABASE: espocrm
MARIADB_USER: espocrm
MARIADB_PASSWORD: change_me
MARIADB_RANDOM_ROOT_PASSWORD: "yes"
volumes:
- ./dbdata:/var/lib/mysql
espocrm:
image: espocrm/espocrm:latest
restart: unless-stopped
depends_on:
- espocrm-db
environment:
ESPOCRM_DATABASE_HOST: espocrm-db
ESPOCRM_DATABASE_NAME: espocrm
ESPOCRM_DATABASE_USER: espocrm
ESPOCRM_DATABASE_PASSWORD: change_me
ESPOCRM_SITE_URL: https://crm.example.com
ports:
- "8080:80"
volumes:
- ./espocrm-data:/var/www/html
Pros
- Clean, modern UI. Looks like a 2020 SaaS product out of the box.
- Custom entities are a first-class concept: define a "Property" or "Subscription" entity in the admin UI, set fields, layouts, and relations, and you have a working module in 5 minutes.
- Built-in calendar, tasks, campaigns, knowledge base, and a "Stream" feed per record (Slack-like wall).
- PWA installable on mobile — no native app, but it works offline for reads.
- Free extensions for Twilio, WhatsApp, Mailchimp, SendGrid, Asterisk PBX.
Cons
- No native iOS/Android app. The PWA works but is not as polished as HubSpot Mobile.
- Workflow engine is simpler than SuiteCRM's; complex multi-step approvals require custom code.
- Reporting is functional but limited; serious BI needs a Metabase or Superset sidecar.
- Smaller community (~150 contributors) than SuiteCRM, but the maintainer is responsive.
When NOT to use it: if you need a 5-stage sales approval chain with regional manager sign-off, SuiteCRM or Odoo fit better. If you need heavy marketing automation (lead nurturing, A/B subject lines), pair EspoCRM with Mautic.
Odoo Community (the ERP-shaped CRM)
Odoo is an open-source ERP that ships CRM as one of 30+ modules. The Community edition is LGPL-3.0 and includes the core CRM, Sales, Inventory, Manufacturing, Accounting, Website, eCommerce, Helpdesk, and Email Marketing modules. The Enterprise edition adds advanced reporting, studio, marketing automation, and the mobile app — most of which you can substitute with the free web_responsive module and Metabase.
A minimal Odoo CRM deploy:
version: "3.8"
services:
odoo-db:
image: postgres:16
restart: unless-stopped
environment:
POSTGRES_DB: odoo
POSTGRES_USER: odoo
POSTGRES_PASSWORD: change_me
volumes:
- ./dbdata:/var/lib/postgresql/data
odoo:
image: odoo:17.0
restart: unless-stopped
depends_on:
- odoo-db
environment:
HOSTNAME: odoo
PGHOST: odoo-db
PGUSER: odoo
PGPASSWORD: change_me
ports:
- "8069:8069"
volumes:
- ./odoo-data:/var/lib/odoo
- ./addons:/mnt/extra-addons
odoo-proxy:
image: odoo:17.0
command: ["odoo", "--proxy-mode"]
depends_on:
- odoo
ports:
- "8072:8069"
Pros
- Best value if you need more than CRM. The Community edition includes invoicing, accounting (limited), inventory, manufacturing, project, timesheets, and a website builder. No other open-source option comes close.
- Native iOS and Android apps even for the Community edition (functional, not pretty).
- Strong multi-company, multi-currency, multi-language support out of the box.
- The XML-RPC + JSON-RPC API is stable and has Python, JavaScript, and Java clients.
Cons
- Architecture decisions baked in 2007: Odoo uses its own ORM, its own module system, and Python 3.10+ with a heavy footprint (1-2GB RAM minimum).
- The Community edition deliberately cripples some flows to push Enterprise. For example, you can create a sales order in Community but cannot approve it through the document workflow without Enterprise.
- The upgrade process touches your custom modules; Odoo 16 → 17 upgrades are not trivial.
- Steeper learning curve than EspoCRM. The UI is dense and the menu structure has 15+ top-level items.
When NOT to use it: if you only need CRM and a 5-person sales team, Odoo is overkill. The size of the platform will slow you down. Choose EspoCRM or SuiteCRM and add a separate invoicing tool (i.e. InvoiceNinja) if needed.
Twenty (the modern rewrite)
Twenty is the most interesting CRM to launch since EspoCRM. It was Y Combinator W24, raised $5M, and went AGPL-3.0 in March 2025. The stack is NestJS backend, React frontend, PostgreSQL, Redis, and a GraphQL API. The data model is normalized, the UI is Notion-clean, and the entire object schema is configurable through a no-code admin panel.
A minimal Docker deploy:
git clone https://github.com/twentyhq/twenty.git
cd twenty
cp .env.example .env
# Edit .env: set PG_DATABASE_URL, APP_SECRET, etc.
docker compose up -d
# Open http://localhost:3000
Pros
- Best UI of the four. Linear-meets-Notion aesthetic; the keyboard shortcuts alone save hours per week.
- Open-source from day one (not open-core), AGPL-3.0, no enterprise upsell hidden in the roadmap.
- Native integrations for Google Workspace, Microsoft 365, Stripe, and a Zapier connector.
- Every object is a "data model" — you can add a "Job posting" or "Conference talk" entity with custom fields and relations, and it shows up in the sidebar like a built-in module.
- Roadmap is openly tracked on GitHub with monthly community calls.
Cons
- Project is <2 years old. Expect breaking API changes every 4-6 months until v1.0 (target end of 2026).
- Workflow automation is still minimal — no BPMN engine, no multi-step approvals. Best paired with n8n for now.
- Mobile experience is "responsive web" — usable but not a native app.
- Smaller third-party ecosystem; expect to write some custom code for unusual integrations.
When NOT to use it: if your sales process has 4 approval gates, 6 pipeline stages, and 30 custom fields, wait 6 months. If your team is 5-30 people and you want a tool that feels like Linear, deploy it now and budget 2-4 weeks of feedback for the v0.x→v1.0 transition.
Recommendation matrix
| Your situation | Recommended CRM |
|---|---|
| Solo founder or freelancer, 1-3 users, just need to track leads | EspoCRM (simplest, lowest RAM) |
| 5-30 person sales team, multiple pipelines, want a modern UI | Twenty (with n8n for workflows) |
| 5-30 person sales team, want stability and mature reporting | EspoCRM (proven, free, quick to deploy) |
| 30-200 person org, complex approval chains, granular roles | SuiteCRM (the only one with real BPMN workflows) |
| Any size, also need invoicing + accounting + inventory | Odoo Community (the only one that does all three) |
| Tech company, wants the cleanest API for custom integrations | Twenty (GraphQL, well-typed) |
| Compliance-heavy (HIPAA, SOC2) | EspoCRM (simplest to audit, single PHP codebase) |
Data model and integration patterns
A common mistake is treating a CRM as a black box. All four tools here expose an API and a database you can read directly. The most useful pattern in 2026 is:
- CRM as the source of truth for "people and companies" — leads, contacts, accounts, opportunities. Sync to your product's user table via webhooks.
- A separate object store for product events — PostHog or self-hosted Plausible Analytics for product analytics; Segment or RudderStack for event piping. The CRM is not a product analytics tool.
- A separate marketing automation layer — Mautic or Listmonk for email campaigns, n8n for behavioral triggers. Don't try to make your CRM send drip campaigns.
- A separate BI layer — Metabase connected to the CRM's PostgreSQL/MySQL for dashboards the CRM cannot generate natively.
If you are tempted to add 20 custom fields to capture product usage data, stop. That data belongs in PostHog. The CRM is for who, what, and when; product analytics is for how often and how long.
Backup and operational notes
-
PostgreSQL backups:
pg_dumpnightly, offsite to Backblaze B2 or S3. Test a restore quarterly. Both Twenty and Odoo need this. -
MySQL backups:
mysqldumpfor EspoCRM and SuiteCRM, same offsite pattern. Both can be restored into a fresh container in under 10 minutes. - File uploads: all four store attachments on local disk by default. Mount a named volume and snapshot it. Twenty also supports S3-compatible storage via env var.
-
Upgrades: pin the major version in your
docker-compose.yml(image: espocrm/espocrm:8not:latest). Run the upgrade in a staging clone first. - SSO: SuiteCRM and Odoo have built-in SAML/OIDC. EspoCRM requires a paid extension for SAML but supports LDAP. Twenty has Google/Microsoft OAuth built-in.
When NOT to self-host a CRM
Self-hosting a CRM is a 6-12 month commitment to maintaining it. Be honest about whether you have that capacity:
- You are a 2-person team. Just use EspoCRM hosted by the vendor (€50/month) or HubSpot Free. The time you save is worth more than the bill.
- You have no sysadmin on the team. Pick a vendor that manages the infrastructure (Twenty Cloud or EspoCRM Cloud) and focus on sales.
- You need a regulated industry feature like HIPAA-compliant email tracking with BAAs. Self-hosting does not absolve you of the BAA requirement; you still need a Business Associate Agreement with whoever hosts your infrastructure.
- Your sales team is non-technical and will not tolerate 5 seconds of downtime. Self-hosted CRMs have maintenance windows. SaaS CRMs (rightly or wrongly) do not.
If you are in one of those buckets, the right answer is to pay for EspoCRM Cloud, SuiteCRM OnDemand, or Twenty Cloud, and spend your energy on sales instead.
TL;DR
- Just need it working this weekend: EspoCRM. 200MB RAM, clean UI, 30-minute install.
- Need real workflows and a 50-person sales floor: SuiteCRM. Old but complete.
- Need CRM + invoicing + inventory in one tool: Odoo Community. Heavier but unbeatable scope.
- Tech team, want the future, can tolerate beta roughness: Twenty. Best UI, modern stack, wait 6 months for v1.0 if risk-averse.
The full Self-Hosted CRM directory on SelfHostStack has more detail, deployment manifests, and adjacent tools.
Top comments (0)