{
  "data": {
    "a": {
      "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"
      }
    },
    "answer": "Factorial scores 66.3 (B) on agent readiness against Rippling's 60.8 (C), and leads in 5 of 7 scored categories. Rippling leads on agent ergonomics and security \u0026 auth.",
    "b": {
      "slug": "rippling",
      "name": "Rippling",
      "vendor": "People Center, Inc. dba Rippling",
      "vendorUrl": "https://www.rippling.com",
      "kind": "http-api",
      "category": "hr",
      "summary": "Rippling is a workforce platform for HR, payroll, IT and spend. Its REST Platform API v2 reads and writes worker, time off and organisation data with scoped Bearer tokens. A first-party MCP server runs as the signed-in employee.",
      "url": "https://www.anchorterminal.com/tools/rippling",
      "markdownUrl": "https://www.anchorterminal.com/tools/rippling.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/rippling.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/rippling.json",
      "license": "Proprietary service under Rippling's customer terms and Developer Terms of Use. The JavaScript SDK on npm is Apache-2.0",
      "transports": [
        "http"
      ],
      "remoteUrl": "https://rest.ripplingapis.com",
      "packages": [
        {
          "registry": "npm",
          "name": "@rippling/rippling-sdk"
        }
      ],
      "auth": "mixed",
      "authNotes": "A Rippling customer creates API tokens in Tools \u003e Developer \u003e API Tokens and sends them as `Authorization: Bearer` to https://rest.ripplingapis.com. A token's access is the overlap of its chosen scopes (162 listed, most split into read and read-write) and its owner's permission profile. It is shown once, can't change owner, and is revoked when the owner is terminated or after 30 days unused. App Shop partners must use OAuth 2.0 (authorisation code with refresh, one token per customer company) and get a partner account only after applying and being approved. The Rippling MCP signs in as the employee, after an admin assigns tools in MCP Gateway.",
      "pricing": "paid",
      "pricingNotes": "No public prices. rippling.com/pricing says most products are billed per employee per month and asks for a quote, with no free tier or trial found. Reference pages name the package an endpoint needs, such as API Tier 1, with no price shown. Partners pay nothing to use the API or list in the App Shop, but must apply, and their customers need the Identity \u0026 Access Management package. Approved partners get a test company, and the API can create sandboxes. Rippling MCP tool calls need a Rippling AI trial or subscription (checked 2026-10-07).",
      "priceSummary": "Paid",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in llms.txt, the REST API essentials pages or the pricing page (checked 2026-10-07).",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": null,
        "npmWeekly": 3633,
        "pypiWeekly": null,
        "asOf": "2026-10-07"
      },
      "docsUrl": "https://developer.rippling.com/documentation/rest-api",
      "llmsTxt": "https://developer.rippling.com/llms.txt",
      "capabilities": [
        "hr.employees",
        "hr.time-off",
        "hr.org",
        "hr.onboarding",
        "hr.documents",
        "recruiting.candidates"
      ],
      "tags": [
        "hosted",
        "enterprise",
        "api-key",
        "oauth",
        "mcp",
        "llms-txt",
        "typescript",
        "webhooks",
        "sales-led",
        "status-page",
        "soc2",
        "iso27001"
      ],
      "lastRelease": "2026-10-07",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 60.8,
        "grade": "C",
        "agentReady": false,
        "rank": 386,
        "ranked": true,
        "rankOf": 722,
        "categoryRank": 4,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 75,
          "maintenance": 74,
          "payments": 5,
          "reliability": 62,
          "schema": 73,
          "security": 90,
          "transparency": 51
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-07"
        },
        "negative": -3,
        "negativeNotes": [
          "2026-05-21 and 2026-06-17. The changelog labels 14 changes breaking since October 2025, among them `draft_hire_id` removed from POST /draft-hires/ responses on 21 May 2026 and `candidate_id` made required on GET /candidate-applications/ on 17 June 2026, while the reference still shows a single version, 2024-08-01. The versioning page says a breaking change requires a version update. Each change is documented on the day, so the smallest deduction applies (https://developer.rippling.com/documentation/rest-api/essentials/changelog)."
        ],
        "verdict": "API tokens carry any of 162 scopes and can never see more than their owner, and hires and worker changes land as drafts for a person to review. There is no public price, trial or self-serve signup, and status.rippling.com shows five incidents marked critical between 16 July and 29 September 2026.",
        "bestFor": "An agent working for a company already on Rippling that needs scoped reads of people, organisation and time off data, and writes that wait for human review.",
        "strengths": [
          "API tokens are limited to chosen scopes (162 listed) and to the owner's permission profile, and are revoked after 30 days unused",
          "Hires and worker changes are created as drafts for review in Rippling, and leave requests follow the normal approval flow",
          "Dated changelog with 141 entries since 6 August 2025, 46 of them between 9 July and 28 September 2026, each labelled breaking or not",
          "llms.txt with integration guidance for agents, cursor pagination, filter, expand and order_by on list endpoints",
          "SOC 1 and SOC 2 Type II, ISO 27001, ISO 27018, ISO 42001 and CSA STAR Level 2 listed, with a paid vulnerability reporting programme"
        ],
        "weaknesses": [
          "No public price, free tier or trial. rippling.com/pricing is a quote form, and endpoints name a paid package such as API Tier 1",
          "Five incidents marked critical and three marked major on status.rippling.com between 16 July and 29 September 2026",
          "The changelog labels 14 changes breaking since October 2025 while the reference still shows one version, 2024-08-01",
          "No downloadable OpenAPI file found, and the documentation site renders only with JavaScript",
          "One official SDK, JavaScript at 0.2.0-alpha.106, and the documented @rippling/rippling-sdk-mcp package returned 404 on npm"
        ],
        "agentNotes": [
          "Call https://rest.ripplingapis.com with a Bearer token and pin `Rippling-Api-Version`. Use V1 at api.rippling.com only for resources that exist nowhere else",
          "Treat a null field as possibly hidden. Check `__meta.redacted_fields`, the token's scopes and whether `expand` was sent",
          "Follow `next_link` until it is null. The default page is 50 records and a `limit` above 100 returns 400",
          "Stay under 300 requests per IP in any 10 seconds. Going over rejects every request for the next 10 seconds",
          "Send an `Idempotency-Key` on POST /hires/ and POST /draft-transitions/, then poll the request until it reaches a final status"
        ],
        "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": 60.8
          }
        ],
        "editorialScores": {
          "ergonomics": 75,
          "maintenance": 74,
          "payments": 5,
          "reliability": 62,
          "schema": 73,
          "security": 90,
          "transparency": 33
        },
        "provenanceScore": 69
      },
      "connect": {
        "install": "npm install @rippling/rippling-sdk",
        "http": "curl -X GET 'https://rest.ripplingapis.com/companies/' \\\n  -H 'Accept: application/json' \\\n  -H 'Authorization: Bearer YOUR_API_TOKEN'"
      },
      "letme": {
        "capability": "https://letme.dev/hr.employees",
        "tool": "https://letme.dev/rippling"
      },
      "area": "business",
      "provenance": {
        "legalEntity": "People Center, Inc. dba Rippling",
        "domain": "rippling.com",
        "domainRegistered": "2002-02-25",
        "endpointOnVendorDomain": false,
        "terms": "https://app.rippling.com/legal",
        "privacy": "https://app.rippling.com/legal/privacy",
        "statusPage": "https://status.rippling.com",
        "changelog": "https://developer.rippling.com/documentation/rest-api/essentials/changelog",
        "securityTxt": "none",
        "checked": "2026-10-07",
        "notes": [
          "The Vulnerability Reporting Terms and Conditions, last updated 21 August 2024, name People Center, Inc. dba Rippling and its affiliates.",
          "The v2 API answers at rest.ripplingapis.com, a separate domain from rippling.com that the vendor's llms.txt and quickstart name. V1 and the OAuth token exchange use api.rippling.com and app.rippling.com.",
          "www.rippling.com/.well-known/security.txt returns 404. Reports go through the form at rippling.com/vulnerability-reporting or to security@rippling.com.",
          "The terms, privacy notice, DPA and Developer Terms of Use sit on app.rippling.com, which returned only a JavaScript application to our reader, so their text is unread.",
          "RDAP for rippling.com gives a registration date of 2002-02-25."
        ],
        "score": 69
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/rippling.json",
      "live": {
        "slug": "rippling",
        "probe": {
          "target": "https://rest.ripplingapis.com",
          "method": "get",
          "lastAt": "2026-10-08T21:12:20.346180206Z",
          "lastOk": true,
          "lastStatus": 404,
          "lastMs": 277,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 273,
          "p95ms24h": 617,
          "samples24h": 64,
          "samples30d": 64,
          "days": [
            {
              "date": "2026-10-08",
              "probes": 64,
              "ok": 64
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.rippling.com",
          "indicator": "none",
          "summary": "All Systems Operational",
          "checkedAt": "2026-10-08T21:06:24.407012126Z"
        },
        "versions": [
          {
            "registry": "npm",
            "name": "@rippling/rippling-sdk",
            "version": "0.2.0-alpha.106",
            "seenAt": "2026-10-08T16:27:45.404049579Z"
          }
        ],
        "npmWeekly": 3633,
        "securityTxt": {
          "url": "https://rippling.com/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-10-08T15:38:49.166690021Z"
        },
        "pages": [
          {
            "url": "https://developer.rippling.com/documentation/rest-api/essentials/changelog",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-10-08T18:17:17.596835563Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "e3b0c44298fc"
          },
          {
            "url": "https://app.rippling.com/legal/privacy",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-10-08T18:15:21.558708711Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "8a3694d85aaa"
          },
          {
            "url": "https://app.rippling.com/legal",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-08T18:15:19.356857643Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "8a3694d85aaa"
          }
        ],
        "updatedAt": "2026-10-08T21:12:20.346180206Z"
      }
    },
    "facts": [
      {
        "a": "HTTP API",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "Everyday Software, S.L.",
        "b": "People Center, Inc. dba Rippling",
        "name": "Vendor"
      },
      {
        "a": "https://api.factorialhr.com",
        "b": "https://rest.ripplingapis.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 Factorial's terms and conditions. The TypeScript and Python SDKs are MIT",
        "b": "Proprietary service under Rippling's customer terms and Developer Terms of Use. The JavaScript SDK on npm is Apache-2.0",
        "name": "Licence"
      },
      {
        "a": "no",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "llms.txt"
      },
      {
        "a": "2026-10-05",
        "b": "2026-10-07",
        "name": "Last release"
      },
      {
        "a": "no date given",
        "b": "couldn't be read",
        "name": "Terms last updated"
      },
      {
        "a": "2026-01-01",
        "b": "couldn't be read",
        "name": "Privacy policy last updated"
      },
      {
        "a": "not found in the text",
        "b": "couldn't be read",
        "name": "Customer content may train models"
      },
      {
        "a": "not found in the text",
        "b": "couldn't be read",
        "name": "Terms restrict automated access"
      },
      {
        "a": "yes",
        "b": "couldn't be read",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "not found in the text",
        "b": "couldn't be read",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "not found in the text",
        "b": "couldn't be read",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "7 stars, 1.4k npm/wk, 1.1k PyPI/wk",
        "b": "3.6k npm/wk",
        "name": "Popularity"
      }
    ],
    "faq": [
      {
        "answer": "Factorial scores 66.3 (B) on agent readiness against Rippling's 60.8 (C), and leads in 5 of 7 scored categories. Rippling leads on agent ergonomics and security \u0026 auth.",
        "question": "Which is better for AI agents, Factorial or Rippling?"
      },
      {
        "answer": "Both take an API key or an OAuth sign-in.",
        "question": "Do Factorial and Rippling need an API key?"
      },
      {
        "answer": "Yes. Factorial has a hosted endpoint at https://api.factorialhr.com and Rippling at https://rest.ripplingapis.com.",
        "question": "Can an agent call Factorial and Rippling without installing anything?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Reliability, 88 against 62",
          "Payments \u0026 pricing, 10 against 5",
          "Maintenance \u0026 community, 84 against 74",
          "Transparency \u0026 trust, 78 against 51"
        ],
        "also": [
          "No incidents deducted, where Rippling loses 3 points for them"
        ],
        "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"
      },
      {
        "aheadOn": [
          "Agent ergonomics, 75 against 58",
          "Security \u0026 auth, 90 against 65"
        ],
        "also": null,
        "goodFor": "An agent working for a company already on Rippling that needs scoped reads of people, organisation and time off data, and writes that wait for human review.",
        "slug": "rippling",
        "watchFor": "No public price, free tier or trial. rippling.com/pricing is a quote form, and endpoints name a paid package such as API Tier 1"
      }
    ],
    "job": {
      "capability": "hr.employees",
      "name": "Hr employees"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/bamboohr-vs-factorial.json",
        "title": "BambooHR vs Factorial",
        "url": "https://www.anchorterminal.com/compare/bamboohr-vs-factorial"
      },
      {
        "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/deel-vs-factorial.json",
        "title": "Deel vs Factorial",
        "url": "https://www.anchorterminal.com/compare/deel-vs-factorial"
      },
      {
        "json": "https://www.anchorterminal.com/compare/deel-vs-rippling.json",
        "title": "Deel vs Rippling",
        "url": "https://www.anchorterminal.com/compare/deel-vs-rippling"
      },
      {
        "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-zoho-people.json",
        "title": "Factorial vs Zoho People",
        "url": "https://www.anchorterminal.com/compare/factorial-vs-zoho-people"
      },
      {
        "json": "https://www.anchorterminal.com/compare/hibob-vs-rippling.json",
        "title": "HiBob vs Rippling",
        "url": "https://www.anchorterminal.com/compare/hibob-vs-rippling"
      },
      {
        "json": "https://www.anchorterminal.com/compare/humaans-vs-rippling.json",
        "title": "Humaans vs Rippling",
        "url": "https://www.anchorterminal.com/compare/humaans-vs-rippling"
      },
      {
        "json": "https://www.anchorterminal.com/compare/rippling-vs-zoho-people.json",
        "title": "Rippling vs Zoho People",
        "url": "https://www.anchorterminal.com/compare/rippling-vs-zoho-people"
      }
    ],
    "scores": [
      {
        "by": 26,
        "edge": "factorial",
        "factorial": 88,
        "key": "reliability",
        "name": "Reliability",
        "rippling": 62,
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 4,
        "edge": "factorial",
        "factorial": 77,
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "rippling": 73,
        "weight": 13
      },
      {
        "by": 17,
        "edge": "rippling",
        "factorial": 58,
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "rippling": 75,
        "weight": 13
      },
      {
        "by": 25,
        "edge": "rippling",
        "factorial": 65,
        "key": "security",
        "name": "Security \u0026 auth",
        "rippling": 90,
        "weight": 14
      },
      {
        "by": 5,
        "edge": "factorial",
        "factorial": 10,
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "rippling": 5,
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 10,
        "edge": "factorial",
        "factorial": 84,
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "rippling": 74,
        "weight": 7
      },
      {
        "by": 27,
        "edge": "factorial",
        "factorial": 78,
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "rippling": 51,
        "weight": 7
      }
    ],
    "summary": "Factorial scores 66.3 (B) on agent readiness against Rippling's 60.8 (C), and leads in 5 of 7 scored categories. Rippling leads on agent ergonomics and security \u0026 auth. Both do hr employees.",
    "verdicts": {
      "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.",
      "rippling": "API tokens carry any of 162 scopes and can never see more than their owner, and hires and worker changes land as drafts for a person to review. There is no public price, trial or self-serve signup, and status.rippling.com shows five incidents marked critical between 16 July and 29 September 2026."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/factorial-vs-rippling",
    "json": "https://www.anchorterminal.com/compare/factorial-vs-rippling.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/factorial-vs-rippling.md",
    "slim": "https://www.anchorterminal.com/compare/factorial-vs-rippling.min.md"
  },
  "markdown": "Factorial scores 66.3 (B) on agent readiness against Rippling's 60.8 (C), and leads in 5 of 7 scored categories. Rippling leads on agent ergonomics and security \u0026 auth. Both do hr employees.\n\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- Rippling: grade C, 60.8/100, rank #386 of 722. Markdown https://www.anchorterminal.com/tools/rippling.md · JSON https://www.anchorterminal.com/api/v1/tools/rippling.json\n\n## Which one, for what\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 62\n- Payments \u0026 pricing, 10 against 5\n- Maintenance \u0026 community, 84 against 74\n- Transparency \u0026 trust, 78 against 51\n\nAlso in its favour:\n- No incidents deducted, where Rippling loses 3 points for them\n\nWatch for: An API key grants every scope, cannot be narrowed and does not expire\n\n### Rippling (C)\n\nGood for: An agent working for a company already on Rippling that needs scoped reads of people, organisation and time off data, and writes that wait for human review.\n\nAhead on:\n- Agent ergonomics, 75 against 58\n- Security \u0026 auth, 90 against 65\n\nWatch for: No public price, free tier or trial. rippling.com/pricing is a quote form, and endpoints name a paid package such as API Tier 1\n\n\n## Score by category\n\n| Category | Weight | Factorial | Rippling | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 88 | 62 | Factorial +26 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 77 | 73 | Factorial +4 |\n| Agent ergonomics | 13% (16.2 this run) | 58 | 75 | Rippling +17 |\n| Security \u0026 auth | 14% (17.5 this run) | 65 | 90 | Rippling +25 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 10 | 5 | Factorial +5 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 84 | 74 | Factorial +10 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 78 | 51 | Factorial +27 |\n| Negative events | ≤15 | 0 | -3 | |\n| **Total** | | **66.3 · B** | **60.8 · C** | |\n\n## Facts side by side\n\n| Fact | Factorial | Rippling |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | Everyday Software, S.L. | People Center, Inc. dba Rippling |\n| Hosted endpoint | `https://api.factorialhr.com` | `https://rest.ripplingapis.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 Factorial's terms and conditions. The TypeScript and Python SDKs are MIT | Proprietary service under Rippling's customer terms and Developer Terms of Use. The JavaScript SDK on npm is Apache-2.0 |\n| Read-only variant documented | no | no |\n| llms.txt | yes | yes |\n| Last release | 2026-10-05 | 2026-10-07 |\n| Terms last updated | no date given | couldn't be read |\n| Privacy policy last updated | 2026-01-01 | couldn't be read |\n| Customer content may train models | not found in the text | couldn't be read |\n| Terms restrict automated access | not found in the text | couldn't be read |\n| Terms restrict benchmarking | yes | couldn't be read |\n| Terms or service can change without notice | not found in the text | couldn't be read |\n| Arbitration or class-action waiver | not found in the text | couldn't be read |\n| Popularity | 7 stars, 1.4k npm/wk, 1.1k PyPI/wk | 3.6k npm/wk |\n\n## Verdicts\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**Rippling.** API tokens carry any of 162 scopes and can never see more than their owner, and hires and worker changes land as drafts for a person to review. There is no public price, trial or self-serve signup, and status.rippling.com shows five incidents marked critical between 16 July and 29 September 2026.\n\n## Before you call either\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### Rippling\n\n1. Call https://rest.ripplingapis.com with a Bearer token and pin `Rippling-Api-Version`. Use V1 at api.rippling.com only for resources that exist nowhere else\n2. Treat a null field as possibly hidden. Check `__meta.redacted_fields`, the token's scopes and whether `expand` was sent\n3. Follow `next_link` until it is null. The default page is 50 records and a `limit` above 100 returns 400\n4. Stay under 300 requests per IP in any 10 seconds. Going over rejects every request for the next 10 seconds\n5. Send an `Idempotency-Key` on POST /hires/ and POST /draft-transitions/, then poll the request until it reaches a final status\n\n## Questions\n\n### Which is better for AI agents, Factorial or Rippling?\n\nFactorial scores 66.3 (B) on agent readiness against Rippling's 60.8 (C), and leads in 5 of 7 scored categories. Rippling leads on agent ergonomics and security \u0026 auth.\n\n### Do Factorial and Rippling need an API key?\n\nBoth take an API key or an OAuth sign-in.\n\n### Can an agent call Factorial and Rippling without installing anything?\n\nYes. Factorial has a hosted endpoint at https://api.factorialhr.com and Rippling at https://rest.ripplingapis.com.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/factorial-vs-rippling.json, and with the fewest tokens: https://www.anchorterminal.com/compare/factorial-vs-rippling.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"factorial\", \"b\": \"rippling\"}`. From a terminal: `anchor compare factorial rippling`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/factorial.json and https://www.anchorterminal.com/api/v1/tools/rippling.json\n\n## Other comparisons with Factorial or Rippling\n\n- [BambooHR vs Factorial](https://www.anchorterminal.com/compare/bamboohr-vs-factorial.md)\n- [BambooHR vs Rippling](https://www.anchorterminal.com/compare/bamboohr-vs-rippling.md)\n- [Deel vs Factorial](https://www.anchorterminal.com/compare/deel-vs-factorial.md)\n- [Deel vs Rippling](https://www.anchorterminal.com/compare/deel-vs-rippling.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 Zoho People](https://www.anchorterminal.com/compare/factorial-vs-zoho-people.md)\n- [HiBob vs Rippling](https://www.anchorterminal.com/compare/hibob-vs-rippling.md)\n- [Humaans vs Rippling](https://www.anchorterminal.com/compare/humaans-vs-rippling.md)\n- [Rippling vs Zoho People](https://www.anchorterminal.com/compare/rippling-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": "Factorial vs Rippling",
        "url": ""
      }
    ],
    "description": "Factorial scores 66.3 (B) on agent readiness against Rippling's 60.8 (C), and leads in 5 of 7 scored categories. Rippling leads on agent ergonomics and security \u0026 auth. Both do hr employees. Category scores, facts, verdicts and agent notes side by side.",
    "facts": [
      "Factorial B 66.3",
      "Rippling C 60.8",
      "scores"
    ],
    "h1": "Factorial vs Rippling",
    "image": "https://www.anchorterminal.com/assets/og/compare-factorial-vs-rippling.png",
    "path": "/compare/factorial-vs-rippling",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Factorial vs Rippling for AI agents, B 66.3 vs C 60.8",
    "toc": null,
    "updated": "2026-10-08",
    "url": "https://www.anchorterminal.com/compare/factorial-vs-rippling"
  },
  "tokens": {
    "markdown": 2100,
    "slim": 730
  },
  "version": 1
}
