know.2nth.ai Technology tech frappe crm
tech/frappe · CRM · Skill Leaf

A CRM rebuilt from
the ground up.

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.

Live Vue 3 + Frappe backend AGPL v3 2024 rebuild

Lead-to-deal, not lead-to-invoice.

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.

Not the old ERPNext CRM

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.

The data model.

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 LeadAn inbound contact that hasn't been qualified yetlead_name, email, mobile_no, status, source, lead_owner
CRM DealA qualified opportunity with a value and a stagedeal_owner, organization, annual_revenue, status, probability
CRM ContactA person linked to one or more organizationsfull_name, email, phone, company_name
CRM OrganizationA company or entityorganization_name, website, industry, annual_revenue
CommunicationEmail, call, or note attached to a lead or dealcommunication_type, subject, content, reference_doctype
CRM TaskFollow-up action linked to a lead or dealtitle, description, due_date, assigned_to, status

REST against the pipeline.

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"
}

Things that bite early.

Not the ERPNext CRM module

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.

Young app, thin docs

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.

No built-in quoting or invoicing

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.

Email setup is not optional

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.

Vue 3 frontend bypasses the Desk

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.

Use it for, skip it for.

Use Frappe CRM when

  • You want a simple, self-hosted CRM and don't need Salesforce-level complexity.
  • You're already on Frappe and want CRM data on the same site — same users, same permissions, same API.
  • Your sales process is lead → deal → won/lost and doesn't need CPQ, territory hierarchies, or multi-currency pipelines.
  • You want an open-source CRM an agent can drive via REST without proprietary API costs.
  • The Vue 3 UI matters to your team — it's cleaner than the Frappe Desk for sales workflows.

Where this leaf links.

Go deeper.