{
  "version": "2",
  "generatedAt": "2026-11-03T22:49:39.280Z",
  "listing": {
    "slug": "frappe--crm",
    "name": "Frappe CRM",
    "tagline": "AGPL CRM on the Frappe Framework; every DocType is reachable through the framework's REST API.",
    "shortTagline": "AGPL CRM on the Frappe Framework",
    "description": "Leads, deals, kanban, custom views, notes, tasks and calls, with built-in Twilio and Exotel calling and an ERPNext bridge for invoicing. Runs on a Frappe bench (Python and MariaDB); Frappe Cloud is the Builder's paid hosting. Any Frappe app exposes /api/resource/<DocType> and /api/method with token auth, so an agent gets the whole data model.",
    "capabilities": [
      "adaptable",
      "operable"
    ],
    "vertical": "smb-ops-crm",
    "alternativeTo": [
      "HubSpot",
      "Pipedrive",
      "Salesforce"
    ],
    "shape": "business-app",
    "formFactor": "web-app",
    "executionModel": "deterministic",
    "provenance": "human-written",
    "codeStack": {
      "languages": [
        "Python",
        "JavaScript"
      ],
      "frameworks": [
        "Frappe Framework",
        "Frappe UI",
        "Vue.js"
      ],
      "packageManager": "bench + pip + yarn",
      "database": [
        "MariaDB",
        "Redis"
      ],
      "hostingTarget": [
        "Docker (easy-install.py)",
        "Frappe Cloud"
      ]
    },
    "modelStack": null,
    "repos": [
      {
        "url": "https://github.com/frappe/crm",
        "owner": "frappe",
        "name": "crm",
        "license": "AGPL-3.0",
        "stars": 3457,
        "lastCommit": "2026-09-03"
      }
    ],
    "interface": {
      "kind": "api",
      "url": "https://docs.frappe.io/framework/user/en/api/rest",
      "official": true,
      "hosted": "both"
    },
    "operability": "official",
    "recommendedWrapper": null,
    "reach": [
      {
        "job": "Create and update leads and deals",
        "reachable": true,
        "evidence": "Frappe REST: /api/resource/CRM Lead and CRM Deal with token auth"
      },
      {
        "job": "Notes, tasks and call logs on a record",
        "reachable": true,
        "evidence": "CRM Note, CRM Task, CRM Call Log DocTypes through /api/resource"
      },
      {
        "job": "Move deals through pipeline stages",
        "reachable": true,
        "evidence": "Status field update on CRM Deal through REST"
      },
      {
        "job": "Add custom fields",
        "reachable": true,
        "evidence": "Custom Field DocType is writable through the same API"
      },
      {
        "job": "Send and log email",
        "reachable": true,
        "evidence": "Communication DocType and frappe.core.doctype.communication.email.make through /api/method"
      },
      {
        "job": "Place and record calls (Twilio, Exotel)",
        "reachable": null,
        "evidence": "Integrations are built in; API-triggered calling not documented in README"
      },
      {
        "job": "WhatsApp messaging",
        "reachable": null,
        "evidence": "Uses the third-party frappe_whatsapp app"
      },
      {
        "job": "Kanban and custom views",
        "reachable": false,
        "evidence": "Views are UI; CRM View Settings DocType stores them but the board is a front-end feature"
      },
      {
        "job": "Invoice from a deal",
        "reachable": null,
        "evidence": "Requires ERPNext integration (erpnext_crm_settings)"
      }
    ],
    "editions": [
      {
        "name": "Self-hosted",
        "price": null,
        "open": true,
        "distributions": [
          {
            "kind": "source",
            "url": "https://github.com/frappe/crm"
          },
          {
            "kind": "container",
            "url": "https://github.com/frappe/crm#self-hosting",
            "command": "python3 ./easy-install.py deploy --image=ghcr.io/frappe/crm --version=stable --app=crm"
          }
        ]
      },
      {
        "name": "Frappe Cloud",
        "price": null,
        "open": false,
        "distributions": [
          {
            "kind": "hosted",
            "url": "https://frappecloud.com"
          }
        ]
      }
    ],
    "skills": {
      "kind": "none",
      "paths": [],
      "install": null,
      "note": "No SKILL.md, Claude Code plugin, or skills install target in the repo."
    },
    "customization": {
      "summary": "Site-level settings live in sites/<site>/site_config.json (db, redis, mail) and in settings DocTypes editable in the UI or over REST: FCRM Settings, CRM Global Settings, CRM Twilio Settings, CRM Exotel Settings, ERPNext CRM Settings, CRM Enrichment Settings. crm/hooks.py wires the app. Adding fields and pipeline stages is in-product; new logic is a Frappe app of your own rather than a fork.",
      "envVars": [],
      "configFiles": [
        "sites/<site>/site_config.json",
        "crm/hooks.py",
        "crm/fcrm/doctype/fcrm_settings/fcrm_settings.json",
        "crm/fcrm/doctype/crm_global_settings/crm_global_settings.json",
        "crm/fcrm/doctype/crm_twilio_settings/crm_twilio_settings.json",
        "crm/fcrm/doctype/erpnext_crm_settings/erpnext_crm_settings.json"
      ],
      "promptFiles": [],
      "effort": "config-only",
      "editCount": 6
    },
    "useWhen": [
      "I already run ERPNext and want a clean sales pipeline that invoices through it",
      "I want unlimited users on a simple CRM and our agent updating deals through a REST API we already know"
    ],
    "accounts": [
      "Twilio or Exotel (calling, optional)",
      "SMTP provider",
      "Frappe Cloud account (hosted edition)"
    ],
    "active": true,
    "lastActivity": "2026-09-03",
    "gotchas": [
      "Needs a Frappe bench: Python, MariaDB, Redis, Node; not a single container",
      "Branch main is v1.x stable; develop is v2 unstable",
      "AGPL-3.0",
      "CRM Enrichment Settings suggests an enrichment feature; provider not documented in README"
    ],
    "fit": {
      "adaptable": 2,
      "operable": 3
    },
    "evidence": {
      "formFactor": "README: Frappe Framework web app with Vue front end",
      "executionModel": "No model SDK in README; domain_enrichment module exists (unverified)",
      "operability": "Frappe Framework REST API docs; CRM DocTypes under crm/fcrm/doctype",
      "effort": "crm/hooks.py and settings DocType JSON files in the repo tree",
      "editions": "README: Frappe Cloud managed hosting, self-host easy-install; AGPL",
      "active": "GitHub pushedAt 2026-09-03"
    },
    "confidence": {
      "formFactor": 0.95,
      "executionModel": 0.7,
      "operability": 0.9,
      "effort": 0.8,
      "reach": 0.75,
      "editions": 0.8
    },
    "openQuestions": [
      "Frappe Cloud prices for CRM",
      "What does crm/domain_enrichment call?",
      "Is there an official Frappe MCP server yet? None found on the frappe org"
    ],
    "sources": [
      {
        "url": "https://github.com/frappe/crm",
        "foundBy": "sourcing:smb-ops-crm:github"
      },
      {
        "url": "https://frappe.io/crm",
        "foundBy": "sourcing:smb-ops-crm:github"
      }
    ],
    "research": {
      "stage": "verified",
      "verdict": "unverified",
      "reason": "Both capabilities. Official framework REST API reaches the whole data model. Adaptable 2: AGPL and bench dependency, settings are DocTypes not env vars.",
      "disputed": []
    },
    "url": "apps/frappe--crm.html",
    "coverage": "partial",
    "paid": false,
    "source": "research/verified/frappe--crm.json"
  }
}
