{
  "data": {
    "a": {
      "slug": "grist",
      "name": "Grist",
      "vendor": "Grist Labs Inc.",
      "vendorUrl": "https://www.getgrist.com",
      "kind": "http-api",
      "category": "spreadsheets",
      "summary": "Grist is a spreadsheet-database hybrid from Grist Labs with typed columns and Python formulas, sold as a hosted service and as open-source software to self-host. Agents reach it through a REST API and an MCP server with OAuth.",
      "url": "https://www.anchorterminal.com/tools/grist",
      "markdownUrl": "https://www.anchorterminal.com/tools/grist.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/grist.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/grist.json",
      "repo": "https://github.com/gristlabs/grist-core",
      "license": "Apache-2.0 for the community edition in gristlabs/grist-core. The full edition, which adds the MCP server, the OAuth server and audit log streaming, is proprietary and needs an activation key after a 30-day trial. Docs are CC BY-SA 4.0",
      "transports": [
        "http",
        "streamable-http"
      ],
      "remoteUrl": "https://docs.getgrist.com/api",
      "packages": [
        {
          "registry": "npm",
          "name": "grist-api"
        },
        {
          "registry": "pypi",
          "name": "grist-api"
        }
      ],
      "auth": "mixed",
      "authNotes": "Self-serve. A signed-in user creates an API key on the Developer page of account settings and sends it as `Authorization: Bearer`. The key carries its owner's full account access, and each account has one. The alternative is OAuth 2.0 with PKCE, used by the MCP server and by registered apps. The user approves any of seven scopes (`doc:read`, `doc:write`, `doc.schema:write`, `doc:download`, `doc:webhooks`, `user.profile:read`, `offline_access`) and can limit the grant to chosen sites, workspaces or documents. Access tokens last 1 hour and refresh tokens 60 days, and a grant can be revoked per app. Clients can register themselves by Client ID Metadata Document. Not every REST endpoint accepts an OAuth token.",
      "pricing": "freemium",
      "pricingNotes": "Free plan with 5,000 rows a document and 3,000 API calls a month per site, REST and MCP calls together, so an agent can start without a contract. Pro is $10 a user a month ($8 billed yearly) and Business $30 ($24 yearly, minimum 5 users), Enterprise through sales. API calls aren't priced, the MCP server is on every plan for now, and there's no separate sandbox. The self-hosted community edition is free (checked 2026-10-08).",
      "priceSummary": "$10 / seat-mo",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the API docs, the OpenAPI file, the MCP docs or the pricing page (checked 2026-10-08).",
        "endpoints": []
      },
      "toolCount": 34,
      "popularity": {
        "githubStars": 11900,
        "npmWeekly": 341,
        "pypiWeekly": 240,
        "asOf": "2026-10-08"
      },
      "docsUrl": "https://support.getgrist.com/rest-api/",
      "openapi": "https://raw.githubusercontent.com/gristlabs/grist-help/master/api/grist.yml",
      "capabilities": [
        "sheets.records",
        "sheets.read",
        "sheets.write",
        "sheets.tables",
        "sheets.formulas"
      ],
      "tags": [
        "official",
        "hosted",
        "self-hosted",
        "open-source",
        "mcp",
        "free-tier",
        "oauth",
        "api-key",
        "openapi",
        "webhooks",
        "python",
        "javascript"
      ],
      "lastRelease": "2026-09-28",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 50.1,
        "grade": "D",
        "agentReady": false,
        "rank": 597,
        "ranked": true,
        "rankOf": 722,
        "categoryRank": 10,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 57,
          "maintenance": 78,
          "payments": 30,
          "reliability": 39,
          "schema": 63,
          "security": 62,
          "transparency": 61
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-08"
        },
        "negative": -4,
        "negativeNotes": [
          "2026-09-13. GHSA-9x4j-4rw5-3vmq, critical (CVSS 10.0), remote code execution through prototype pollution from an imported crafted document, affecting Docker images before 1.7.19 and fixed in 1.7.19. Four more advisories were published in the last 12 months, among them GHSA-7xvx-8pf2-pv5g (CVE-2026-24002, critical, 21 January 2026) on the pyodide sandbox option, fixed in 1.7.9. All five are fixed and published and none says whether hosted Grist was affected, so the deduction is reduced (https://github.com/gristlabs/grist-core/security/advisories)"
        ],
        "verdict": "OAuth tokens carry seven scopes, can be limited to chosen documents and expire after an hour, and the REST API has a public OpenAPI file with an add-or-update call. No status page, SLA terms, DPA or security.txt was found, and the docs say the hosted service has no SOC 2 or ISO 27001 audit.",
        "bestFor": "Teams that want a relational spreadsheet with Python formulas and per-document OAuth grants for an agent, or that need to self-host.",
        "strengths": [
          "OAuth 2.0 with PKCE and seven scopes, with `doc:read`, `doc:write` and `doc.schema:write` granted separately and the grant limited to chosen sites, workspaces or documents",
          "Access tokens last 1 hour, refresh tokens 60 days, and a user can revoke one app's grant from the Authorised apps page",
          "Public OpenAPI 3.0.0 file with 101 paths and 120 operations, including a read-only SQL endpoint and `PUT` on `/records` to add or update by key columns",
          "Limits are published with numbers per plan, with 10 concurrent requests per document and a 1 MB request body on every plan",
          "The core is Apache-2.0 and four releases were tagged between 29 July and 28 September 2026"
        ],
        "weaknesses": [
          "No status page was found. status.getgrist.com redirects to a signup form, and the site footer and help centre link to none",
          "An API key carries its owner's full account access, and each account has one key, so it can't be limited to a document or revoked per integration",
          "The data security page says hosted Grist has no SOC 2, ISO 27001, HIPAA or GDPR certification, and no DPA, sub-processor list or security.txt was found",
          "The MCP server and OAuth server are in the proprietary full edition, so the Apache-2.0 community edition has neither and the tool definitions aren't public",
          "Five security advisories were published in the last 12 months, two rated critical, the latest on 13 September 2026 with CVSS 10.0",
          "The Free plan allows 3,000 API calls a month across a site, with REST and MCP calls sharing the pool"
        ],
        "agentNotes": [
          "Connect through OAuth, not an API key. Ask for `doc:read` alone for reading, and have the user pick Selected resources on the consent screen",
          "Keep `doc.schema:write` off unless needed. The docs say formula editing lets its holder read any data in the document whatever the access rules",
          "Send requests for one document one at a time. The eleventh concurrent request gets 429, and no Retry-After header is documented",
          "Use `PUT /api/docs/{docId}/tables/{tableId}/records` with `require` to add or update by key, so a retried write doesn't create a duplicate row",
          "Use the `/records` endpoints, not the deprecated `/data` ones, and split large writes to stay under the 1 MB body limit"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "D",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 50.1
          }
        ],
        "editorialScores": {
          "ergonomics": 57,
          "maintenance": 78,
          "payments": 30,
          "reliability": 39,
          "schema": 63,
          "security": 62,
          "transparency": 50
        },
        "provenanceScore": 71
      },
      "connect": {
        "install": "pip install grist-api",
        "http": "curl -H \"Authorization: Bearer \u003cAPI-KEY-GOES-HERE\u003e\" https://docs.getgrist.com/api/orgs",
        "claudeCode": "claude mcp add --transport http grist https://docs.getgrist.com/api/mcp"
      },
      "letme": {
        "capability": "https://letme.dev/sheets.records",
        "tool": "https://letme.dev/grist"
      },
      "area": "business",
      "unitPrices": [
        {
          "item": "Pro (hosted)",
          "unit": "seat-month",
          "usd": 10,
          "note": "billed monthly, $8 billed yearly, 100,000 rows a document, 40,000 API calls per document per day"
        },
        {
          "item": "Business (hosted)",
          "unit": "seat-month",
          "usd": 30,
          "note": "billed monthly, $24 billed yearly, minimum 5 users, 150,000 rows a document, 60,000 API calls per document per day"
        }
      ],
      "provenance": {
        "legalEntity": "Grist Labs Inc.",
        "domain": "getgrist.com",
        "domainRegistered": "2014-05-12",
        "endpointOnVendorDomain": true,
        "terms": "https://www.getgrist.com/terms/",
        "privacy": "https://www.getgrist.com/privacy/",
        "statusPage": "",
        "changelog": "https://github.com/gristlabs/grist-core/releases",
        "securityTxt": "none",
        "checked": "2026-10-08",
        "notes": [
          "The terms page is an End-User Licence Agreement between the user and Grist Labs Inc., covering its products, software, services and websites, governed by New York State law, with legal notices to 93 4th Ave, #1127, New York, NY 10003. It carries no date.",
          "The privacy policy has an effective date of 1 April 2019 and covers the websites, products and services. It names no retention periods.",
          "The REST API and MCP server answer at docs.getgrist.com and \u003cteam\u003e.getgrist.com, and OAuth at login.getgrist.com, all getgrist.com subdomains.",
          "No status page was found. status.getgrist.com redirects to a signup form because every subdomain is treated as a team site.",
          "www.getgrist.com/.well-known/security.txt and docs.getgrist.com/.well-known/security.txt return 404. SECURITY.md in the repository gives security@getgrist.com.",
          "RDAP for getgrist.com gives a registration date of 2014-05-12."
        ],
        "score": 71
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/grist.json",
      "live": {
        "slug": "grist",
        "probe": {
          "target": "https://docs.getgrist.com/api",
          "method": "get",
          "lastAt": "2026-10-08T21:12:11.613117891Z",
          "lastOk": true,
          "lastStatus": 404,
          "lastMs": 251,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 256,
          "p95ms24h": 311,
          "samples24h": 21,
          "samples30d": 21,
          "days": [
            {
              "date": "2026-10-08",
              "probes": 21,
              "ok": 21
            }
          ]
        },
        "updatedAt": "2026-10-08T21:12:11.613117891Z"
      }
    },
    "answer": "Teable scores 61 (C) on agent readiness against Grist's 50.1 (D), and leads in 4 of 7 scored categories.",
    "b": {
      "slug": "teable",
      "name": "Teable",
      "vendor": "Teable AI, Inc.",
      "vendorUrl": "https://teable.ai",
      "kind": "http-api",
      "category": "spreadsheets",
      "summary": "Teable is an open-source table product on PostgreSQL with records, views, formulas and automations, sold as a hosted cloud and as software to self-host. Agents reach it through a REST API with scoped tokens or OAuth, and an official CLI.",
      "url": "https://www.anchorterminal.com/tools/teable",
      "markdownUrl": "https://www.anchorterminal.com/tools/teable.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/teable.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/teable.json",
      "repo": "https://github.com/teableio/teable",
      "license": "AGPL-3.0 with additional brand terms for the backend and web app, MIT for the packages directory. Enterprise functions and the `@teable/cli` package (ISC on npm) are built in a private repository",
      "transports": [
        "http"
      ],
      "remoteUrl": "https://app.teable.ai/api",
      "packages": [
        {
          "registry": "npm",
          "name": "@teable/openapi"
        },
        {
          "registry": "npm",
          "name": "@teable/cli"
        }
      ],
      "auth": "mixed",
      "authNotes": "Self-serve, with no app review found. A signed-in user creates a personal access token in settings, choosing an expiry that can't be changed later, the scopes, and the spaces and projects it can reach. The token is shown once. OAuth 2.0 apps are also created in settings and support the authorisation code grant with a client secret, PKCE for public clients and the device authorisation grant. Access tokens last 10 minutes and refresh tokens 30 days with rotation. Scopes take the form `resource|action`, such as `record|read` or `table|create`. Users and app owners can revoke access.",
      "pricing": "freemium",
      "pricingNotes": "Free cloud plan with 1,000 rows and 1 GB of attachments per space, so an agent can start without a contract. Pro is $13 and Business $20 a seat a month billed yearly, and the page shows $24 and $36 beside them, which we read as the monthly-billed prices. API calls aren't priced and the Web API is on every plan at 10 requests a second. There's no separate sandbox. The self-hosted community edition is free under AGPL-3.0 (checked 2026-10-08).",
      "priceSummary": "$13 / seat-mo",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the API docs, the OpenAPI file or the pricing page (checked 2026-10-08).",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": 21869,
        "npmWeekly": 179,
        "pypiWeekly": null,
        "asOf": "2026-10-08"
      },
      "docsUrl": "https://help.teable.ai/en/api-doc/overview",
      "llmsTxt": "https://help.teable.ai/llms.txt",
      "openapi": "https://help.teable.ai/swagger.json",
      "capabilities": [
        "sheets.read",
        "sheets.write",
        "sheets.records",
        "sheets.tables",
        "sheets.formulas"
      ],
      "tags": [
        "official",
        "hosted",
        "self-hosted",
        "open-source",
        "free-tier",
        "oauth",
        "pat",
        "openapi",
        "llms-txt",
        "cli",
        "agent-skill",
        "status-page",
        "iso27001"
      ],
      "lastRelease": "2026-10-06",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 61,
        "grade": "C",
        "agentReady": false,
        "rank": 379,
        "ranked": true,
        "rankOf": 722,
        "categoryRank": 8,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 65,
          "maintenance": 76,
          "payments": 30,
          "reliability": 72,
          "schema": 75,
          "security": 62,
          "transparency": 64
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-08"
        },
        "negative": -3,
        "negativeNotes": [
          "2 September 2026. Record lists moved to cursor pagination and stopped returning totals by default, and the changelog entry for that day tells API clients to request totals or use the count endpoint. No earlier notice was found (-3). https://help.teable.ai/en/changelog"
        ],
        "verdict": "Personal access tokens and OAuth tokens carry per-action scopes, and tokens can be limited to chosen spaces and projects. The public OpenAPI file covers 841 operations. Error responses beyond 200 and 201 are missing from that file, no idempotency keys were found, and the cloud allows 10 requests a second on every plan.",
        "bestFor": "Teams that want Airtable-style typed tables on PostgreSQL that they can also self-host, with an agent reading and writing records through tokens limited by scope and project, or through the vendor's CLI and skill.",
        "strengths": [
          "OAuth 2.0 with client secret, PKCE and device flows, 10-minute access tokens, rotating refresh tokens and scopes per action such as `record|read`",
          "Personal access tokens take an expiry, a set of scopes and a list of spaces and projects they can reach, and are shown once",
          "Public OpenAPI 3.0 file at help.teable.ai/swagger.json with 712 paths and 841 operations, each description naming the token scopes it needs",
          "List records takes `projection`, `take`, `skip`, `cursor`, `filter`, `search`, `orderBy` and `viewId`, so responses can be sized",
          "The help centre serves every page as Markdown, with an llms.txt index and an llms-full.txt file"
        ],
        "weaknesses": [
          "The OpenAPI file documents only 200 and 201 responses for nearly every operation, and the error page lists HTTP statuses without a table of error codes",
          "No idempotency key or upsert call was found for record writes, and Retry-After is documented only for the notifications endpoint",
          "Teable Cloud allows 10 API requests a second on every plan, Free to Business, with no higher tier published",
          "Audit logs are documented for self-hosted Business plans and above, and no SLA, DPA or sub-processor list was found",
          "`@teable/openapi`, the JavaScript client the docs use in examples, was last published on 15 September 2025"
        ],
        "agentNotes": [
          "Send `Authorization: Bearer \u003ctoken\u003e` to `https://app.teable.ai/api`. A 403 with code `restricted_resource` usually means a missing scope or a project outside the token's list",
          "Page records with `take` of 100 at most. Personal keys created on Teable Cloud since 10 September 2026 are capped at 100 a request",
          "Ask for totals from `/api/table/{tableId}/aggregation/row-count`. Record lists stopped returning them by default on 2 September 2026",
          "Keep to 10 requests a second, back off on 429, and check before retrying a failed write because no idempotency key exists",
          "Pass `fieldKeyType=id` so renamed fields don't break writes, and leave `typecast` off unless values need converting"
        ],
        "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
          }
        ],
        "editorialScores": {
          "ergonomics": 65,
          "maintenance": 76,
          "payments": 30,
          "reliability": 72,
          "schema": 75,
          "security": 62,
          "transparency": 58
        },
        "provenanceScore": 70
      },
      "connect": {
        "install": "npx skills add https://github.com/teableio/agent-skills",
        "http": "curl -H 'Authorization: Bearer __token__' \\\n  'https://app.teable.ai/api/table/__tableId__/record'"
      },
      "letme": {
        "capability": "https://letme.dev/sheets.read",
        "tool": "https://letme.dev/teable"
      },
      "area": "business",
      "unitPrices": [
        {
          "item": "Pro (cloud)",
          "unit": "seat-month",
          "usd": 13,
          "note": "billed yearly, 250,000 rows and 10 GB per space, 2,000 AI credits a seat"
        },
        {
          "item": "Business (cloud)",
          "unit": "seat-month",
          "usd": 20,
          "note": "billed yearly, 1,000,000 rows and 100 GB per space, SSO and authority matrix"
        },
        {
          "item": "Automation add-on, 10,000 runs",
          "unit": "month",
          "usd": 10,
          "note": "per space, billed yearly, $12 billed monthly, Pro plan or above"
        }
      ],
      "provenance": {
        "legalEntity": "Teable AI, Inc.",
        "domain": "teable.ai",
        "domainRegistered": "2025-03-25",
        "endpointOnVendorDomain": true,
        "terms": "https://teable.ai/terms-of-service",
        "privacy": "https://teable.ai/privacy",
        "statusPage": "https://status.teable.ai",
        "changelog": "https://help.teable.ai/en/changelog",
        "securityTxt": "none",
        "checked": "2026-10-08",
        "notes": [
          "The terms of service, last revised 2026-05-25, name Teable AI, Inc. with an address at 1111B S Governors Ave STE 48501, Dover, DE 19904. The repository's LICENSE names Teable, Inc.",
          "The terms define their subject as the website at teable.ai. They are the only terms found, and they cover accounts, user content, AI usage and termination, so they are recorded as the governing document. No separate service agreement, API terms or DPA was found.",
          "The privacy policy, last updated 1 October 2026, covers the websites, applications and related services, and has a section on self-hosted deployments.",
          "The API answers at app.teable.ai, a subdomain of the vendor's domain.",
          "teable.ai/.well-known/security.txt returns 404. SECURITY.md in the repository asks for reports through GitHub's private vulnerability reporting.",
          "RDAP for teable.ai gives a registration date of 2025-03-25."
        ],
        "score": 70
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/teable.json",
      "live": {
        "slug": "teable",
        "probe": {
          "target": "https://app.teable.ai/api",
          "method": "get",
          "lastAt": "2026-10-08T21:12:23.217434074Z",
          "lastOk": true,
          "lastStatus": 404,
          "lastMs": 545,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 551,
          "p95ms24h": 1529,
          "samples24h": 21,
          "samples30d": 21,
          "days": [
            {
              "date": "2026-10-08",
              "probes": 21,
              "ok": 21
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.teable.ai",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-10-08T19:39:15.867543558Z"
        },
        "updatedAt": "2026-10-08T21:12:23.217434074Z"
      }
    },
    "facts": [
      {
        "a": "HTTP API",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "Grist Labs Inc.",
        "b": "Teable AI, Inc.",
        "name": "Vendor"
      },
      {
        "a": "https://docs.getgrist.com/api",
        "b": "https://app.teable.ai/api",
        "name": "Hosted endpoint"
      },
      {
        "a": "HTTP, Streamable HTTP",
        "b": "HTTP",
        "name": "Transports"
      },
      {
        "a": "OAuth or key",
        "b": "OAuth or key",
        "name": "Auth"
      },
      {
        "a": "Freemium",
        "b": "Freemium",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "Apache-2.0 for the community edition in gristlabs/grist-core. The full edition, which adds the MCP server, the OAuth server and audit log streaming, is proprietary and needs an activation key after a 30-day trial. Docs are CC BY-SA 4.0",
        "b": "AGPL-3.0 with additional brand terms for the backend and web app, MIT for the packages directory. Enterprise functions and the `@teable/cli` package (ISC on npm) are built in a private repository",
        "name": "Licence"
      },
      {
        "a": "34",
        "b": "none",
        "name": "Tools exposed"
      },
      {
        "a": "yes",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "no",
        "b": "yes",
        "name": "llms.txt"
      },
      {
        "a": "2026-09-28",
        "b": "2026-10-06",
        "name": "Last release"
      },
      {
        "a": "no date given",
        "b": "2026-05-25",
        "name": "Terms last updated"
      },
      {
        "a": "2019-04-01",
        "b": "2026-10-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": "not found in the text",
        "b": "yes",
        "name": "Terms restrict automated access"
      },
      {
        "a": "not found in the text",
        "b": "yes",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "not found in the text",
        "b": "yes",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "12k stars, 341 npm/wk, 240 PyPI/wk",
        "b": "22k stars, 179 npm/wk",
        "name": "Popularity"
      }
    ],
    "faq": [
      {
        "answer": "Teable scores 61 (C) on agent readiness against Grist's 50.1 (D), and leads in 4 of 7 scored categories.",
        "question": "Which is better for AI agents, Grist or Teable?"
      },
      {
        "answer": "Both take an API key or an OAuth sign-in.",
        "question": "Do Grist and Teable need an API key?"
      },
      {
        "answer": "Yes. Grist has a hosted endpoint at https://docs.getgrist.com/api and Teable at https://app.teable.ai/api.",
        "question": "Can an agent call Grist and Teable without installing anything?"
      },
      {
        "answer": "Yes. Grist is open source (Apache-2.0 for the community edition in gristlabs/grist-core. The full edition, which adds the MCP server, the OAuth server and audit log streaming, is proprietary and needs an activation key after a 30-day trial. Docs are CC BY-SA 4.0). Teable is open source (AGPL-3.0 with additional brand terms for the backend and web app, MIT for the packages directory. Enterprise functions and the `@teable/cli` package (ISC on npm) are built in a private repository).",
        "question": "Are Grist and Teable open source?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": null,
        "also": null,
        "goodFor": "Teams that want a relational spreadsheet with Python formulas and per-document OAuth grants for an agent, or that need to self-host.",
        "slug": "grist",
        "watchFor": "No status page was found. status.getgrist.com redirects to a signup form, and the site footer and help centre link to none"
      },
      {
        "aheadOn": [
          "Reliability, 72 against 39",
          "Schema \u0026 documentation, 75 against 63",
          "Agent ergonomics, 65 against 57"
        ],
        "also": null,
        "goodFor": "Teams that want Airtable-style typed tables on PostgreSQL that they can also self-host, with an agent reading and writing records through tokens limited by scope and project, or through the vendor's CLI and skill.",
        "slug": "teable",
        "watchFor": "The OpenAPI file documents only 200 and 201 responses for nearly every operation, and the error page lists HTTP statuses without a table of error codes"
      }
    ],
    "job": {
      "capability": "sheets.records",
      "name": "Sheets records"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/coda-vs-grist.json",
        "title": "Coda (Superhuman Docs) vs Grist",
        "url": "https://www.anchorterminal.com/compare/coda-vs-grist"
      },
      {
        "json": "https://www.anchorterminal.com/compare/coda-vs-teable.json",
        "title": "Coda (Superhuman Docs) vs Teable",
        "url": "https://www.anchorterminal.com/compare/coda-vs-teable"
      },
      {
        "json": "https://www.anchorterminal.com/compare/google-sheets-api-vs-grist.json",
        "title": "Google Sheets API vs Grist",
        "url": "https://www.anchorterminal.com/compare/google-sheets-api-vs-grist"
      },
      {
        "json": "https://www.anchorterminal.com/compare/google-sheets-api-vs-teable.json",
        "title": "Google Sheets API vs Teable",
        "url": "https://www.anchorterminal.com/compare/google-sheets-api-vs-teable"
      },
      {
        "json": "https://www.anchorterminal.com/compare/grist-vs-microsoft-excel-graph.json",
        "title": "Grist vs Microsoft Excel (Microsoft Graph workbook API)",
        "url": "https://www.anchorterminal.com/compare/grist-vs-microsoft-excel-graph"
      },
      {
        "json": "https://www.anchorterminal.com/compare/microsoft-excel-graph-vs-teable.json",
        "title": "Microsoft Excel (Microsoft Graph workbook API) vs Teable",
        "url": "https://www.anchorterminal.com/compare/microsoft-excel-graph-vs-teable"
      },
      {
        "json": "https://www.anchorterminal.com/compare/smartsheet-vs-teable.json",
        "title": "Smartsheet API + MCP vs Teable",
        "url": "https://www.anchorterminal.com/compare/smartsheet-vs-teable"
      },
      {
        "json": "https://www.anchorterminal.com/compare/airtable-vs-grist.json",
        "title": "Airtable vs Grist",
        "url": "https://www.anchorterminal.com/compare/airtable-vs-grist"
      },
      {
        "json": "https://www.anchorterminal.com/compare/airtable-vs-teable.json",
        "title": "Airtable vs Teable",
        "url": "https://www.anchorterminal.com/compare/airtable-vs-teable"
      },
      {
        "json": "https://www.anchorterminal.com/compare/baserow-vs-grist.json",
        "title": "Baserow vs Grist",
        "url": "https://www.anchorterminal.com/compare/baserow-vs-grist"
      },
      {
        "json": "https://www.anchorterminal.com/compare/baserow-vs-teable.json",
        "title": "Baserow vs Teable",
        "url": "https://www.anchorterminal.com/compare/baserow-vs-teable"
      },
      {
        "json": "https://www.anchorterminal.com/compare/grist-vs-nocodb.json",
        "title": "Grist vs NocoDB",
        "url": "https://www.anchorterminal.com/compare/grist-vs-nocodb"
      },
      {
        "json": "https://www.anchorterminal.com/compare/grist-vs-seatable.json",
        "title": "Grist vs SeaTable",
        "url": "https://www.anchorterminal.com/compare/grist-vs-seatable"
      },
      {
        "json": "https://www.anchorterminal.com/compare/grist-vs-smartsheet.json",
        "title": "Grist vs Smartsheet API + MCP",
        "url": "https://www.anchorterminal.com/compare/grist-vs-smartsheet"
      },
      {
        "json": "https://www.anchorterminal.com/compare/nocodb-vs-teable.json",
        "title": "NocoDB vs Teable",
        "url": "https://www.anchorterminal.com/compare/nocodb-vs-teable"
      },
      {
        "json": "https://www.anchorterminal.com/compare/seatable-vs-teable.json",
        "title": "SeaTable vs Teable",
        "url": "https://www.anchorterminal.com/compare/seatable-vs-teable"
      }
    ],
    "scores": [
      {
        "by": 33,
        "edge": "teable",
        "grist": 39,
        "key": "reliability",
        "name": "Reliability",
        "teable": 72,
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 12,
        "edge": "teable",
        "grist": 63,
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "teable": 75,
        "weight": 13
      },
      {
        "by": 8,
        "edge": "teable",
        "grist": 57,
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "teable": 65,
        "weight": 13
      },
      {
        "by": 0,
        "edge": "",
        "grist": 62,
        "key": "security",
        "name": "Security \u0026 auth",
        "teable": 62,
        "weight": 14
      },
      {
        "by": 0,
        "edge": "",
        "grist": 30,
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "teable": 30,
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 2,
        "edge": "grist",
        "grist": 78,
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "teable": 76,
        "weight": 7
      },
      {
        "by": 3,
        "edge": "teable",
        "grist": 61,
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "teable": 64,
        "weight": 7
      }
    ],
    "summary": "Teable scores 61 (C) on agent readiness against Grist's 50.1 (D), and leads in 4 of 7 scored categories. Both do sheets records.",
    "verdicts": {
      "grist": "OAuth tokens carry seven scopes, can be limited to chosen documents and expire after an hour, and the REST API has a public OpenAPI file with an add-or-update call. No status page, SLA terms, DPA or security.txt was found, and the docs say the hosted service has no SOC 2 or ISO 27001 audit.",
      "teable": "Personal access tokens and OAuth tokens carry per-action scopes, and tokens can be limited to chosen spaces and projects. The public OpenAPI file covers 841 operations. Error responses beyond 200 and 201 are missing from that file, no idempotency keys were found, and the cloud allows 10 requests a second on every plan."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/grist-vs-teable",
    "json": "https://www.anchorterminal.com/compare/grist-vs-teable.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/grist-vs-teable.md",
    "slim": "https://www.anchorterminal.com/compare/grist-vs-teable.min.md"
  },
  "markdown": "Teable scores 61 (C) on agent readiness against Grist's 50.1 (D), and leads in 4 of 7 scored categories. Both do sheets records.\n\n- Grist: grade D, 50.1/100, rank #597 of 722. Markdown https://www.anchorterminal.com/tools/grist.md · JSON https://www.anchorterminal.com/api/v1/tools/grist.json\n- Teable: grade C, 61/100, rank #379 of 722. Markdown https://www.anchorterminal.com/tools/teable.md · JSON https://www.anchorterminal.com/api/v1/tools/teable.json\n\n## Which one, for what\n\n### Grist (D)\n\nGood for: Teams that want a relational spreadsheet with Python formulas and per-document OAuth grants for an agent, or that need to self-host.\n\nWatch for: No status page was found. status.getgrist.com redirects to a signup form, and the site footer and help centre link to none\n\n### Teable (C)\n\nGood for: Teams that want Airtable-style typed tables on PostgreSQL that they can also self-host, with an agent reading and writing records through tokens limited by scope and project, or through the vendor's CLI and skill.\n\nAhead on:\n- Reliability, 72 against 39\n- Schema \u0026 documentation, 75 against 63\n- Agent ergonomics, 65 against 57\n\nWatch for: The OpenAPI file documents only 200 and 201 responses for nearly every operation, and the error page lists HTTP statuses without a table of error codes\n\n\n## Score by category\n\n| Category | Weight | Grist | Teable | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 39 | 72 | Teable +33 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 63 | 75 | Teable +12 |\n| Agent ergonomics | 13% (16.2 this run) | 57 | 65 | Teable +8 |\n| Security \u0026 auth | 14% (17.5 this run) | 62 | 62 | even |\n| Payments \u0026 pricing | 10% (12.5 this run) | 30 | 30 | even |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 78 | 76 | Grist +2 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 61 | 64 | Teable +3 |\n| Negative events | ≤15 | -4 | -3 | |\n| **Total** | | **50.1 · D** | **61 · C** | |\n\n## Facts side by side\n\n| Fact | Grist | Teable |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | Grist Labs Inc. | Teable AI, Inc. |\n| Hosted endpoint | `https://docs.getgrist.com/api` | `https://app.teable.ai/api` |\n| Transports | HTTP, Streamable HTTP | HTTP |\n| Auth | OAuth or key | OAuth or key |\n| Pricing | Freemium | Freemium |\n| x402 | no | no |\n| Licence | Apache-2.0 for the community edition in gristlabs/grist-core. The full edition, which adds the MCP server, the OAuth server and audit log streaming, is proprietary and needs an activation key after a 30-day trial. Docs are CC BY-SA 4.0 | AGPL-3.0 with additional brand terms for the backend and web app, MIT for the packages directory. Enterprise functions and the `@teable/cli` package (ISC on npm) are built in a private repository |\n| Tools exposed | 34 | none |\n| Read-only variant documented | yes | no |\n| llms.txt | no | yes |\n| Last release | 2026-09-28 | 2026-10-06 |\n| Terms last updated | no date given | 2026-05-25 |\n| Privacy policy last updated | 2019-04-01 | 2026-10-01 |\n| Customer content may train models | not found in the text | not found in the text |\n| Terms restrict automated access | not found in the text | yes |\n| Terms restrict benchmarking | not found in the text | yes |\n| Terms or service can change without notice | yes | yes |\n| Arbitration or class-action waiver | not found in the text | yes |\n| Popularity | 12k stars, 341 npm/wk, 240 PyPI/wk | 22k stars, 179 npm/wk |\n\n## Verdicts\n\n**Grist.** OAuth tokens carry seven scopes, can be limited to chosen documents and expire after an hour, and the REST API has a public OpenAPI file with an add-or-update call. No status page, SLA terms, DPA or security.txt was found, and the docs say the hosted service has no SOC 2 or ISO 27001 audit.\n\n**Teable.** Personal access tokens and OAuth tokens carry per-action scopes, and tokens can be limited to chosen spaces and projects. The public OpenAPI file covers 841 operations. Error responses beyond 200 and 201 are missing from that file, no idempotency keys were found, and the cloud allows 10 requests a second on every plan.\n\n## Before you call either\n\n### Grist\n\n1. Connect through OAuth, not an API key. Ask for `doc:read` alone for reading, and have the user pick Selected resources on the consent screen\n2. Keep `doc.schema:write` off unless needed. The docs say formula editing lets its holder read any data in the document whatever the access rules\n3. Send requests for one document one at a time. The eleventh concurrent request gets 429, and no Retry-After header is documented\n4. Use `PUT /api/docs/{docId}/tables/{tableId}/records` with `require` to add or update by key, so a retried write doesn't create a duplicate row\n5. Use the `/records` endpoints, not the deprecated `/data` ones, and split large writes to stay under the 1 MB body limit\n\n### Teable\n\n1. Send `Authorization: Bearer \u003ctoken\u003e` to `https://app.teable.ai/api`. A 403 with code `restricted_resource` usually means a missing scope or a project outside the token's list\n2. Page records with `take` of 100 at most. Personal keys created on Teable Cloud since 10 September 2026 are capped at 100 a request\n3. Ask for totals from `/api/table/{tableId}/aggregation/row-count`. Record lists stopped returning them by default on 2 September 2026\n4. Keep to 10 requests a second, back off on 429, and check before retrying a failed write because no idempotency key exists\n5. Pass `fieldKeyType=id` so renamed fields don't break writes, and leave `typecast` off unless values need converting\n\n## Questions\n\n### Which is better for AI agents, Grist or Teable?\n\nTeable scores 61 (C) on agent readiness against Grist's 50.1 (D), and leads in 4 of 7 scored categories.\n\n### Do Grist and Teable need an API key?\n\nBoth take an API key or an OAuth sign-in.\n\n### Can an agent call Grist and Teable without installing anything?\n\nYes. Grist has a hosted endpoint at https://docs.getgrist.com/api and Teable at https://app.teable.ai/api.\n\n### Are Grist and Teable open source?\n\nYes. Grist is open source (Apache-2.0 for the community edition in gristlabs/grist-core. The full edition, which adds the MCP server, the OAuth server and audit log streaming, is proprietary and needs an activation key after a 30-day trial. Docs are CC BY-SA 4.0). Teable is open source (AGPL-3.0 with additional brand terms for the backend and web app, MIT for the packages directory. Enterprise functions and the `@teable/cli` package (ISC on npm) are built in a private repository).\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/grist-vs-teable.json, and with the fewest tokens: https://www.anchorterminal.com/compare/grist-vs-teable.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"grist\", \"b\": \"teable\"}`. From a terminal: `anchor compare grist teable`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/grist.json and https://www.anchorterminal.com/api/v1/tools/teable.json\n\n## Other comparisons with Grist or Teable\n\n- [Coda (Superhuman Docs) vs Grist](https://www.anchorterminal.com/compare/coda-vs-grist.md)\n- [Coda (Superhuman Docs) vs Teable](https://www.anchorterminal.com/compare/coda-vs-teable.md)\n- [Google Sheets API vs Grist](https://www.anchorterminal.com/compare/google-sheets-api-vs-grist.md)\n- [Google Sheets API vs Teable](https://www.anchorterminal.com/compare/google-sheets-api-vs-teable.md)\n- [Grist vs Microsoft Excel (Microsoft Graph workbook API)](https://www.anchorterminal.com/compare/grist-vs-microsoft-excel-graph.md)\n- [Microsoft Excel (Microsoft Graph workbook API) vs Teable](https://www.anchorterminal.com/compare/microsoft-excel-graph-vs-teable.md)\n- [Smartsheet API + MCP vs Teable](https://www.anchorterminal.com/compare/smartsheet-vs-teable.md)\n- [Airtable vs Grist](https://www.anchorterminal.com/compare/airtable-vs-grist.md)\n- [Airtable vs Teable](https://www.anchorterminal.com/compare/airtable-vs-teable.md)\n- [Baserow vs Grist](https://www.anchorterminal.com/compare/baserow-vs-grist.md)\n- [Baserow vs Teable](https://www.anchorterminal.com/compare/baserow-vs-teable.md)\n- [Grist vs NocoDB](https://www.anchorterminal.com/compare/grist-vs-nocodb.md)\n- [Grist vs SeaTable](https://www.anchorterminal.com/compare/grist-vs-seatable.md)\n- [Grist vs Smartsheet API + MCP](https://www.anchorterminal.com/compare/grist-vs-smartsheet.md)\n- [NocoDB vs Teable](https://www.anchorterminal.com/compare/nocodb-vs-teable.md)\n- [SeaTable vs Teable](https://www.anchorterminal.com/compare/seatable-vs-teable.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": "Grist vs Teable",
        "url": ""
      }
    ],
    "description": "Teable scores 61 (C) on agent readiness against Grist's 50.1 (D), and leads in 4 of 7 scored categories. Both do sheets records. Category scores, facts, verdicts and agent notes side by side.",
    "facts": [
      "Grist D 50.1",
      "Teable C 61",
      "scores"
    ],
    "h1": "Grist vs Teable",
    "image": "https://www.anchorterminal.com/assets/og/compare-grist-vs-teable.png",
    "path": "/compare/grist-vs-teable",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Grist vs Teable for AI agents, D 50.1 vs C 61 | Anchor Terminal",
    "toc": null,
    "updated": "2026-10-08",
    "url": "https://www.anchorterminal.com/compare/grist-vs-teable"
  },
  "tokens": {
    "markdown": 2350,
    "slim": 730
  },
  "version": 1
}
