{
  "version": "2",
  "generatedAt": "2026-11-03T22:49:39.280Z",
  "listing": {
    "slug": "frappe--helpdesk",
    "name": "Frappe Helpdesk",
    "tagline": "AGPL ticketing with agent and customer portals, SLAs, assignment rules and a knowledge base, all reachable over the Frappe REST API.",
    "shortTagline": "AGPL ticketing with SLAs",
    "description": "Ticket management with dual portals, customisable SLAs, auto-assignment, saved replies and a knowledge base. Same Frappe bench stack and Frappe Cloud hosting as Frappe CRM; every HD DocType (tickets, comments, SLAs, articles, canned responses) is a REST resource with token auth.",
    "capabilities": [
      "adaptable",
      "operable"
    ],
    "vertical": "smb-ops-crm",
    "alternativeTo": [
      "Zendesk",
      "Freshdesk"
    ],
    "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, docker-compose)",
        "Frappe Cloud"
      ]
    },
    "modelStack": null,
    "repos": [
      {
        "url": "https://github.com/frappe/helpdesk",
        "owner": "frappe",
        "name": "helpdesk",
        "license": "AGPL-3.0",
        "stars": 3353,
        "lastCommit": "2026-09-02"
      }
    ],
    "interface": {
      "kind": "api",
      "url": "https://docs.frappe.io/framework/user/en/api/rest",
      "official": true,
      "hosted": "both"
    },
    "operability": "official",
    "recommendedWrapper": null,
    "reach": [
      {
        "job": "Create, assign and resolve tickets",
        "reachable": true,
        "evidence": "HD Ticket DocType through /api/resource; assignment through frappe.desk.form.assign_to"
      },
      {
        "job": "Reply to customers and add internal comments",
        "reachable": true,
        "evidence": "Communication and HD Ticket Comment DocTypes"
      },
      {
        "job": "Define SLAs",
        "reachable": true,
        "evidence": "HD Service Level Agreement DocType"
      },
      {
        "job": "Assignment rules",
        "reachable": true,
        "evidence": "Frappe Assignment Rule DocType"
      },
      {
        "job": "Knowledge base articles",
        "reachable": true,
        "evidence": "HD Article and HD Article Category DocTypes"
      },
      {
        "job": "Saved (canned) replies",
        "reachable": true,
        "evidence": "HD Canned Response DocType"
      },
      {
        "job": "Manage agents and teams",
        "reachable": true,
        "evidence": "HD Agent and HD Team DocTypes"
      },
      {
        "job": "Customer portal self-service",
        "reachable": false,
        "evidence": "Portal is a UI for customers; API serves the data but not the experience"
      },
      {
        "job": "Set up inbound email accounts",
        "reachable": true,
        "evidence": "Email Account is a standard DocType, creatable through POST /api/resource/Email Account with password-based IMAP/SMTP per the framework REST docs; OAuth-linked mailboxes still need the UI consent step"
      }
    ],
    "editions": [
      {
        "name": "Self-hosted",
        "price": null,
        "open": true,
        "distributions": [
          {
            "kind": "source",
            "url": "https://github.com/frappe/helpdesk"
          },
          {
            "kind": "container",
            "url": "https://github.com/frappe/helpdesk#self-hosting",
            "command": "python3 ./easy-install.py deploy --image=ghcr.io/frappe/helpdesk --version=stable --app=helpdesk"
          }
        ]
      },
      {
        "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 settings in sites/<site>/site_config.json; SLAs, assignment rules, teams, canned responses and portal branding are records you set in the UI or over REST; docker/docker-compose.yml and docker/init.sh bring up a dev stack. New behavior is a companion Frappe app; the AGPL fork path is rarely needed.",
      "envVars": [],
      "configFiles": [
        "sites/<site>/site_config.json",
        "helpdesk/hooks.py",
        "docker/docker-compose.yml",
        "docker/init.sh"
      ],
      "promptFiles": [],
      "effort": "config-only",
      "editCount": 4
    },
    "useWhen": [
      "I want a support desk with SLAs and a customer portal on our own server, no per-agent fees",
      "I already run Frappe apps and want tickets in the same bench"
    ],
    "accounts": [
      "SMTP/IMAP mailbox",
      "Frappe Cloud account (hosted edition)"
    ],
    "active": true,
    "lastActivity": "2026-09-02",
    "gotchas": [
      "Same bench footprint as Frappe CRM (MariaDB, Redis, Node, Python)",
      "AGPL-3.0",
      "DocType names above (HD Ticket, HD Article, HD Canned Response) are from the app's data model; verify field names against your version"
    ],
    "fit": {
      "adaptable": 2,
      "operable": 3
    },
    "evidence": {
      "formFactor": "README: Frappe web app with Vue portals",
      "executionModel": "No model SDK in README",
      "operability": "docs.frappe.io/framework/user/en/api/rest: 'Authorization: token api_key:api_secret' header (keys generated per User), plus /api/method/login password login and OAuth Bearer; /api/resource/:doctype gives CRUD over every DocType including the HD Ticket, HD Article, HD Canned Response types shipped by frappe/helpdesk.",
      "effort": "README Development Setup: docker/docker-compose.yml and init.sh; site_config.json",
      "editions": "README: Frappe Cloud managed hosting, self-host easy-install; AGPL",
      "active": "GitHub pushedAt 2026-09-02"
    },
    "confidence": {
      "formFactor": 0.95,
      "executionModel": 0.8,
      "operability": 0.95,
      "effort": 0.8,
      "reach": 0.7,
      "editions": 0.8
    },
    "openQuestions": [
      "Frappe Cloud prices for Helpdesk",
      "Does Helpdesk ship an AI reply or summary feature that would make executionModel hybrid?"
    ],
    "sources": [
      {
        "url": "https://github.com/frappe/helpdesk",
        "foundBy": "sourcing:smb-ops-crm:curated"
      },
      {
        "url": "https://docs.frappe.io/framework/user/en/api/rest",
        "foundBy": "sourcing:smb-ops-crm:curated"
      }
    ],
    "research": {
      "stage": "verified",
      "verdict": "approve",
      "reason": "Frappe (the same org) documents the REST API with API key and secret token auth in the Authorization header, and every Helpdesk DocType is a resource under /api/resource. Reach is now nine of ten with only the customer portal experience outside the API.",
      "disputed": []
    },
    "url": "apps/frappe--helpdesk.html",
    "coverage": "partial",
    "paid": false,
    "source": "research/verified/frappe--helpdesk.json"
  }
}
