EspoCRM is live and the current system of record for relationships. This section (a) evaluates whether EspoCRM is the right long-term choice vs. alternatives, and (b) defines how to turn it into a proper procurement CRM without a rewrite.
Research targets: EspoCRM, Twenty, ERPNext, Odoo, SuiteCRM.
| Criterion | EspoCRM ✅(current) | Twenty | ERPNext | Odoo Community | SuiteCRM |
|---|---|---|---|---|---|
| License | AGPL-3.0 | AGPL-3.0 (via MIT-original history; AGPL for source) | GPL-3.0 | LGPL-3 (Community); paid EE | AGPL-3.0 |
| Stack | PHP + MySQL | TypeScript/Node + Postgres | Python + MariaDB | Python + Postgres | PHP + MySQL |
| Self-host | ✅ | ✅ | ✅ | ✅ | ✅ |
| REST API | ✅ mature, every entity auto-exposed | ✅ (REST/GraphQL) | ✅ | ✅ | ✅ |
| Custom entities / fields | ✅ excellent (Entity Manager, no code) | ✅ (via code + admin) | ✅ (DocTypes) | ✅ (Studio is EE; Community needs code) | ⚠️ (needs code / config) |
| Workflow/BPM | ⚠️ Requires Advanced Pack (paid) | ⚠️ limited (workflows in dev) | ✅ built-in workflow | ✅ (Automated Actions / Server Actions) | ⚠️ Workflow module limited |
| Reports / Dashboards | ⚠️ Requires Advanced Pack | ✅ basic | ✅ strong (Frappe Reports) | ✅ (Studio EE for advanced) | ✅ decent |
| Procurement / Purchase native | ❌ needs Sales Pack + custom | ❌ | ✅ Purchase, Supplier, RFQ modules | ✅ Purchase + Inventory (EE for some) | ❌ |
| Quotes / Invoicing | ⚠️ Sales Pack (paid) | ⚠️ basic | ✅ Quotation, Order, Invoice | ✅ | ⚠️ Quote module |
| ERP breadth (inventory, accounting) | ❌ | ❌ | ✅ full ERP | ✅ full ERP | ❌ |
| API maturity for n8n integration | ✅ strong | ⚠️ newer/evolving | ✅ strong | ✅ strong (XML-RPC/JSON) | ✅ |
| AI-ready / data model | ⚠️ basic | ✅ modern, AI-focused, graph-capable | ✅ good | ⚠️ | ⚠️ |
| Maturity / community | High (2000s-era stable) | Fast-growing (54k★) | High (37k★) | Very high (53k★) | Declining (5.6k★) |
| Decision | Rationale |
|---|---|
| Stay on EspoCRM for now | It is live, stable, free self-host, has the best no-code custom-entity model for a procurement relationship layer, and a mature REST API that n8n consumes cleanly. Zero migration risk in the short term. |
| Do NOT rewrite into ERPNext/Odoo yet | Their ERP breadth (inventory, accounting, purchase orders) is powerful but is a much larger footprint and a big migration. Only revisit if/when SupplyShore outgrows EspoCRM + Sales Pack and needs native order/inventory/accounting. |
| Watch Twenty | The modern, Postgres/AI-native open CRM is compelling for the long term. Re-evaluate at the platform-build phase (Phase C) — migrating when the data model is mature and the team is ready. |
| ERPNext = best "next step up" | If SupplyShore grows into managing orders/inventory/accounting itself, ERPNext (GPL) is the strongest open-source candidate and pairs well with n8n. Document this as the "plan B" in 06-decisions/adr. |
Licensing caution: EspoCRM, Twenty, SuiteCRM are AGPL. For internal use this is fine, but if you ever sell the CRM as a service or modify+distribute externally, AGPL obligations apply. ERPNext is GPL. n8n is fair-code (SUL).
For procurement, the two packs that matter are Advanced Pack (BPM + Reports) and Sales Pack (Products, Quotes, Purchases, Suppliers). Budget ~$655 one-time for both if you self-host. This is cheap vs. building quote/purchase logic from scratch, and is the single highest-leverage CRM investment.
Custom entities (via Entity Manager) built around core EspoCRM:
Accounts ─────────────── Buyer (customer) or Supplier
│ (type: Buyer / Supplier)
├─ Contacts ───────── Contact persons (buyer side & supplier side)
├─ Opportunities ──── Sourcing deals (buyer projects)
├─ [Supplier Dossier] custom entity: verification status,
│ factory audit, certifications, capabilities, MOQ, incoterms,
│ export history, payment terms, rating
├─ [Products] custom: part/component catalog (via Sales Pack)
├─ [RFQ] custom: request-for-quote header (buyer)
├─ [Quote] Sales Pack Quote: supplier bids
├─ [Sourcing Request] custom: buyer inquiry → RFQ → Quote
├─ [Inspection/QC] custom: QC reports, samples, audits
└─ Activities/Emails emails, calls, meetings (relationship log)
Key relationships:
Accounts differentiated by a type field.Supplier Dossier (1:1 with Account) holds verification/scoring fields.Opportunity links a buyer project to the supplier shortlist and quotes.✅ Implemented 2026-08-07 — see
crm-structure.md. The live
structure goes beyond the sketch above: Account is the master organization table
(type: Factory/Supplier/Buyer/Logistics/QC/Partner/Other) and the profile entities
Supplier, Customer, Factory, LogisticsProvider, QCProvider, Partner are custom
entities linked to it, plus Product/Category, RFQ/RFQItem, Quote/QuoteItem,
Order/OrderItem, Location, customized core Lead (sources, conversion to
Supplier) and Document (docType + M2M links). Applied via the scripted kit in
scripts/espocrm/(structure.json + idempotent installer). ADR-014 records the
decisions (clean names, Sales Pack caveat).
Supplier Dossier entity for verification data.sourcing@, sales@, hello@ mail lands in EspoCRM as linked emails.03-product/automation).n8n Workflow "Supplier Sync"
Trigger (cron / webhook)
→ HTTP Request → EspoCRM API (list Suppliers)
→ enrichment node (LLM / company data) [see 03-product/apis]
→ dedupe & score
→ HTTP Request → EspoCRM API (update/create)
→ notify (email/Telegram/Slack)
Best practices:
04-security/security).name + website).Revisit at Phase C if any of these become true:
Until then: EspoCRM is the right, pragmatic choice.