Frappe CRM is not the old ERPNext CRM module with a new name. It's a 2024 ground-up rebuild with a Vue 3 frontend, a clean lead-to-deal pipeline, kanban boards, email integration, and call logging — all running on the same Frappe doctype backend. It's young, opinionated, and intentionally simpler than Salesforce or HubSpot.
The old ERPNext CRM was a module bolted onto the ERP — leads, opportunities, and quotations all tangled with the accounting and inventory workflow. Frappe CRM is a standalone app that focuses on the sales pipeline: Leads come in, get qualified into Deals, and move through stages on a kanban board until they're won or lost. It doesn't try to generate invoices or manage stock — that's what ERPNext is for.
The frontend is a Vue 3 SPA that talks to the Frappe backend via the standard API. It's visually cleaner than the Frappe Desk, with a purpose-built UI for sales teams. But it's still early. The plugin ecosystem is thin, third-party integrations are limited, and some features you'd expect from a mature CRM (pipeline forecasting, territory management, advanced reporting) aren't there yet.
If you search for "Frappe CRM" you'll find two different things: the legacy CRM module inside ERPNext (Lead, Opportunity, Customer doctypes) and the new standalone Frappe CRM app. They share some doctype names but are architecturally different. This explainer covers the standalone app at github.com/frappe/crm, not the ERPNext module.
Frappe CRM uses its own doctypes, separate from the legacy ERPNext CRM module. All queryable via the standard Frappe REST API.
| Doctype | Purpose | Key fields |
|---|---|---|
CRM Lead | An inbound contact that hasn't been qualified yet | lead_name, email, mobile_no, status, source, lead_owner |
CRM Deal | A qualified opportunity with a value and a stage | deal_owner, organization, annual_revenue, status, probability |
CRM Contact | A person linked to one or more organizations | full_name, email, phone, company_name |
CRM Organization | A company or entity | organization_name, website, industry, annual_revenue |
Communication | Email, call, or note attached to a lead or deal | communication_type, subject, content, reference_doctype |
CRM Task | Follow-up action linked to a lead or deal | title, description, due_date, assigned_to, status |
The Vue 3 frontend is just one client. The API is the same Frappe REST surface — any script or agent can create leads, move deals through stages, and log communications.
# List open deals owned by a specific user GET /api/resource/CRM Deal ?filters=[["deal_owner","=","[email protected]"],["status","!=","Lost"]] &fields=["name","organization","annual_revenue","status","probability"] &order_by=annual_revenue desc &limit_page_length=20
# Create a new lead from a webhook or form POST /api/resource/CRM Lead { "lead_name": "Thabo Mokoena", "email": "[email protected]", "mobile_no": "+27821234567", "source": "Website", "lead_owner": "[email protected]" } # Convert a lead to a deal (RPC) POST /api/method/crm.api.lead.convert_to_deal { "lead": "CRM-LEAD-00042" }
# Log a communication against a deal POST /api/resource/Communication { "communication_type": "Communication", "subject": "Follow-up call", "content": "Discussed pricing. Will send proposal by Friday.", "reference_doctype": "CRM Deal", "reference_name": "CRM-DEAL-00018", "communication_medium": "Phone" }
The standalone Frappe CRM uses CRM Lead and CRM Deal doctypes, not the ERPNext Lead and Opportunity. If you install both, you'll have two overlapping CRM data models. Pick one.
The CRM was rebuilt in 2024. Documentation is sparse, community answers are few, and the API surface is still evolving. Read the source code — it's the most reliable reference.
Frappe CRM stops at the deal. If you need to generate quotes, invoices, or sales orders from won deals, you need ERPNext or a custom integration to hand off downstream.
The CRM relies on Frappe's email integration for communication tracking. If Email Account and Email Domain aren't configured on the site, the inbox, email-to-lead, and communication timeline all break silently.
The CRM has its own Vue 3 SPA at /crm. It doesn't use the standard Frappe Desk UI. This means desk customisations, custom scripts added via the desk, and some admin tools don't apply to the CRM views.