{
  "data": {
    "a": {
      "slug": "bamboohr",
      "name": "BambooHR",
      "vendor": "Bamboo HR LLC",
      "vendorUrl": "https://www.bamboohr.com",
      "kind": "http-api",
      "category": "hr",
      "summary": "HR system of record for small and medium-sized businesses, covering employee records, time off, hiring, onboarding and performance. Agents reach it through a REST API with a public OpenAPI spec, or a hosted MCP server in beta.",
      "url": "https://www.anchorterminal.com/tools/bamboohr",
      "markdownUrl": "https://www.anchorterminal.com/tools/bamboohr.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/bamboohr.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/bamboohr.json",
      "repo": "https://github.com/BambooHR/bhr-api-php",
      "license": "Proprietary service under BambooHR's terms of service and developer terms. The official PHP SDK on GitHub is MIT",
      "transports": [
        "http"
      ],
      "remoteUrl": "https://{companyDomain}.bamboohr.com/api/v1",
      "packages": [
        {
          "registry": "packagist",
          "name": "bamboohr/api"
        }
      ],
      "auth": "mixed",
      "authNotes": "Two routes, both self-serve. A user creates an API key from the user menu in BambooHR and sends it as the username in HTTP Basic auth, and the key carries that user's permissions. Or a developer registers an application in the free developer portal and runs an OAuth 2.0 authorisation code flow against `https://{companyDomain}.bamboohr.com/authorize.php` and `/token.php`, with scopes in read and `.write` pairs, one-hour access tokens and a refresh token when `offline_access` is requested. The MCP server takes OAuth only, needs the `mcp` scope and an admin to enable the AI Connectors app, and has no dynamic client registration. The developer terms let BambooHR require review before production access or a marketplace listing.",
      "pricing": "paid",
      "pricingNotes": "Core $10, Pro $17 and Elite $25 per employee per month, or $250, $425 and $650 a month flat for companies of 25 employees or fewer, with volume discounts that aren't quantified. No separate fee for the API or the MCP server was found, and the pricing page doesn't say which plans include the API. A free trial needs no credit card (length not stated) and the developer portal account is free, so an agent's owner can start without a contract (https://www.bamboohr.com/pricing/, checked 2026-10-07).",
      "priceSummary": "$10 / seat-mo",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the API docs, the OpenAPI spec or the pricing page (checked 2026-10-07).",
        "endpoints": []
      },
      "toolCount": 56,
      "popularity": {
        "githubStars": 34,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-10-07"
      },
      "docsUrl": "https://documentation.bamboohr.com",
      "llmsTxt": "https://documentation.bamboohr.com/llms.txt",
      "openapi": "https://openapi.bamboohr.io/main/latest/docs/openapi/public-openapi.yaml",
      "capabilities": [
        "hr.employees",
        "hr.time-off",
        "hr.org",
        "hr.onboarding",
        "hr.documents",
        "recruiting.applications",
        "recruiting.jobs"
      ],
      "tags": [
        "hosted",
        "paid",
        "free-trial",
        "oauth",
        "api-key",
        "mcp",
        "openapi",
        "llms-txt",
        "webhooks",
        "php",
        "status-page",
        "soc2"
      ],
      "lastRelease": "2026-08-26",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 61.7,
        "grade": "C",
        "agentReady": false,
        "rank": 357,
        "ranked": true,
        "rankOf": 722,
        "categoryRank": 3,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 61,
          "maintenance": 62,
          "payments": 35,
          "reliability": 50,
          "schema": 88,
          "security": 64,
          "transparency": 74
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-07"
        },
        "negative": 0,
        "verdict": "The REST API publishes an OpenAPI 3.1 spec with 389 operations, llms.txt and OAuth scopes with separate write variants, and every call runs with the authorising user's permissions. No rate limit numbers are published, the MCP server is in beta, and its results can omit records without saying so.",
        "bestFor": "An agent working inside one company's BambooHR account on directory lookups, time off, reports and goals, with the user's own permissions as the limit.",
        "strengths": [
          "Public OpenAPI 3.1 spec with 389 operations, plus llms.txt and a Markdown copy of every docs page",
          "OAuth 2.0 with read and `.write` scopes per data area, such as `employee:job` and `time_off:requests.write`",
          "Every API and MCP call runs with the permissions of the user who authorised it, down to field level",
          "Dated API changelog with 14 entries between 23 July and 26 August 2026",
          "Free trial with no card, and plan prices per employee published without a login"
        ],
        "weaknesses": [
          "No rate limit numbers in the reviewed documentation. The terms reserve the right to throttle",
          "The MCP server is in beta, loads 56 tools and has no dynamic client registration",
          "Restricted records and fields can be dropped from MCP and API results with no marker",
          "PHP is the only maintained official SDK. The .NET and Java SDKs are marked unmaintained",
          "No security.txt, and the SOC 2 report sits in a trust centre behind registration and an NDA"
        ],
        "agentNotes": [
          "Treat a short or empty result as what this caller may see. `list_employees` drops employees when a filter or sort field is restricted",
          "Honour `Retry-After` on 429. Rate-limited calls returned 503 before 16 September 2026, so handle both",
          "Ask for read scopes only unless the task writes. Write access needs the matching `.write` scope",
          "Request `offline_access` to receive a refresh token. Access tokens last one hour",
          "Use `list-employees` with `fields`, `filter` and cursor paging in place of the unpaginated directory endpoint"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "C",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 61.7
          }
        ],
        "editorialScores": {
          "ergonomics": 61,
          "maintenance": 62,
          "payments": 35,
          "reliability": 50,
          "schema": 88,
          "security": 64,
          "transparency": 64
        },
        "provenanceScore": 83
      },
      "connect": {
        "install": "composer require bamboohr/api",
        "http": "curl -i -u \"{API Key}:x\" \"https://{companyDomain}.bamboohr.com/api/v1/employees/directory\""
      },
      "letme": {
        "capability": "https://letme.dev/hr.employees",
        "tool": "https://letme.dev/bamboohr"
      },
      "area": "business",
      "unitPrices": [
        {
          "item": "Core plan",
          "unit": "seat-month",
          "usd": 10,
          "note": "per employee; $250 a month flat for 25 employees or fewer"
        },
        {
          "item": "Pro plan",
          "unit": "seat-month",
          "usd": 17,
          "note": "per employee; $425 a month flat for 25 employees or fewer"
        },
        {
          "item": "Elite plan",
          "unit": "seat-month",
          "usd": 25,
          "note": "per employee; $650 a month flat for 25 employees or fewer"
        }
      ],
      "provenance": {
        "legalEntity": "Bamboo HR LLC",
        "domain": "bamboohr.com",
        "domainRegistered": "2009-07-23",
        "endpointOnVendorDomain": true,
        "terms": "https://www.bamboohr.com/legal/developer-terms-of-service",
        "privacy": "https://www.bamboohr.com/legal/privacy-policy",
        "statusPage": "https://status.bamboohr.com",
        "changelog": "https://documentation.bamboohr.com/docs/past-changes-to-the-api",
        "securityTxt": "none",
        "checked": "2026-10-07",
        "notes": [
          "The developer terms (last updated February 2026) and the terms of service (last updated 18 September 2026) name Bamboo HR LLC of Draper, Utah, under Utah law.",
          "Each customer's API and MCP server answer on its own bamboohr.com subdomain. The OpenAPI spec is served from openapi.bamboohr.io.",
          "www.bamboohr.com/.well-known/security.txt and /security.txt return 404.",
          "The privacy notice is dated September 2025 and the data processing agreement was last updated 3 June 2022.",
          "RDAP for bamboohr.com gives a registration date of 2009-07-23 and Amazon Registrar, Inc. as registrar."
        ],
        "score": 83
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/bamboohr.json",
      "live": {
        "slug": "bamboohr",
        "probe": {
          "target": "https://{companyDomain}.bamboohr.com/api/v1",
          "method": "get",
          "lastAt": "2026-10-08T21:12:05.143735673Z",
          "lastOk": false,
          "lastStatus": 0,
          "lastMs": 0,
          "lastNote": "invalid character \"{\" in host name",
          "authRequired": false,
          "uptime24h": 0,
          "uptime30d": 0,
          "p50ms24h": 0,
          "p95ms24h": 0,
          "samples24h": 64,
          "samples30d": 64,
          "days": [
            {
              "date": "2026-10-08",
              "probes": 64,
              "ok": 0
            }
          ],
          "outages": [
            {
              "start": "2026-10-08T15:28:56.936598984Z",
              "end": "0001-01-01T00:00:00Z",
              "note": "invalid character \"{\" in host name"
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.bamboohr.com",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-10-08T19:38:15.905176412Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "BambooHR/bhr-api-php",
            "version": "v2.0.1",
            "released": "2025-12-09",
            "seenAt": "2026-10-08T16:01:43.024945444Z"
          }
        ],
        "githubStars": 34,
        "securityTxt": {
          "url": "https://bamboohr.com/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-10-08T15:38:37.569543491Z"
        },
        "pages": [
          {
            "url": "https://documentation.bamboohr.com/docs/past-changes-to-the-api",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-10-08T18:19:54.999704896Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "f7d3d57fae58"
          },
          {
            "url": "https://www.bamboohr.com/pricing/",
            "kind": "pricing",
            "status": 200,
            "checkedAt": "2026-10-08T18:26:28.829581312Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "9575868f63fe"
          },
          {
            "url": "https://www.bamboohr.com/legal/privacy-policy",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-10-08T18:26:26.88829507Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "f0516cf3582f"
          },
          {
            "url": "https://www.bamboohr.com/legal/developer-terms-of-service",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-08T18:26:24.778039851Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "ac9c7f26d76a"
          }
        ],
        "updatedAt": "2026-10-08T21:12:05.143735673Z"
      }
    },
    "answer": "Factorial scores 66.3 (B) on agent readiness against BambooHR's 61.7 (C), and leads in 4 of 7 scored categories. BambooHR leads on schema \u0026 documentation and payments \u0026 pricing.",
    "b": {
      "slug": "factorial",
      "name": "Factorial",
      "vendor": "Everyday Software, S.L.",
      "vendorUrl": "https://factorial.com",
      "kind": "http-api",
      "category": "hr",
      "summary": "Factorial is an HR platform from Barcelona for employee records, time off, attendance, payroll data, recruiting and expenses. Agents reach it through a versioned REST API with API keys or OAuth 2.0, webhooks and a hosted MCP server.",
      "url": "https://www.anchorterminal.com/tools/factorial",
      "markdownUrl": "https://www.anchorterminal.com/tools/factorial.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/factorial.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/factorial.json",
      "repo": "https://github.com/factorialco/factorial-api-sdks",
      "license": "Proprietary service under Factorial's terms and conditions. The TypeScript and Python SDKs are MIT",
      "transports": [
        "http"
      ],
      "remoteUrl": "https://api.factorialhr.com",
      "packages": [
        {
          "registry": "npm",
          "name": "@factorialco/api-client"
        },
        {
          "registry": "pypi",
          "name": "factorial-api-client"
        }
      ],
      "auth": "mixed",
      "authNotes": "A company administrator creates credentials in Factorial's settings, with no registration or approval queue for a company's own use. An API key goes in `x-api-key`, grants every scope and does not expire. OAuth 2.0 apps use the authorisation code grant through Factorial ID (PKCE for public clients), choose from 33 scopes and receive 1-hour company or user tokens with a refresh token. A user token is limited by that employee's permission group. Integrations for other companies must use OAuth, with scopes agreed with Factorial. The MCP server uses OAuth with dynamic client registration and runs as the signed-in employee.",
      "pricing": "paid",
      "pricingNotes": "The pricing page says Factorial starts at $8 per user per month and asks for a tailored quote for everything else. The terms describe a free trial of at most 15 days granted at Factorial's discretion, and the sign-up page is drawn by script, so its conditions were not read. The demo API environment is provisioned by an account manager, so an agent cannot start without a customer account. Factorial One requests through the MCP server consume plan credits (https://factorial.com/pricing, checked 2026-10-08).",
      "priceSummary": "$8 / seat-mo",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the developer docs, the OpenAPI definition, the terms or the pricing page (checked 2026-10-08).",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": 7,
        "npmWeekly": 1367,
        "pypiWeekly": 1075,
        "asOf": "2026-10-08"
      },
      "docsUrl": "https://apidoc.factorialhr.com",
      "llmsTxt": "https://apidoc.factorialhr.com/llms.txt",
      "openapi": "https://api.factorialhr.com/oas/",
      "capabilities": [
        "hr.employees",
        "hr.time-off",
        "hr.org",
        "hr.documents",
        "recruiting.applications",
        "recruiting.jobs",
        "recruiting.candidates",
        "spend.expenses",
        "tasks.create"
      ],
      "tags": [
        "hosted",
        "paid",
        "sales-led",
        "api-key",
        "oauth",
        "mcp",
        "openapi",
        "llms-txt",
        "webhooks",
        "sandbox",
        "typescript",
        "python",
        "status-page",
        "sla",
        "bug-bounty",
        "soc2",
        "eu"
      ],
      "lastRelease": "2026-10-05",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 66.3,
        "grade": "B",
        "agentReady": false,
        "rank": 239,
        "ranked": true,
        "rankOf": 722,
        "categoryRank": 2,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 58,
          "maintenance": 84,
          "payments": 10,
          "reliability": 88,
          "schema": 77,
          "security": 65,
          "transparency": 78
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-08"
        },
        "negative": 0,
        "verdict": "A public OpenAPI 3.1 definition covers 615 operations, including leave approval and employee termination, and OAuth apps can be limited to 33 scopes. API keys always grant every scope and never expire. No idempotency keys exist, and a request to an expired API version is answered in an older schema with no error.",
        "bestFor": "An agent working for a company that already runs Factorial and needs employee records, leave requests with approval, attendance clock-ins, recruiting or expenses through one API.",
        "strengths": [
          "OpenAPI 3.1.0 definition at `https://api.factorialhr.com/oas/` with 615 operations and 137 webhook events, plus `llms.txt` and a Markdown twin of every docs page",
          "OAuth 2.0 with 33 scopes, PKCE for public clients, 1-hour access tokens and a revoke endpoint. User tokens are bound to an employee's permission group",
          "Time off can be requested, approved and rejected through the API (`/timeoff/leaves/approve` and `/timeoff/leaves/reject`)",
          "Dated API versions ship each quarter and are supported for one year, with release notes that mark removed endpoints and fields",
          "A 99.9 per cent monthly uptime commitment with a 5 per cent service credit is published in the trust centre, and the status page shows no incident since 1 June 2026"
        ],
        "weaknesses": [
          "An API key grants every scope, cannot be narrowed and does not expire",
          "No idempotency keys. The docs say the API does not deduplicate requests, so a blind retry can create a duplicate record",
          "A request to an unsupported API version is served in the oldest supported schema with no error",
          "The only published rate limit is 200 `POST` requests a minute, and no `Retry-After` header is documented",
          "The terms prohibit benchmarking, competitive evaluation and monitoring of availability, and pricing beyond a $8 starting figure is by quote"
        ],
        "agentNotes": [
          "Send an API key in `x-api-key` and an OAuth token in `Authorization: Bearer`. The key is JWT-formatted but is rejected as a bearer token",
          "Pin the version in the path, such as `/api/2026-10-01/resources/...`, and migrate within a year. Expired versions answer in an older schema without an error",
          "Treat a 200 with an empty body as a credential from the other environment. Production is `api.factorialhr.com` and demo is `api.eu2.demo.factorial.dev`",
          "Page with `limit=100` and pass `meta.end_cursor` as `after_id`. A larger limit is capped at 100",
          "Check whether a record exists before retrying a create. Retry only 429 and 5xx with backoff, and branch on `code` for 422 because messages are localised"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "B",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 66.3
          }
        ],
        "editorialScores": {
          "ergonomics": 58,
          "maintenance": 84,
          "payments": 10,
          "reliability": 88,
          "schema": 77,
          "security": 65,
          "transparency": 73
        },
        "provenanceScore": 82
      },
      "connect": {
        "install": "npm install @factorialco/api-client",
        "http": "curl --request GET \\\n     --url 'https://api.factorialhr.com/api/2026-10-01/resources/api_public/credentials' \\\n     --header 'accept: application/json' \\\n     --header 'x-api-key: \u003capi_key\u003e'"
      },
      "letme": {
        "capability": "https://letme.dev/hr.employees",
        "tool": "https://letme.dev/factorial"
      },
      "area": "business",
      "unitPrices": [
        {
          "item": "Starting price",
          "unit": "seat-month",
          "usd": 8,
          "note": "Headline figure on the pricing page. Plans are quoted by modules and company size"
        }
      ],
      "provenance": {
        "legalEntity": "Everyday Software, S.L.",
        "domain": "factorialhr.com",
        "domainRegistered": "2016-11-10",
        "endpointOnVendorDomain": true,
        "terms": "https://factorial.com/terms-of-use",
        "privacy": "https://factorial.com/privacy",
        "statusPage": "https://status.factorialhr.com",
        "changelog": "https://apidoc.factorialhr.com/changelog",
        "securityTxt": "none",
        "checked": "2026-10-08",
        "notes": [
          "The terms and conditions of contract of the Factorial platform (last amended 12 December 2025) name EVERYDAY SOFTWARE, S.L., Carrer de Llacuna 56, Building C, 08005 Barcelona, tax number B-66854530, and its subsidiaries. They govern the platform and mention the public API in clause 13.8. No separate API terms were found.",
          "The privacy policy (last update January 2026) names the same company as controller and describes its role as processor for data that customers' employees enter on the platform. It refers to a Data Processing Agreement that we did not read.",
          "The API answers at api.factorialhr.com, OAuth at id.factorialhr.com and the MCP server at mcp.factorialhr.com. The marketing site factorialhr.com redirects to factorial.com.",
          "RDAP gives 2016-11-10 as the registration date of factorialhr.com and 1998-04-24 for factorial.com.",
          "factorialhr.com/.well-known/security.txt and factorial.com/.well-known/security.txt both returned 404. The trust centre has a vulnerability report form and names a HackerOne programme.",
          "The SLA linked from clause 11.2 of the terms resolves to the trust centre at trust.factorial.co."
        ],
        "score": 82
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/factorial.json",
      "live": {
        "slug": "factorial",
        "probe": {
          "target": "https://api.factorialhr.com",
          "method": "get",
          "lastAt": "2026-10-08T21:12:10.156668384Z",
          "lastOk": true,
          "lastStatus": 404,
          "lastMs": 93,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 83,
          "p95ms24h": 165,
          "samples24h": 21,
          "samples30d": 21,
          "days": [
            {
              "date": "2026-10-08",
              "probes": 21,
              "ok": 21
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.factorialhr.com",
          "indicator": "none",
          "summary": "All Systems Operational",
          "checkedAt": "2026-10-08T21:06:04.681965883Z"
        },
        "updatedAt": "2026-10-08T21:12:10.156668384Z"
      }
    },
    "facts": [
      {
        "a": "HTTP API",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "Bamboo HR LLC",
        "b": "Everyday Software, S.L.",
        "name": "Vendor"
      },
      {
        "a": "https://{companyDomain}.bamboohr.com/api/v1",
        "b": "https://api.factorialhr.com",
        "name": "Hosted endpoint"
      },
      {
        "a": "HTTP",
        "b": "HTTP",
        "name": "Transports"
      },
      {
        "a": "OAuth or key",
        "b": "OAuth or key",
        "name": "Auth"
      },
      {
        "a": "Paid",
        "b": "Paid",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "Proprietary service under BambooHR's terms of service and developer terms. The official PHP SDK on GitHub is MIT",
        "b": "Proprietary service under Factorial's terms and conditions. The TypeScript and Python SDKs are MIT",
        "name": "Licence"
      },
      {
        "a": "56",
        "b": "none",
        "name": "Tools exposed"
      },
      {
        "a": "no",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "llms.txt"
      },
      {
        "a": "2026-08-26",
        "b": "2026-10-05",
        "name": "Last release"
      },
      {
        "a": "2026-02-01",
        "b": "no date given",
        "name": "Terms last updated"
      },
      {
        "a": "2025-09-01",
        "b": "2026-01-01",
        "name": "Privacy policy last updated"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Customer content may train models"
      },
      {
        "a": "yes",
        "b": "not found in the text",
        "name": "Terms restrict automated access"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "yes",
        "b": "not found in the text",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "34 stars",
        "b": "7 stars, 1.4k npm/wk, 1.1k PyPI/wk",
        "name": "Popularity"
      }
    ],
    "faq": [
      {
        "answer": "Factorial scores 66.3 (B) on agent readiness against BambooHR's 61.7 (C), and leads in 4 of 7 scored categories. BambooHR leads on schema \u0026 documentation and payments \u0026 pricing.",
        "question": "Which is better for AI agents, BambooHR or Factorial?"
      },
      {
        "answer": "Both take an API key or an OAuth sign-in.",
        "question": "Do BambooHR and Factorial need an API key?"
      },
      {
        "answer": "Yes. BambooHR has a hosted endpoint at https://{companyDomain}.bamboohr.com/api/v1 and Factorial at https://api.factorialhr.com.",
        "question": "Can an agent call BambooHR and Factorial without installing anything?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Schema \u0026 documentation, 88 against 77",
          "Payments \u0026 pricing, 35 against 10"
        ],
        "also": null,
        "goodFor": "An agent working inside one company's BambooHR account on directory lookups, time off, reports and goals, with the user's own permissions as the limit.",
        "slug": "bamboohr",
        "watchFor": "No rate limit numbers in the reviewed documentation. The terms reserve the right to throttle"
      },
      {
        "aheadOn": [
          "Reliability, 88 against 50",
          "Maintenance \u0026 community, 84 against 62"
        ],
        "also": null,
        "goodFor": "An agent working for a company that already runs Factorial and needs employee records, leave requests with approval, attendance clock-ins, recruiting or expenses through one API.",
        "slug": "factorial",
        "watchFor": "An API key grants every scope, cannot be narrowed and does not expire"
      }
    ],
    "job": {
      "capability": "hr.employees",
      "name": "Hr employees"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/bamboohr-vs-deel.json",
        "title": "BambooHR vs Deel",
        "url": "https://www.anchorterminal.com/compare/bamboohr-vs-deel"
      },
      {
        "json": "https://www.anchorterminal.com/compare/bamboohr-vs-hibob.json",
        "title": "BambooHR vs HiBob",
        "url": "https://www.anchorterminal.com/compare/bamboohr-vs-hibob"
      },
      {
        "json": "https://www.anchorterminal.com/compare/bamboohr-vs-humaans.json",
        "title": "BambooHR vs Humaans",
        "url": "https://www.anchorterminal.com/compare/bamboohr-vs-humaans"
      },
      {
        "json": "https://www.anchorterminal.com/compare/bamboohr-vs-rippling.json",
        "title": "BambooHR vs Rippling",
        "url": "https://www.anchorterminal.com/compare/bamboohr-vs-rippling"
      },
      {
        "json": "https://www.anchorterminal.com/compare/bamboohr-vs-zoho-people.json",
        "title": "BambooHR vs Zoho People",
        "url": "https://www.anchorterminal.com/compare/bamboohr-vs-zoho-people"
      },
      {
        "json": "https://www.anchorterminal.com/compare/deel-vs-factorial.json",
        "title": "Deel vs Factorial",
        "url": "https://www.anchorterminal.com/compare/deel-vs-factorial"
      },
      {
        "json": "https://www.anchorterminal.com/compare/factorial-vs-hibob.json",
        "title": "Factorial vs HiBob",
        "url": "https://www.anchorterminal.com/compare/factorial-vs-hibob"
      },
      {
        "json": "https://www.anchorterminal.com/compare/factorial-vs-humaans.json",
        "title": "Factorial vs Humaans",
        "url": "https://www.anchorterminal.com/compare/factorial-vs-humaans"
      },
      {
        "json": "https://www.anchorterminal.com/compare/factorial-vs-rippling.json",
        "title": "Factorial vs Rippling",
        "url": "https://www.anchorterminal.com/compare/factorial-vs-rippling"
      },
      {
        "json": "https://www.anchorterminal.com/compare/factorial-vs-zoho-people.json",
        "title": "Factorial vs Zoho People",
        "url": "https://www.anchorterminal.com/compare/factorial-vs-zoho-people"
      }
    ],
    "scores": [
      {
        "bamboohr": 50,
        "by": 38,
        "edge": "factorial",
        "factorial": 88,
        "key": "reliability",
        "name": "Reliability",
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "bamboohr": 88,
        "by": 11,
        "edge": "bamboohr",
        "factorial": 77,
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "weight": 13
      },
      {
        "bamboohr": 61,
        "by": 3,
        "edge": "bamboohr",
        "factorial": 58,
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "weight": 13
      },
      {
        "bamboohr": 64,
        "by": 1,
        "edge": "factorial",
        "factorial": 65,
        "key": "security",
        "name": "Security \u0026 auth",
        "weight": 14
      },
      {
        "bamboohr": 35,
        "by": 25,
        "edge": "bamboohr",
        "factorial": 10,
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "bamboohr": 62,
        "by": 22,
        "edge": "factorial",
        "factorial": 84,
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "weight": 7
      },
      {
        "bamboohr": 74,
        "by": 4,
        "edge": "factorial",
        "factorial": 78,
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "weight": 7
      }
    ],
    "summary": "Factorial scores 66.3 (B) on agent readiness against BambooHR's 61.7 (C), and leads in 4 of 7 scored categories. BambooHR leads on schema \u0026 documentation and payments \u0026 pricing. Both do hr employees.",
    "verdicts": {
      "bamboohr": "The REST API publishes an OpenAPI 3.1 spec with 389 operations, llms.txt and OAuth scopes with separate write variants, and every call runs with the authorising user's permissions. No rate limit numbers are published, the MCP server is in beta, and its results can omit records without saying so.",
      "factorial": "A public OpenAPI 3.1 definition covers 615 operations, including leave approval and employee termination, and OAuth apps can be limited to 33 scopes. API keys always grant every scope and never expire. No idempotency keys exist, and a request to an expired API version is answered in an older schema with no error."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/bamboohr-vs-factorial",
    "json": "https://www.anchorterminal.com/compare/bamboohr-vs-factorial.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/bamboohr-vs-factorial.md",
    "slim": "https://www.anchorterminal.com/compare/bamboohr-vs-factorial.min.md"
  },
  "markdown": "Factorial scores 66.3 (B) on agent readiness against BambooHR's 61.7 (C), and leads in 4 of 7 scored categories. BambooHR leads on schema \u0026 documentation and payments \u0026 pricing. Both do hr employees.\n\n- BambooHR: grade C, 61.7/100, rank #357 of 722. Markdown https://www.anchorterminal.com/tools/bamboohr.md · JSON https://www.anchorterminal.com/api/v1/tools/bamboohr.json\n- Factorial: grade B, 66.3/100, rank #239 of 722. Markdown https://www.anchorterminal.com/tools/factorial.md · JSON https://www.anchorterminal.com/api/v1/tools/factorial.json\n\n## Which one, for what\n\n### BambooHR (C)\n\nGood for: An agent working inside one company's BambooHR account on directory lookups, time off, reports and goals, with the user's own permissions as the limit.\n\nAhead on:\n- Schema \u0026 documentation, 88 against 77\n- Payments \u0026 pricing, 35 against 10\n\nWatch for: No rate limit numbers in the reviewed documentation. The terms reserve the right to throttle\n\n### Factorial (B)\n\nGood for: An agent working for a company that already runs Factorial and needs employee records, leave requests with approval, attendance clock-ins, recruiting or expenses through one API.\n\nAhead on:\n- Reliability, 88 against 50\n- Maintenance \u0026 community, 84 against 62\n\nWatch for: An API key grants every scope, cannot be narrowed and does not expire\n\n\n## Score by category\n\n| Category | Weight | BambooHR | Factorial | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 50 | 88 | Factorial +38 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 88 | 77 | BambooHR +11 |\n| Agent ergonomics | 13% (16.2 this run) | 61 | 58 | BambooHR +3 |\n| Security \u0026 auth | 14% (17.5 this run) | 64 | 65 | Factorial +1 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 35 | 10 | BambooHR +25 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 62 | 84 | Factorial +22 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 74 | 78 | Factorial +4 |\n| Negative events | ≤15 | 0 | 0 | |\n| **Total** | | **61.7 · C** | **66.3 · B** | |\n\n## Facts side by side\n\n| Fact | BambooHR | Factorial |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | Bamboo HR LLC | Everyday Software, S.L. |\n| Hosted endpoint | `https://{companyDomain}.bamboohr.com/api/v1` | `https://api.factorialhr.com` |\n| Transports | HTTP | HTTP |\n| Auth | OAuth or key | OAuth or key |\n| Pricing | Paid | Paid |\n| x402 | no | no |\n| Licence | Proprietary service under BambooHR's terms of service and developer terms. The official PHP SDK on GitHub is MIT | Proprietary service under Factorial's terms and conditions. The TypeScript and Python SDKs are MIT |\n| Tools exposed | 56 | none |\n| Read-only variant documented | no | no |\n| llms.txt | yes | yes |\n| Last release | 2026-08-26 | 2026-10-05 |\n| Terms last updated | 2026-02-01 | no date given |\n| Privacy policy last updated | 2025-09-01 | 2026-01-01 |\n| Customer content may train models | not found in the text | not found in the text |\n| Terms restrict automated access | yes | not found in the text |\n| Terms restrict benchmarking | yes | yes |\n| Terms or service can change without notice | yes | not found in the text |\n| Arbitration or class-action waiver | not found in the text | not found in the text |\n| Popularity | 34 stars | 7 stars, 1.4k npm/wk, 1.1k PyPI/wk |\n\n## Verdicts\n\n**BambooHR.** The REST API publishes an OpenAPI 3.1 spec with 389 operations, llms.txt and OAuth scopes with separate write variants, and every call runs with the authorising user's permissions. No rate limit numbers are published, the MCP server is in beta, and its results can omit records without saying so.\n\n**Factorial.** A public OpenAPI 3.1 definition covers 615 operations, including leave approval and employee termination, and OAuth apps can be limited to 33 scopes. API keys always grant every scope and never expire. No idempotency keys exist, and a request to an expired API version is answered in an older schema with no error.\n\n## Before you call either\n\n### BambooHR\n\n1. Treat a short or empty result as what this caller may see. `list_employees` drops employees when a filter or sort field is restricted\n2. Honour `Retry-After` on 429. Rate-limited calls returned 503 before 16 September 2026, so handle both\n3. Ask for read scopes only unless the task writes. Write access needs the matching `.write` scope\n4. Request `offline_access` to receive a refresh token. Access tokens last one hour\n5. Use `list-employees` with `fields`, `filter` and cursor paging in place of the unpaginated directory endpoint\n\n### Factorial\n\n1. Send an API key in `x-api-key` and an OAuth token in `Authorization: Bearer`. The key is JWT-formatted but is rejected as a bearer token\n2. Pin the version in the path, such as `/api/2026-10-01/resources/...`, and migrate within a year. Expired versions answer in an older schema without an error\n3. Treat a 200 with an empty body as a credential from the other environment. Production is `api.factorialhr.com` and demo is `api.eu2.demo.factorial.dev`\n4. Page with `limit=100` and pass `meta.end_cursor` as `after_id`. A larger limit is capped at 100\n5. Check whether a record exists before retrying a create. Retry only 429 and 5xx with backoff, and branch on `code` for 422 because messages are localised\n\n## Questions\n\n### Which is better for AI agents, BambooHR or Factorial?\n\nFactorial scores 66.3 (B) on agent readiness against BambooHR's 61.7 (C), and leads in 4 of 7 scored categories. BambooHR leads on schema \u0026 documentation and payments \u0026 pricing.\n\n### Do BambooHR and Factorial need an API key?\n\nBoth take an API key or an OAuth sign-in.\n\n### Can an agent call BambooHR and Factorial without installing anything?\n\nYes. BambooHR has a hosted endpoint at https://{companyDomain}.bamboohr.com/api/v1 and Factorial at https://api.factorialhr.com.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/bamboohr-vs-factorial.json, and with the fewest tokens: https://www.anchorterminal.com/compare/bamboohr-vs-factorial.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"bamboohr\", \"b\": \"factorial\"}`. From a terminal: `anchor compare bamboohr factorial`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/bamboohr.json and https://www.anchorterminal.com/api/v1/tools/factorial.json\n\n## Other comparisons with BambooHR or Factorial\n\n- [BambooHR vs Deel](https://www.anchorterminal.com/compare/bamboohr-vs-deel.md)\n- [BambooHR vs HiBob](https://www.anchorterminal.com/compare/bamboohr-vs-hibob.md)\n- [BambooHR vs Humaans](https://www.anchorterminal.com/compare/bamboohr-vs-humaans.md)\n- [BambooHR vs Rippling](https://www.anchorterminal.com/compare/bamboohr-vs-rippling.md)\n- [BambooHR vs Zoho People](https://www.anchorterminal.com/compare/bamboohr-vs-zoho-people.md)\n- [Deel vs Factorial](https://www.anchorterminal.com/compare/deel-vs-factorial.md)\n- [Factorial vs HiBob](https://www.anchorterminal.com/compare/factorial-vs-hibob.md)\n- [Factorial vs Humaans](https://www.anchorterminal.com/compare/factorial-vs-humaans.md)\n- [Factorial vs Rippling](https://www.anchorterminal.com/compare/factorial-vs-rippling.md)\n- [Factorial vs Zoho People](https://www.anchorterminal.com/compare/factorial-vs-zoho-people.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-08",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.4",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Compare",
        "url": "https://www.anchorterminal.com/compare/"
      },
      {
        "name": "BambooHR vs Factorial",
        "url": ""
      }
    ],
    "description": "Factorial scores 66.3 (B) on agent readiness against BambooHR's 61.7 (C), and leads in 4 of 7 scored categories. BambooHR leads on schema \u0026 documentation and payments \u0026 pricing. Both do hr employees. Category scores, facts, verdicts and agent notes side by side.",
    "facts": [
      "BambooHR C 61.7",
      "Factorial B 66.3",
      "scores"
    ],
    "h1": "BambooHR vs Factorial",
    "image": "https://www.anchorterminal.com/assets/og/compare-bamboohr-vs-factorial.png",
    "path": "/compare/bamboohr-vs-factorial",
    "published": "2026-10-01",
    "section": "tools",
    "title": "BambooHR vs Factorial for AI agents, C 61.7 vs B 66.3",
    "toc": null,
    "updated": "2026-10-08",
    "url": "https://www.anchorterminal.com/compare/bamboohr-vs-factorial"
  },
  "tokens": {
    "markdown": 2000,
    "slim": 630
  },
  "version": 1
}
