{
  "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": "SeaTable scores 66.3 (B) on agent readiness against Grist's 50.1 (D), and leads in 4 of 7 scored categories.",
    "b": {
      "slug": "seatable",
      "name": "SeaTable",
      "vendor": "SeaTable GmbH",
      "vendorUrl": "https://seatable.com",
      "kind": "http-api",
      "category": "spreadsheets",
      "summary": "SeaTable is a database of typed rows in tables and bases, sold as a cloud service hosted in Germany and as server software. Agents reach it through a REST API with per-base tokens and an official MCP server.",
      "url": "https://www.anchorterminal.com/tools/seatable",
      "markdownUrl": "https://www.anchorterminal.com/tools/seatable.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/seatable.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/seatable.json",
      "repo": "https://github.com/seatable/seatable-mcp",
      "license": "Proprietary cloud service under the Terms of Service for SeaTable Cloud. The MCP server is MIT. SeaTable Server Enterprise Edition is licensed under an EULA",
      "transports": [
        "http",
        "stdio"
      ],
      "remoteUrl": "https://cloud.seatable.io",
      "packages": [
        {
          "registry": "npm",
          "name": "@seatable/mcp-seatable"
        },
        {
          "registry": "pypi",
          "name": "seatable-api"
        },
        {
          "registry": "npm",
          "name": "seatable-api"
        }
      ],
      "auth": "api-key",
      "authNotes": "Self-serve. A signed-in user creates an API token for one base, read-only or read-write, which never expires and can be deleted. Base calls need a Base-Token, a JWT valid for 3 days, obtained from the API token at `/api/v2.1/dtable/app-access-token/`. Account calls (bases, groups, webhooks, sharing) need an Account-Token obtained with the username and password, which never expires and carries the user's full access. The hosted MCP server takes the API token as a Bearer header, or runs an OAuth flow with PKCE and dynamic client registration in which the user enters the API token and the server issues a one-hour access token. The OAuth flow has no scopes.",
      "pricing": "freemium",
      "pricingNotes": "Free cloud plan for up to 25 users with 10,000 rows, 2 GB of files and 3,000 API calls a month for the team, with no card at signup, so an agent can start without a contract. Plus is €7 a user a month billed yearly (€9 monthly) with 10,000 API calls per user, and Enterprise €14 (€18 monthly) with 50,000. Dedicated is sold through sales from 100 users with unlimited calls. Prices are in euros before VAT and aren't converted here. The MCP server is free to use and there is no separate sandbox (checked 2026-10-08).",
      "priceSummary": "Freemium",
      "where": "both",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the API reference, the OpenAPI files, the MCP server's README or the pricing page (checked 2026-10-08).",
        "endpoints": []
      },
      "toolCount": 21,
      "popularity": {
        "githubStars": null,
        "npmWeekly": 103,
        "pypiWeekly": 1657,
        "asOf": "2026-10-08"
      },
      "docsUrl": "https://api.seatable.com/",
      "llmsTxt": "https://api.seatable.com/llms.txt",
      "openapi": "https://github.com/seatable/openapi/blob/v6.2/base_operations.yaml",
      "registryName": "io.github.seatable/seatable",
      "capabilities": [
        "sheets.records",
        "sheets.read",
        "sheets.write",
        "sheets.tables",
        "sheets.formulas"
      ],
      "tags": [
        "official",
        "hosted",
        "self-hosted",
        "mcp",
        "free-tier",
        "api-key",
        "openapi",
        "llms-txt",
        "webhooks",
        "status-page",
        "python",
        "javascript",
        "php",
        "eu-hosted"
      ],
      "lastRelease": "2026-09-04",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 66.3,
        "grade": "B",
        "agentReady": false,
        "rank": 241,
        "ranked": true,
        "rankOf": 722,
        "categoryRank": 5,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 74,
          "maintenance": 76,
          "payments": 30,
          "reliability": 69,
          "schema": 81,
          "security": 59,
          "transparency": 75
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-08"
        },
        "negative": 0,
        "verdict": "API tokens are limited to one base and to read-only or read-write, and the official MCP server marks every tool as read-only or destructive. The Free plan allows 3,000 API calls a month in total, and base calls are capped at 200 a minute. The status page showed the base API degraded for 0.77 per cent of 30 days.",
        "bestFor": "Teams that want typed tables hosted in Germany or on their own server, with an agent reading and writing rows through a per-base token or the official MCP server.",
        "strengths": [
          "API tokens are limited to one base, set to read-only or read-write, named per app and deletable, and the token list shows each token's last access time",
          "Official MCP server, MIT-licensed, hosted at `https://mcp.seatable.com/mcp` and listed in the official MCP registry as `io.github.seatable/seatable` at version 1.6.4",
          "All 21 hosted MCP tools carry readOnlyHint, destructiveHint and idempotentHint annotations, and the tool set leaves out table and column changes",
          "Public OpenAPI 3.0 files with 404 operations, plus `llms.txt`, `llms-full.txt` and Markdown copies of the reference pages",
          "Sub-processor list, data processing agreement and security measures are public, and the security page places all user data in Frankfurt and Munich"
        ],
        "weaknesses": [
          "Monthly API call quotas by plan, 3,000 for a whole Free team, 10,000 per user on Plus and 50,000 per user on Enterprise",
          "A 429 response has no body and no Retry-After header is documented, and the REST API has no idempotency keys",
          "Tokens can't be limited to a table, and the MCP tool `query_sql` accepts UPDATE and DELETE statements with no confirmation step",
          "The security page says SeaTable holds no certification, and its bug bounty, expected in 2025, is still described as under construction",
          "No SLA text is published. The pricing page names optional SLAs for Dedicated only, and the terms exclude liability for uninterrupted availability"
        ],
        "agentNotes": [
          "Create an API token for the one base with read-only permission unless writes are needed, then exchange it at `/api/v2.1/dtable/app-access-token/` for a Base-Token",
          "Renew the Base-Token before it expires after 3 days, and send it as `Authorization: Bearer` to `/api-gateway/api/v2/dtables/{base_uuid}/`",
          "Read `x-ratelimit-remaining` and `x-ratelimit-reset` on every base call. SeaTable Cloud allows 200 base calls a minute and answers 429 with no body",
          "Batch writes to save the monthly quota. One call appends or updates up to 1,000 rows over REST and 100 over MCP",
          "Over MCP, prefer `update_rows` and `delete_rows` to `query_sql`, which can run UPDATE and DELETE, and call `get_schema` before writing"
        ],
        "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": 74,
          "maintenance": 76,
          "payments": 30,
          "reliability": 69,
          "schema": 81,
          "security": 59,
          "transparency": 65
        },
        "provenanceScore": 85
      },
      "connect": {
        "install": "npx -y @seatable/mcp-seatable",
        "http": "curl -H \"Authorization: Bearer YOUR_API_TOKEN\" \"https://cloud.seatable.io/api/v2.1/dtable/app-access-token/\"",
        "config": {
          "mcpServers": {
            "seatable": {
              "headers": {
                "Authorization": "Bearer your-api-token"
              },
              "type": "streamable-http",
              "url": "https://mcp.seatable.com/mcp"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/sheets.records",
        "tool": "https://letme.dev/seatable"
      },
      "area": "business",
      "provenance": {
        "legalEntity": "SeaTable GmbH",
        "domain": "seatable.com",
        "domainRegistered": "2010-03-12",
        "endpointOnVendorDomain": true,
        "terms": "https://seatable.com/terms-of-service/",
        "privacy": "https://seatable.com/data-privacy/",
        "statusPage": "https://status.seatable.com",
        "changelog": "https://api.seatable.com/reference/changelog",
        "securityTxt": "none",
        "checked": "2026-10-08",
        "notes": [
          "The imprint names SeaTable GmbH, 117er Ehrenhof 5, 55118 Mainz, Germany, District Court Mainz, commercial register number HRB 49723.",
          "The Terms of Service for SeaTable Cloud are version 1.0.1, published on 14 April 2022. The German original is binding and the English page is a convenience translation.",
          "The privacy policy is version 1.3.0, published on 5 February 2026, and covers registration and the cloud service as well as the website. A data processing agreement (version 1.1.6, 16 October 2024) and a sub-processor list (version 1.1.5, 16 October 2025) are separate public pages.",
          "The MCP server answers at mcp.seatable.com and the API reference at api.seatable.com. The REST API answers at cloud.seatable.io, a second domain the vendor's site links for login. We didn't check the registration record of seatable.io.",
          "seatable.com/.well-known/security.txt and cloud.seatable.io/.well-known/security.txt return 404. The security page gives security@seatable.com for vulnerability reports.",
          "RDAP for seatable.com gives a registration date of 2010-03-12."
        ],
        "score": 85
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/seatable.json",
      "live": {
        "slug": "seatable",
        "probe": {
          "target": "https://cloud.seatable.io",
          "method": "get",
          "lastAt": "2026-10-08T21:12:21.042309916Z",
          "lastOk": true,
          "lastStatus": 200,
          "lastMs": 375,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 375,
          "p95ms24h": 411,
          "samples24h": 21,
          "samples30d": 21,
          "days": [
            {
              "date": "2026-10-08",
              "probes": 21,
              "ok": 21
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.seatable.com",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-10-08T19:39:09.649561498Z"
        },
        "updatedAt": "2026-10-08T21:12:21.042309916Z"
      }
    },
    "facts": [
      {
        "a": "HTTP API",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "Grist Labs Inc.",
        "b": "SeaTable GmbH",
        "name": "Vendor"
      },
      {
        "a": "https://docs.getgrist.com/api",
        "b": "https://cloud.seatable.io",
        "name": "Hosted endpoint"
      },
      {
        "a": "HTTP, Streamable HTTP",
        "b": "HTTP, stdio",
        "name": "Transports"
      },
      {
        "a": "OAuth or key",
        "b": "API 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": "Proprietary cloud service under the Terms of Service for SeaTable Cloud. The MCP server is MIT. SeaTable Server Enterprise Edition is licensed under an EULA",
        "name": "Licence"
      },
      {
        "a": "34",
        "b": "21",
        "name": "Tools exposed"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "Read-only variant documented"
      },
      {
        "a": "no",
        "b": "yes",
        "name": "llms.txt"
      },
      {
        "a": "not listed",
        "b": "io.github.seatable/seatable",
        "name": "MCP registry"
      },
      {
        "a": "2026-09-28",
        "b": "2026-09-04",
        "name": "Last release"
      },
      {
        "a": "no date given",
        "b": "no date given",
        "name": "Terms last updated"
      },
      {
        "a": "2019-04-01",
        "b": "no date given",
        "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": "not found in the text",
        "name": "Terms restrict automated access"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "yes",
        "b": "yes",
        "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": "12k stars, 341 npm/wk, 240 PyPI/wk",
        "b": "103 npm/wk, 1.7k PyPI/wk",
        "name": "Popularity"
      }
    ],
    "faq": [
      {
        "answer": "SeaTable scores 66.3 (B) 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 SeaTable?"
      },
      {
        "answer": "Grist takes an API key or an OAuth sign-in. SeaTable needs an API key.",
        "question": "Do Grist and SeaTable need an API key?"
      },
      {
        "answer": "Yes. Grist has a hosted endpoint at https://docs.getgrist.com/api and SeaTable at https://cloud.seatable.io.",
        "question": "Can an agent call Grist and SeaTable without installing anything?"
      },
      {
        "answer": "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). No open-source release is listed for SeaTable.",
        "question": "Are Grist and SeaTable open source?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": null,
        "also": [
          "Open source"
        ],
        "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, 69 against 39",
          "Schema \u0026 documentation, 81 against 63",
          "Agent ergonomics, 74 against 57",
          "Transparency \u0026 trust, 75 against 61"
        ],
        "also": [
          "Runs on your own machine",
          "No incidents deducted, where Grist loses 4 points for them"
        ],
        "goodFor": "Teams that want typed tables hosted in Germany or on their own server, with an agent reading and writing rows through a per-base token or the official MCP server.",
        "slug": "seatable",
        "watchFor": "Monthly API call quotas by plan, 3,000 for a whole Free team, 10,000 per user on Plus and 50,000 per user on Enterprise"
      }
    ],
    "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-seatable.json",
        "title": "Coda (Superhuman Docs) vs SeaTable",
        "url": "https://www.anchorterminal.com/compare/coda-vs-seatable"
      },
      {
        "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-seatable.json",
        "title": "Google Sheets API vs SeaTable",
        "url": "https://www.anchorterminal.com/compare/google-sheets-api-vs-seatable"
      },
      {
        "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-seatable.json",
        "title": "Microsoft Excel (Microsoft Graph workbook API) vs SeaTable",
        "url": "https://www.anchorterminal.com/compare/microsoft-excel-graph-vs-seatable"
      },
      {
        "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-seatable.json",
        "title": "Airtable vs SeaTable",
        "url": "https://www.anchorterminal.com/compare/airtable-vs-seatable"
      },
      {
        "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-seatable.json",
        "title": "Baserow vs SeaTable",
        "url": "https://www.anchorterminal.com/compare/baserow-vs-seatable"
      },
      {
        "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-smartsheet.json",
        "title": "Grist vs Smartsheet API + MCP",
        "url": "https://www.anchorterminal.com/compare/grist-vs-smartsheet"
      },
      {
        "json": "https://www.anchorterminal.com/compare/grist-vs-teable.json",
        "title": "Grist vs Teable",
        "url": "https://www.anchorterminal.com/compare/grist-vs-teable"
      },
      {
        "json": "https://www.anchorterminal.com/compare/nocodb-vs-seatable.json",
        "title": "NocoDB vs SeaTable",
        "url": "https://www.anchorterminal.com/compare/nocodb-vs-seatable"
      },
      {
        "json": "https://www.anchorterminal.com/compare/seatable-vs-smartsheet.json",
        "title": "SeaTable vs Smartsheet API + MCP",
        "url": "https://www.anchorterminal.com/compare/seatable-vs-smartsheet"
      },
      {
        "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": 30,
        "edge": "seatable",
        "grist": 39,
        "key": "reliability",
        "name": "Reliability",
        "seatable": 69,
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 18,
        "edge": "seatable",
        "grist": 63,
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "seatable": 81,
        "weight": 13
      },
      {
        "by": 17,
        "edge": "seatable",
        "grist": 57,
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "seatable": 74,
        "weight": 13
      },
      {
        "by": 3,
        "edge": "grist",
        "grist": 62,
        "key": "security",
        "name": "Security \u0026 auth",
        "seatable": 59,
        "weight": 14
      },
      {
        "by": 0,
        "edge": "",
        "grist": 30,
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "seatable": 30,
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 2,
        "edge": "grist",
        "grist": 78,
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "seatable": 76,
        "weight": 7
      },
      {
        "by": 14,
        "edge": "seatable",
        "grist": 61,
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "seatable": 75,
        "weight": 7
      }
    ],
    "summary": "SeaTable scores 66.3 (B) 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.",
      "seatable": "API tokens are limited to one base and to read-only or read-write, and the official MCP server marks every tool as read-only or destructive. The Free plan allows 3,000 API calls a month in total, and base calls are capped at 200 a minute. The status page showed the base API degraded for 0.77 per cent of 30 days."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/grist-vs-seatable",
    "json": "https://www.anchorterminal.com/compare/grist-vs-seatable.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/grist-vs-seatable.md",
    "slim": "https://www.anchorterminal.com/compare/grist-vs-seatable.min.md"
  },
  "markdown": "SeaTable scores 66.3 (B) 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- SeaTable: grade B, 66.3/100, rank #241 of 722. Markdown https://www.anchorterminal.com/tools/seatable.md · JSON https://www.anchorterminal.com/api/v1/tools/seatable.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\nAlso in its favour:\n- Open source\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### SeaTable (B)\n\nGood for: Teams that want typed tables hosted in Germany or on their own server, with an agent reading and writing rows through a per-base token or the official MCP server.\n\nAhead on:\n- Reliability, 69 against 39\n- Schema \u0026 documentation, 81 against 63\n- Agent ergonomics, 74 against 57\n- Transparency \u0026 trust, 75 against 61\n\nAlso in its favour:\n- Runs on your own machine\n- No incidents deducted, where Grist loses 4 points for them\n\nWatch for: Monthly API call quotas by plan, 3,000 for a whole Free team, 10,000 per user on Plus and 50,000 per user on Enterprise\n\n\n## Score by category\n\n| Category | Weight | Grist | SeaTable | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 39 | 69 | SeaTable +30 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 63 | 81 | SeaTable +18 |\n| Agent ergonomics | 13% (16.2 this run) | 57 | 74 | SeaTable +17 |\n| Security \u0026 auth | 14% (17.5 this run) | 62 | 59 | Grist +3 |\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 | 75 | SeaTable +14 |\n| Negative events | ≤15 | -4 | 0 | |\n| **Total** | | **50.1 · D** | **66.3 · B** | |\n\n## Facts side by side\n\n| Fact | Grist | SeaTable |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | Grist Labs Inc. | SeaTable GmbH |\n| Hosted endpoint | `https://docs.getgrist.com/api` | `https://cloud.seatable.io` |\n| Transports | HTTP, Streamable HTTP | HTTP, stdio |\n| Auth | OAuth or key | API 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 | Proprietary cloud service under the Terms of Service for SeaTable Cloud. The MCP server is MIT. SeaTable Server Enterprise Edition is licensed under an EULA |\n| Tools exposed | 34 | 21 |\n| Read-only variant documented | yes | yes |\n| llms.txt | no | yes |\n| MCP registry | not listed | `io.github.seatable/seatable` |\n| Last release | 2026-09-28 | 2026-09-04 |\n| Terms last updated | no date given | no date given |\n| Privacy policy last updated | 2019-04-01 | no date given |\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 | not found in the text |\n| Terms restrict benchmarking | not found in the text | not found in the text |\n| Terms or service can change without notice | yes | yes |\n| Arbitration or class-action waiver | not found in the text | not found in the text |\n| Popularity | 12k stars, 341 npm/wk, 240 PyPI/wk | 103 npm/wk, 1.7k PyPI/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**SeaTable.** API tokens are limited to one base and to read-only or read-write, and the official MCP server marks every tool as read-only or destructive. The Free plan allows 3,000 API calls a month in total, and base calls are capped at 200 a minute. The status page showed the base API degraded for 0.77 per cent of 30 days.\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### SeaTable\n\n1. Create an API token for the one base with read-only permission unless writes are needed, then exchange it at `/api/v2.1/dtable/app-access-token/` for a Base-Token\n2. Renew the Base-Token before it expires after 3 days, and send it as `Authorization: Bearer` to `/api-gateway/api/v2/dtables/{base_uuid}/`\n3. Read `x-ratelimit-remaining` and `x-ratelimit-reset` on every base call. SeaTable Cloud allows 200 base calls a minute and answers 429 with no body\n4. Batch writes to save the monthly quota. One call appends or updates up to 1,000 rows over REST and 100 over MCP\n5. Over MCP, prefer `update_rows` and `delete_rows` to `query_sql`, which can run UPDATE and DELETE, and call `get_schema` before writing\n\n## Questions\n\n### Which is better for AI agents, Grist or SeaTable?\n\nSeaTable scores 66.3 (B) on agent readiness against Grist's 50.1 (D), and leads in 4 of 7 scored categories.\n\n### Do Grist and SeaTable need an API key?\n\nGrist takes an API key or an OAuth sign-in. SeaTable needs an API key.\n\n### Can an agent call Grist and SeaTable without installing anything?\n\nYes. Grist has a hosted endpoint at https://docs.getgrist.com/api and SeaTable at https://cloud.seatable.io.\n\n### Are Grist and SeaTable open source?\n\nGrist 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). No open-source release is listed for SeaTable.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/grist-vs-seatable.json, and with the fewest tokens: https://www.anchorterminal.com/compare/grist-vs-seatable.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"grist\", \"b\": \"seatable\"}`. From a terminal: `anchor compare grist seatable`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/grist.json and https://www.anchorterminal.com/api/v1/tools/seatable.json\n\n## Other comparisons with Grist or SeaTable\n\n- [Coda (Superhuman Docs) vs Grist](https://www.anchorterminal.com/compare/coda-vs-grist.md)\n- [Coda (Superhuman Docs) vs SeaTable](https://www.anchorterminal.com/compare/coda-vs-seatable.md)\n- [Google Sheets API vs Grist](https://www.anchorterminal.com/compare/google-sheets-api-vs-grist.md)\n- [Google Sheets API vs SeaTable](https://www.anchorterminal.com/compare/google-sheets-api-vs-seatable.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 SeaTable](https://www.anchorterminal.com/compare/microsoft-excel-graph-vs-seatable.md)\n- [Airtable vs Grist](https://www.anchorterminal.com/compare/airtable-vs-grist.md)\n- [Airtable vs SeaTable](https://www.anchorterminal.com/compare/airtable-vs-seatable.md)\n- [Baserow vs Grist](https://www.anchorterminal.com/compare/baserow-vs-grist.md)\n- [Baserow vs SeaTable](https://www.anchorterminal.com/compare/baserow-vs-seatable.md)\n- [Grist vs NocoDB](https://www.anchorterminal.com/compare/grist-vs-nocodb.md)\n- [Grist vs Smartsheet API + MCP](https://www.anchorterminal.com/compare/grist-vs-smartsheet.md)\n- [Grist vs Teable](https://www.anchorterminal.com/compare/grist-vs-teable.md)\n- [NocoDB vs SeaTable](https://www.anchorterminal.com/compare/nocodb-vs-seatable.md)\n- [SeaTable vs Smartsheet API + MCP](https://www.anchorterminal.com/compare/seatable-vs-smartsheet.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 SeaTable",
        "url": ""
      }
    ],
    "description": "SeaTable scores 66.3 (B) 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",
      "SeaTable B 66.3",
      "scores"
    ],
    "h1": "Grist vs SeaTable",
    "image": "https://www.anchorterminal.com/assets/og/compare-grist-vs-seatable.png",
    "path": "/compare/grist-vs-seatable",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Grist vs SeaTable for AI agents, D 50.1 vs B 66.3 | Anchor Terminal",
    "toc": null,
    "updated": "2026-10-08",
    "url": "https://www.anchorterminal.com/compare/grist-vs-seatable"
  },
  "tokens": {
    "markdown": 2400,
    "slim": 680
  },
  "version": 1
}
