{
  "version": "2",
  "generatedAt": "2026-11-03T22:49:39.280Z",
  "listing": {
    "slug": "invoiceninja--invoiceninja",
    "name": "Invoice Ninja",
    "tagline": "Self-hostable invoicing, quotes, expenses and time tracking with a complete REST API.",
    "shortTagline": "Self-hostable invoicing",
    "description": "Laravel invoicing suite an SMB runs to bill clients: invoices, quotes, recurring billing, online payments through Stripe and other gateways, expenses, projects and tasks, purchase orders and bank feeds. The self-hosted edition includes every hosted Pro and Enterprise feature under the Elastic License 2.0; the same REST API the mobile and desktop apps use is published with an OpenAPI spec.",
    "capabilities": [
      "adaptable",
      "operable"
    ],
    "vertical": "invoicing-finance",
    "alternativeTo": [
      "FreshBooks",
      "QuickBooks",
      "Zoho Invoice"
    ],
    "shape": "business-app",
    "formFactor": "web-app",
    "executionModel": "deterministic",
    "provenance": "human-written",
    "codeStack": {
      "languages": [
        "PHP",
        "JavaScript",
        "Dart"
      ],
      "frameworks": [
        "Laravel",
        "React",
        "Flutter"
      ],
      "packageManager": "composer",
      "database": [
        "MySQL",
        "PostgreSQL"
      ],
      "hostingTarget": [
        "Docker",
        "VM",
        "Cloudron",
        "Softaculous",
        "Elestio",
        "YunoHost"
      ]
    },
    "modelStack": null,
    "repos": [
      {
        "url": "https://github.com/invoiceninja/invoiceninja",
        "owner": "invoiceninja",
        "name": "invoiceninja",
        "license": "Elastic-2.0",
        "stars": 10045,
        "lastCommit": "2026-09-03"
      }
    ],
    "interface": {
      "kind": "api",
      "url": "https://api-docs.invoicing.co/",
      "official": true,
      "hosted": "both"
    },
    "operability": "official",
    "recommendedWrapper": null,
    "reach": [
      {
        "job": "Create, send and track invoices",
        "reachable": true,
        "evidence": "openapi/api-docs.yaml tags invoices, emails, activities"
      },
      {
        "job": "Quotes and conversion to invoices",
        "reachable": true,
        "evidence": "openapi tag quotes; recurring_quotes"
      },
      {
        "job": "Recurring invoices and auto-billing",
        "reachable": true,
        "evidence": "openapi tags Recurring Invoices, subscriptions, scheduler; NINJA_AUTO_BILL_TIME in .env.example"
      },
      {
        "job": "Take online payments through gateways",
        "reachable": true,
        "evidence": "openapi tags payments, company_gateways, client_gateway_tokens; gateway keys entered in app settings"
      },
      {
        "job": "Expenses and vendors",
        "reachable": true,
        "evidence": "openapi tags expenses, expense_categories, recurring_expenses, vendors"
      },
      {
        "job": "Projects, tasks and time tracking",
        "reachable": true,
        "evidence": "openapi tags projects, tasks, task_status, task_schedulers"
      },
      {
        "job": "Credits and purchase orders",
        "reachable": true,
        "evidence": "openapi tags credits, Purchase Orders"
      },
      {
        "job": "Bank feeds and transaction rules",
        "reachable": true,
        "evidence": "openapi tags bank_integrations, bank_transactions, bank_transaction_rules; needs NORDIGEN_* or GOCARDLESS_* or Yodlee credentials on self-host"
      },
      {
        "job": "Reports and exports",
        "reachable": true,
        "evidence": "openapi tags reports, export, charts"
      },
      {
        "job": "Invoice design and PDF templates",
        "reachable": true,
        "evidence": "openapi tags designs, templates, preview; PDF_GENERATOR selects snappdf, phantom or hosted_ninja"
      }
    ],
    "editions": [
      {
        "name": "Self-hosted",
        "price": null,
        "open": true,
        "distributions": [
          {
            "kind": "source",
            "url": "https://github.com/invoiceninja/invoiceninja"
          },
          {
            "kind": "container",
            "url": "https://hub.docker.com/r/invoiceninja/invoiceninja/"
          }
        ]
      },
      {
        "name": "Hosted Free",
        "price": null,
        "open": false,
        "distributions": [
          {
            "kind": "hosted",
            "url": "https://www.invoiceninja.com"
          }
        ]
      },
      {
        "name": "Ninja Pro",
        "price": {
          "amount": 14,
          "currency": "USD",
          "period": "month"
        },
        "open": false,
        "distributions": [
          {
            "kind": "hosted",
            "url": "https://invoiceninja.com/pricing-plans/"
          }
        ]
      },
      {
        "name": "Enterprise",
        "price": {
          "amount": 18,
          "currency": "USD",
          "period": "month"
        },
        "open": false,
        "distributions": [
          {
            "kind": "hosted",
            "url": "https://invoiceninja.com/pricing-plans/"
          }
        ]
      },
      {
        "name": "White-label license (self-hosted)",
        "price": {
          "amount": 40,
          "currency": "USD",
          "period": "year"
        },
        "open": false,
        "distributions": []
      }
    ],
    "skills": {
      "kind": "none",
      "paths": [],
      "install": null,
      "note": "No SKILL.md, Claude Code plugin, or skills install target in the repo."
    },
    "customization": {
      "summary": "The named .env vars are deployment configuration: APP_URL, APP_KEY, DB_*, MAIL_MAILER, PDF_GENERATOR, REQUIRE_HTTPS, and optional bank-feed and exchange-rate credentials. Business adaptation lives in the admin UI under Settings: company details and logo, tax rates, invoice and quote designs, custom fields, email templates and reminders, payment gateways, products and recurring schedules.",
      "envVars": [
        "APP_URL",
        "APP_KEY",
        "DB_CONNECTION",
        "DB_HOST",
        "DB_DATABASE",
        "MAIL_MAILER",
        "POSTMARK_API_TOKEN",
        "PDF_GENERATOR",
        "NINJA_ENVIRONMENT",
        "REQUIRE_HTTPS",
        "NORDIGEN_SECRET_ID",
        "NORDIGEN_SECRET_KEY",
        "GOCARDLESS_CLIENT_ID",
        "GOCARDLESS_CLIENT_SECRET",
        "OPENEXCHANGE_APP_ID",
        "NINJA_AUTO_BILL_TIME",
        "DELETE_PDF_DAYS"
      ],
      "configFiles": [
        ".env"
      ],
      "promptFiles": [],
      "effort": "config-only",
      "surfaceKind": "admin-ui",
      "editCount": 18
    },
    "useWhen": [
      "I bill a handful of clients and want invoices, quotes and card payments on my own server without a per-seat plan",
      "I want my agent to raise and chase invoices from a project tracker without touching the invoicing UI"
    ],
    "accounts": [
      "Stripe or another supported payment gateway (optional)",
      "Postmark or SMTP provider",
      "Nordigen or GoCardless for bank feeds (optional)"
    ],
    "active": true,
    "lastActivity": "2026-09-03",
    "gotchas": [
      "License is Elastic License 2.0, not OSI open source: you may modify and self-host, but may not offer it as a managed service to third parties",
      "Default PDF_GENERATOR=hosted_ninja sends invoice HTML to Invoice Ninja's PDF service; switch to snappdf for fully local rendering",
      "APP_KEY encrypts stored data; losing it makes the database unreadable",
      "Removing Invoice Ninja branding from client-facing pages needs the $40/year white-label license"
    ],
    "fit": {
      "adaptable": 2,
      "operable": 3
    },
    "evidence": {
      "formFactor": "Laravel web app with API and client portal (README Developers Guide)",
      "executionModel": "no model at runtime; PHP business logic",
      "operability": "REST API published by the Builder at api-docs.invoicing.co with OpenAPI spec in repo openapi/api-docs.yaml",
      "effort": ".env.example in repo; README says cp .env.example .env; hosting guide at invoiceninja.github.io",
      "editions": "README: hosted vs self-hosted, $40/year white-label; invoiceninja.com/pricing-plans: Free (5 clients), Pro $14/mo, Enterprise $18/mo",
      "active": "GitHub pushedAt 2026-09-03; tag v5.11.53 referenced in README"
    },
    "confidence": {
      "formFactor": 0.95,
      "executionModel": 0.9,
      "operability": 0.95,
      "effort": 0.9,
      "reach": 0.85,
      "editions": 0.8
    },
    "openQuestions": [
      "Does the OpenAPI spec cover the invoice PDF download route on self-host, or only through invitation links?",
      "Which third-party MCP wrapper is best maintained, for Adopters who want MCP rather than raw REST (NightSquawk/invoiceninja-mcp-server was seen at sourcing)"
    ],
    "sources": [
      {
        "url": "https://github.com/invoiceninja/invoiceninja",
        "foundBy": "sourcing:invoicing-finance:github"
      },
      {
        "url": "https://github.com/invoiceninja/invoiceninja/blob/master/openapi/api-docs.yaml",
        "foundBy": "analysis:invoicing-finance"
      },
      {
        "url": "https://invoiceninja.com/pricing-plans/",
        "foundBy": "analysis:invoicing-finance"
      }
    ],
    "research": {
      "stage": "verified",
      "verdict": "dispute",
      "reason": "Read .env.example on v5-stable: app URL, key, database, cache, queue, mail driver, PDF generator and third-party credentials, plus NINJA_AUTO_BILL_TIME. Nothing in it changes what an invoice looks like or how the business bills; that is in Settings. License confirmed Elastic License 2.0.",
      "disputed": [
        {
          "field": "customization.effort",
          "reason": "Every .env var is deployment; invoice designs, tax rates, email templates and gateways are set in the in-app Settings."
        }
      ]
    },
    "url": "apps/invoiceninja--invoiceninja.html",
    "coverage": "complete",
    "paid": true,
    "source": "research/verified/invoiceninja--invoiceninja.json"
  }
}
