{
  "version": "2",
  "generatedAt": "2026-11-03T22:49:39.280Z",
  "listing": {
    "slug": "espocrm--espocrm",
    "name": "EspoCRM",
    "tagline": "AGPL PHP CRM with a documented REST API, OpenAPI spec and official SDKs in seven languages.",
    "shortTagline": "AGPL PHP CRM with a REST API",
    "description": "Leads, contacts, opportunities, campaigns and support cases in a fast single-page app on a PHP REST backend. Configure through data/config.php and the admin UI; extend through the custom/ metadata layer without touching core. The REST API (API key or HMAC) covers CRUD, relationships, search, attachments, metadata and mass actions; workflows and reports are paid extensions.",
    "capabilities": [
      "adaptable",
      "operable"
    ],
    "vertical": "smb-ops-crm",
    "alternativeTo": [
      "Salesforce",
      "HubSpot",
      "Zoho CRM"
    ],
    "shape": "business-app",
    "formFactor": "web-app",
    "executionModel": "deterministic",
    "provenance": "human-written",
    "codeStack": {
      "languages": [
        "PHP",
        "JavaScript",
        "TypeScript"
      ],
      "frameworks": [
        "custom SPA framework",
        "Composer"
      ],
      "packageManager": "composer + npm",
      "database": [
        "MySQL",
        "MariaDB",
        "PostgreSQL"
      ],
      "hostingTarget": [
        "Apache/NGINX",
        "Docker",
        "Traefik"
      ]
    },
    "modelStack": null,
    "repos": [
      {
        "url": "https://github.com/espocrm/espocrm",
        "owner": "espocrm",
        "name": "espocrm",
        "license": "AGPL-3.0",
        "stars": 3319,
        "lastCommit": "2026-09-03"
      }
    ],
    "interface": {
      "kind": "api",
      "url": "https://docs.espocrm.com/development/api/",
      "official": true,
      "hosted": "both"
    },
    "operability": "official",
    "recommendedWrapper": null,
    "reach": [
      {
        "job": "CRUD on leads, contacts, accounts, opportunities, cases",
        "reachable": true,
        "evidence": "docs.espocrm.com API: CRUD on entities at api/v1/"
      },
      {
        "job": "Link and unlink related records",
        "reachable": true,
        "evidence": "API: relationships"
      },
      {
        "job": "Search and filter",
        "reachable": true,
        "evidence": "API: search with where clauses"
      },
      {
        "job": "Attach files",
        "reachable": true,
        "evidence": "API: attachments"
      },
      {
        "job": "Mass update, delete, assign",
        "reachable": true,
        "evidence": "API: mass actions"
      },
      {
        "job": "Read the data model",
        "reachable": true,
        "evidence": "API: metadata; OpenAPI at /api/v1/OpenApi from v9.3"
      },
      {
        "job": "Post to the activity stream",
        "reachable": true,
        "evidence": "API: stream"
      },
      {
        "job": "Send email and run campaigns",
        "reachable": null,
        "evidence": "Email entity is CRUD-able; sending endpoint not confirmed on the API index"
      },
      {
        "job": "Workflows and BPM",
        "reachable": false,
        "evidence": "Advanced Pack is a paid extension; not in the free edition"
      },
      {
        "job": "Reports",
        "reachable": false,
        "evidence": "Reports are a paid extension"
      }
    ],
    "editions": [
      {
        "name": "Self-hosted",
        "price": null,
        "open": true,
        "distributions": [
          {
            "kind": "source",
            "url": "https://github.com/espocrm/espocrm"
          },
          {
            "kind": "binary",
            "url": "https://www.espocrm.com/download/"
          },
          {
            "kind": "container",
            "url": "https://docs.espocrm.com/administration/docker/installation/"
          }
        ]
      },
      {
        "name": "Cloud",
        "price": null,
        "open": false,
        "distributions": [
          {
            "kind": "hosted",
            "url": "https://www.espocrm.com/cloud/"
          }
        ]
      },
      {
        "name": "Paid extensions (Advanced Pack, Sales Pack, Google, Outlook)",
        "price": null,
        "open": false,
        "distributions": [
          {
            "kind": "hosted",
            "url": "https://www.espocrm.com/extensions/"
          }
        ]
      }
    ],
    "skills": {
      "kind": "none",
      "paths": [],
      "install": null,
      "note": "No SKILL.md, Claude Code plugin, or skills install target in the repo."
    },
    "customization": {
      "summary": "Runtime settings are data/config.php and data/config-internal.php (database, site URL, mail, cron). Entities, fields, layouts and labels are metadata JSON edited in the admin UI or dropped into custom/Espo/Custom/Resources; the docs describe a JSON Schema for every parameter. Core code stays untouched, which keeps upgrades clean.",
      "envVars": [],
      "configFiles": [
        "data/config.php",
        "data/config-internal.php",
        "custom/Espo/Custom/Resources/metadata/",
        "custom/Espo/Custom/Resources/layouts/"
      ],
      "promptFiles": [],
      "effort": "config-only",
      "editCount": 4
    },
    "useWhen": [
      "I need a mature CRM on a cheap PHP host with a REST API our agent can use today",
      "I want to add our own entities and fields without maintaining a fork"
    ],
    "accounts": [
      "SMTP provider",
      "EspoCRM account (cloud or paid extensions)"
    ],
    "active": true,
    "lastActivity": "2026-09-03",
    "gotchas": [
      "Workflows, BPM and reports are paid extensions",
      "AGPL-3.0 and a CLA for contributions",
      "Cron must run for email, workflows and scheduled jobs"
    ],
    "fit": {
      "adaptable": 2,
      "operable": 3
    },
    "evidence": {
      "formFactor": "README Architecture: SPA front end with PHP REST backend",
      "executionModel": "No model dependency in README",
      "operability": "docs.espocrm.com/development/api: api/v1, API key or HMAC, OpenAPI, SDKs in PHP, JS, Python, Rust, Java, Go, Zig",
      "effort": "README: metadata described by JSON Schema; docs administration/server-configuration",
      "editions": "README: free open source; espocrm.com cloud and extensions",
      "active": "GitHub pushedAt 2026-09-03"
    },
    "confidence": {
      "formFactor": 0.95,
      "executionModel": 0.85,
      "operability": 0.95,
      "effort": 0.75,
      "reach": 0.8,
      "editions": 0.7
    },
    "openQuestions": [
      "Cloud and extension prices",
      "Does the API expose email sending and campaign execution?"
    ],
    "sources": [
      {
        "url": "https://github.com/espocrm/espocrm",
        "foundBy": "sourcing:smb-ops-crm:github"
      },
      {
        "url": "https://docs.espocrm.com/development/api/",
        "foundBy": "sourcing:smb-ops-crm:github"
      }
    ],
    "research": {
      "stage": "verified",
      "verdict": "approve",
      "reason": "data/config.php and config-internal.php are deployment, but custom/Espo/Custom/Resources/metadata/ (entityDefs, clientDefs) and layouts/ are declarative JSON that define entities, fields, links, labels and layouts; the admin Entity Manager and Layout Manager write to the same files. Formula and hooks are code but not needed for the base adaptation.",
      "disputed": []
    },
    "url": "apps/espocrm--espocrm.html",
    "coverage": "partial",
    "paid": false,
    "source": "research/verified/espocrm--espocrm.json"
  }
}
