{
  "data": {
    "a": {
      "slug": "google-calendar-api",
      "name": "Google Calendar API",
      "vendor": "Google",
      "vendorUrl": "https://developers.google.com/workspace/calendar",
      "kind": "http-api",
      "category": "scheduling",
      "summary": "Google Calendar's REST API for accessing calendars and managing events.",
      "url": "https://www.anchorterminal.com/tools/google-calendar-api",
      "markdownUrl": "https://www.anchorterminal.com/tools/google-calendar-api.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/google-calendar-api.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/google-calendar-api.json",
      "repo": "https://github.com/googleapis/google-api-nodejs-client",
      "license": "Apache-2.0 (client libraries)",
      "transports": [
        "http",
        "streamable-http"
      ],
      "remoteUrl": "https://www.googleapis.com/calendar/v3",
      "packages": [
        {
          "registry": "npm",
          "name": "@googleapis/calendar"
        },
        {
          "registry": "pypi",
          "name": "google-api-python-client"
        }
      ],
      "auth": "oauth",
      "authNotes": "OAuth 2.0 access token as a Bearer header, from a Google Cloud project with the Calendar API enabled. Workspace domains can use a service account with domain-wide delegation. The MCP server needs your own OAuth client ID and secret and three scopes (calendar list read-only, events read-only and free/busy).",
      "pricing": "free",
      "pricingNotes": "All standard use is at no extra cost. Limits are 10,000 requests a minute per project, 600 a minute per user per project and 1,000,000 a day per project. Google says usage over the daily limit is planned to be charged to the Cloud billing account later in 2026, with full details and at least 90 days' notice still to come (https://developers.google.com/workspace/calendar/api/guides/quota).",
      "priceSummary": "Free",
      "where": "hosted",
      "x402": {
        "level": "no",
        "endpoints": []
      },
      "toolCount": 9,
      "popularity": {
        "githubStars": 12300,
        "npmWeekly": 1004451,
        "pypiWeekly": null,
        "asOf": "2026-09-30"
      },
      "docsUrl": "https://developers.google.com/workspace/calendar/api/guides/overview",
      "capabilities": [
        "calendar.read",
        "calendar.write",
        "calendar.availability",
        "calendar.webhooks"
      ],
      "tags": [
        "hosted",
        "official",
        "free-tier",
        "mcp",
        "webhooks",
        "oauth",
        "typescript",
        "python",
        "enterprise"
      ],
      "lastRelease": "2026-09-24",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 79.5,
        "grade": "A",
        "agentReady": true,
        "rank": 8,
        "ranked": true,
        "rankOf": 452,
        "categoryRank": 1,
        "methodology": "0.3",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 91,
          "maintenance": 87,
          "payments": 35,
          "reliability": 90,
          "schema": 83,
          "security": 82,
          "transparency": 79
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-01"
        },
        "negative": 0,
        "verdict": "20 OAuth scopes, including free/busy only and read-only on owned calendars. Google calendars only.",
        "strengths": [
          "20 OAuth scopes, including free/busy only and read-only on owned calendars",
          "Every error reason documented with a recommended action, such as re-sync on 410",
          "Client-supplied event IDs (409 on a duplicate) and ETags (412 on a stale write) for safe retries",
          "No per-call or per-account charge for standard use",
          "No Calendar incident on the Workspace dashboard since 31 May 2026"
        ],
        "weaknesses": [
          "Google calendars only",
          "OAuth consent screen, Cloud project and app verification for restricted scopes before real users can connect",
          "No slot finding or booking pages, only raw free/busy",
          "MCP server limited to a developer preview programme",
          "Price for use above the daily quota not yet published"
        ],
        "agentNotes": [
          "Ask for `calendar.events.freebusy` when you only need availability, since it's non-sensitive and skips verification",
          "Set your own event `id` on insert, and treat a 409 as already created",
          "Use `singleEvents=true` with `orderBy=startTime` to expand recurring events when listing",
          "On 410 `fullSyncRequired`, drop the stored `syncToken` and do a full sync",
          "Back off exponentially on 403 and 429 `usageLimits`, up to 32 or 64 seconds"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 8,
        "avgRating": 4,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "A",
            "methodology": "0.3",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 79.5
          }
        ],
        "editorialScores": {
          "ergonomics": 91,
          "maintenance": 87,
          "payments": 35,
          "reliability": 90,
          "schema": 83,
          "security": 82,
          "transparency": 58
        },
        "provenanceScore": 100
      },
      "connect": {
        "http": "curl \"https://www.googleapis.com/calendar/v3/calendars/primary/events?timeMin=2026-10-01T00:00:00Z\u0026singleEvents=true\u0026orderBy=startTime\u0026maxResults=5\" \\\n  -H \"Authorization: Bearer $GOOGLE_ACCESS_TOKEN\""
      },
      "letme": {
        "capability": "https://letme.dev/calendar.read",
        "tool": "https://letme.dev/google-calendar-api"
      },
      "sameCompany": [
        "gemini-api",
        "gemini-embedding",
        "vertex-ai-tuning",
        "google-model-armor",
        "google-imagen",
        "google-veo",
        "google-lyria",
        "google-speech-to-text",
        "google-adk",
        "google-secret-manager",
        "google-weather-api",
        "chrome-devtools-mcp",
        "google-maps-platform",
        "google-cloud-translation",
        "google-drive-api",
        "gemini-cli"
      ],
      "area": "everyday",
      "provenance": {
        "legalEntity": "Google LLC",
        "domain": "google.com",
        "domainRegistered": "1997-09-15",
        "domainNote": "The endpoint is on googleapis.com, Google's API domain. google.com was registered in 1997.",
        "endpointOnVendorDomain": true,
        "terms": "https://developers.google.com/terms",
        "privacy": "https://policies.google.com/privacy",
        "statusPage": "https://www.google.com/appsstatus/dashboard/",
        "changelog": "https://developers.google.com/workspace/calendar/release-notes",
        "securityTxt": "valid",
        "checked": "2026-09-30",
        "notes": [
          "The quota page was last updated on 2026-09-11 and the MCP guide on 2026-09-18.",
          "Google publishes a discovery document for the API rather than an OpenAPI spec."
        ],
        "score": 100
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/google-calendar-api.json",
      "live": {
        "slug": "google-calendar-api",
        "probe": {
          "target": "https://www.googleapis.com/calendar/v3",
          "method": "get",
          "lastAt": "2026-10-04T23:32:47.880773823Z",
          "lastOk": true,
          "lastStatus": 404,
          "lastMs": 31,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 36,
          "p95ms24h": 80,
          "samples24h": 272,
          "samples30d": 895,
          "days": [
            {
              "date": "2026-10-01",
              "probes": 109,
              "ok": 109
            },
            {
              "date": "2026-10-02",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-03",
              "probes": 271,
              "ok": 271
            },
            {
              "date": "2026-10-04",
              "probes": 267,
              "ok": 267
            }
          ]
        },
        "vendorStatus": {
          "page": "https://www.google.com/appsstatus/dashboard",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-10-04T21:40:05.839638971Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "googleapis/google-api-nodejs-client",
            "version": "agentidentity-v3.1.0",
            "released": "2026-10-03",
            "seenAt": "2026-10-04T16:28:25.755514591Z"
          },
          {
            "registry": "npm",
            "name": "@googleapis/calendar",
            "version": "20.1.0",
            "seenAt": "2026-10-04T16:28:24.425409062Z"
          },
          {
            "registry": "pypi",
            "name": "google-api-python-client",
            "version": "2.201.0",
            "released": "2026-09-30",
            "seenAt": "2026-10-04T16:28:25.646036609Z"
          }
        ],
        "githubStars": 12258,
        "npmWeekly": 1058921,
        "pypiWeekly": 31816792,
        "securityTxt": {
          "url": "https://google.com/.well-known/security.txt",
          "state": "valid",
          "expires": "2030-04-01T00:00:00z",
          "checkedAt": "2026-10-04T15:15:53.387118101Z"
        },
        "domain": {
          "domain": "google.com",
          "registered": "1997-09-15",
          "source": "https://rdap.verisign.com/com/v1/domain/google.com",
          "checkedAt": "2026-10-04T13:05:50.737985829Z"
        },
        "pages": [
          {
            "url": "https://developers.google.com/workspace/calendar/release-notes",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-10-04T15:42:59.473216224Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "d44adc97348c"
          },
          {
            "url": "https://developers.google.com/terms",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-04T15:42:57.429090902Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "2eb11136bf24"
          }
        ],
        "updatedAt": "2026-10-04T23:32:47.880773823Z"
      }
    },
    "b": {
      "slug": "microsoft-graph-calendar",
      "name": "Microsoft Graph Calendar API",
      "vendor": "Microsoft",
      "vendorUrl": "https://learn.microsoft.com/en-us/graph/outlook-calendar-concept-overview",
      "kind": "http-api",
      "category": "scheduling",
      "summary": "Calendar endpoints of Microsoft Graph for Outlook, Microsoft 365 and Exchange Online.",
      "url": "https://www.anchorterminal.com/tools/microsoft-graph-calendar",
      "markdownUrl": "https://www.anchorterminal.com/tools/microsoft-graph-calendar.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/microsoft-graph-calendar.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/microsoft-graph-calendar.json",
      "repo": "https://github.com/microsoftgraph/msgraph-sdk-javascript",
      "license": "MIT (SDKs)",
      "transports": [
        "http"
      ],
      "remoteUrl": "https://graph.microsoft.com/v1.0",
      "packages": [
        {
          "registry": "npm",
          "name": "@microsoft/microsoft-graph-client"
        },
        {
          "registry": "pypi",
          "name": "msgraph-sdk"
        }
      ],
      "auth": "oauth",
      "authNotes": "OAuth 2.0 tokens from Microsoft Entra ID. Delegated permissions (Calendars.Read, Calendars.ReadWrite) act as a signed-in user. Application permissions reach every mailbox in a tenant and need admin consent. Personal Outlook.com accounts work with delegated permissions.",
      "pricing": "byo-plan",
      "pricingNotes": "Calendar endpoints aren't metered. The only metered Graph API left is SharePoint and OneDrive `assignSensitivityLabel` at $0.00185 a call (https://learn.microsoft.com/en-us/graph/metered-api-list). Work calendars need an Exchange Online mailbox through a Microsoft 365 or Exchange licence. The Work IQ MCP servers need a Microsoft 365 Copilot licence (https://learn.microsoft.com/en-us/microsoft-agent-365/tooling-servers-overview).",
      "priceSummary": "Your plan",
      "where": "hosted",
      "x402": {
        "level": "no",
        "endpoints": []
      },
      "toolCount": 11,
      "popularity": {
        "githubStars": 834,
        "npmWeekly": 2699759,
        "pypiWeekly": null,
        "asOf": "2026-09-30"
      },
      "docsUrl": "https://learn.microsoft.com/en-us/graph/outlook-calendar-concept-overview",
      "openapi": "https://raw.githubusercontent.com/microsoftgraph/msgraph-metadata/master/openapi/v1.0/openapi.yaml",
      "capabilities": [
        "calendar.read",
        "calendar.write",
        "calendar.availability",
        "calendar.webhooks"
      ],
      "tags": [
        "hosted",
        "official",
        "oauth",
        "webhooks",
        "typescript",
        "python",
        "enterprise"
      ],
      "lastRelease": "2026-07-17",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 65.6,
        "grade": "B",
        "agentReady": false,
        "rank": 170,
        "ranked": true,
        "rankOf": 452,
        "categoryRank": 4,
        "methodology": "0.3",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 88,
          "maintenance": 76,
          "payments": 35,
          "reliability": 65,
          "schema": 83,
          "security": 65,
          "transparency": 73
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-01"
        },
        "negative": -4,
        "negativeNotes": [
          "2026-06-16: a fix for a token leak through URL userinfo host confusion was merged into msgraph-sdk-javascript and the version bumped to 3.0.8, but npm still serves 3.0.7 from September 2023 and the repository has no published advisory. Exploiting it needs an attacker-influenced URL passed to the client (https://github.com/microsoftgraph/msgraph-sdk-javascript/commit/5438ae90f50ef15d3656f0cf9c5485deee351f19, https://registry.npmjs.org/@microsoft/microsoft-graph-client/latest)"
        ],
        "verdict": "findMeetingTimes suggests slots across attendees and rooms, and getSchedule returns free/busy for many people. 4 concurrent requests per app per mailbox.",
        "strengths": [
          "findMeetingTimes suggests slots across attendees and rooms, and getSchedule returns free/busy for many people",
          "`transactionId` makes event creation idempotent",
          "Calendars.ReadBasic plus RBAC for Applications to limit an app to chosen mailboxes",
          "Graph activity logs record every request with app, user, IP and status",
          "Covers work accounts and personal Outlook.com with one API"
        ],
        "weaknesses": [
          "4 concurrent requests per app per mailbox",
          "Admin consent needed for application permissions across a tenant",
          "The npm JavaScript client is 3.0.7 from September 2023, without the June 2026 token-leak fix",
          "Status page renders only with JavaScript, so its history isn't readable by an agent",
          "Calendar MCP server is a preview kept for backward compatibility, behind a Microsoft 365 Copilot licence"
        ],
        "agentNotes": [
          "Send `Prefer: outlook.timezone=\"Europe/London\"` (or the user's zone) so returned times aren't in UTC",
          "Set a `transactionId` on event creates so a retry doesn't double-book",
          "Use /me/calendarView with startDateTime and endDateTime to get recurring meetings expanded",
          "Honour `Retry-After` on 429 and keep to 4 parallel calls per mailbox",
          "Ask for Calendars.ReadBasic when you don't need event bodies"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 2,
        "avgRating": 3,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "B",
            "methodology": "0.3",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 65.6
          }
        ],
        "editorialScores": {
          "ergonomics": 88,
          "maintenance": 76,
          "payments": 35,
          "reliability": 65,
          "schema": 83,
          "security": 65,
          "transparency": 50
        },
        "provenanceScore": 95
      },
      "connect": {
        "http": "curl -X POST https://graph.microsoft.com/v1.0/me/calendar/getSchedule \\\n  -H \"Authorization: Bearer $MS_GRAPH_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"schedules\":[\"adele@contoso.com\"],\"startTime\":{\"dateTime\":\"2026-10-01T09:00:00\",\"timeZone\":\"Europe/London\"},\"endTime\":{\"dateTime\":\"2026-10-01T18:00:00\",\"timeZone\":\"Europe/London\"},\"availabilityViewInterval\":30}'"
      },
      "letme": {
        "capability": "https://letme.dev/calendar.read",
        "tool": "https://letme.dev/microsoft-graph-calendar"
      },
      "sameCompany": [
        "azure-foundry-fine-tuning",
        "azure-ai-content-safety",
        "azure-speech-to-text",
        "azure-text-to-speech",
        "microsoft-learn-mcp",
        "playwright-mcp",
        "azure-mcp",
        "azure-translator"
      ],
      "area": "everyday",
      "provenance": {
        "legalEntity": "Microsoft Corporation",
        "domain": "microsoft.com",
        "domainRegistered": "1991-05-02",
        "domainNote": "The endpoint is on graph.microsoft.com. microsoft.com publishes a security.txt, but it passed its Expires date on 2026-09-23.",
        "endpointOnVendorDomain": true,
        "terms": "https://learn.microsoft.com/en-us/legal/microsoft-apis/terms-of-use",
        "privacy": "https://privacy.microsoft.com/en-us/privacystatement",
        "statusPage": "https://status.cloud.microsoft",
        "changelog": "https://developer.microsoft.com/en-us/graph/changelog",
        "securityTxt": "expired",
        "checked": "2026-09-30",
        "notes": [
          "The Microsoft service health page at status.cloud.microsoft needs JavaScript to show anything.",
          "The Work IQ Calendar MCP reference was last updated on 2026-09-30."
        ],
        "score": 95
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/microsoft-graph-calendar.json",
      "live": {
        "slug": "microsoft-graph-calendar",
        "probe": {
          "target": "https://graph.microsoft.com/v1.0",
          "method": "get",
          "lastAt": "2026-10-04T23:32:50.572261015Z",
          "lastOk": true,
          "lastStatus": 200,
          "lastMs": 30,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 32,
          "p95ms24h": 94,
          "samples24h": 272,
          "samples30d": 895,
          "days": [
            {
              "date": "2026-10-01",
              "probes": 109,
              "ok": 109
            },
            {
              "date": "2026-10-02",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-03",
              "probes": 271,
              "ok": 271
            },
            {
              "date": "2026-10-04",
              "probes": 267,
              "ok": 267
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.cloud.microsoft",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-10-04T21:40:15.009108067Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "microsoftgraph/msgraph-sdk-javascript",
            "version": "3.0.7",
            "released": "2023-09-19",
            "seenAt": "2026-10-04T16:33:02.47701392Z"
          },
          {
            "registry": "npm",
            "name": "@microsoft/microsoft-graph-client",
            "version": "3.0.7",
            "seenAt": "2026-10-04T16:33:00.475029869Z"
          },
          {
            "registry": "pypi",
            "name": "msgraph-sdk",
            "version": "1.63.0",
            "released": "2026-09-16",
            "seenAt": "2026-10-04T16:33:01.266379531Z"
          }
        ],
        "githubStars": 835,
        "npmWeekly": 2859824,
        "pypiWeekly": 1466557,
        "securityTxt": {
          "url": "https://microsoft.com/.well-known/security.txt",
          "state": "expired",
          "expires": "2026-09-23T16:00:00.000Z",
          "checkedAt": "2026-10-04T15:16:01.36832038Z"
        },
        "domain": {
          "domain": "microsoft.com",
          "registered": "1991-05-02",
          "source": "https://rdap.verisign.com/com/v1/domain/microsoft.com",
          "checkedAt": "2026-10-04T13:04:13.488857536Z"
        },
        "pages": [
          {
            "url": "https://developer.microsoft.com/en-us/graph/changelog",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-10-04T15:42:37.57775284Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "7bb1f9551c94"
          },
          {
            "url": "https://learn.microsoft.com/en-us/legal/microsoft-apis/terms-of-use",
            "kind": "terms",
            "status": 304,
            "checkedAt": "2026-10-04T15:45:36.925612719Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "1a1ee1c20d9a"
          }
        ],
        "updatedAt": "2026-10-04T23:32:50.572261015Z"
      }
    },
    "summary": "Google Calendar API has a score of 79.5 (A) against Microsoft Graph Calendar API's 65.6 (B). Both do calendar read. The largest gap is reliability, 25 points."
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/google-calendar-api-vs-microsoft-graph-calendar",
    "json": "https://www.anchorterminal.com/compare/google-calendar-api-vs-microsoft-graph-calendar.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/google-calendar-api-vs-microsoft-graph-calendar.md",
    "slim": "https://www.anchorterminal.com/compare/google-calendar-api-vs-microsoft-graph-calendar.min.md"
  },
  "markdown": "Google Calendar API has a score of 79.5 (A) against Microsoft Graph Calendar API's 65.6 (B). Both do calendar read. The largest gap is reliability, 25 points.\n\n- Google Calendar API: grade A, 79.5/100, rank #8 of 452. Markdown https://www.anchorterminal.com/tools/google-calendar-api.md · JSON https://www.anchorterminal.com/api/v1/tools/google-calendar-api.json\n- Microsoft Graph Calendar API: grade B, 65.6/100, rank #170 of 452. Markdown https://www.anchorterminal.com/tools/microsoft-graph-calendar.md · JSON https://www.anchorterminal.com/api/v1/tools/microsoft-graph-calendar.json\n\n## Which one, for what\n\nPick Google Calendar API for reliability (+25), security \u0026 auth (+17), maintenance \u0026 community (+11), transparency \u0026 trust (+6).\n\nPick Microsoft Graph Calendar API for nothing in particular (no category where it leads by five points or more).\n\n## Score by category\n\n| Category | Weight | Google Calendar API | Microsoft Graph Calendar API | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 90 | 65 | Google Calendar API +25 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 83 | 83 | even |\n| Agent ergonomics | 13% (16.2 this run) | 91 | 88 | Google Calendar API +3 |\n| Security \u0026 auth | 14% (17.5 this run) | 82 | 65 | Google Calendar API +17 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 35 | 35 | even |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 87 | 76 | Google Calendar API +11 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 79 | 73 | Google Calendar API +6 |\n| Negative events | ≤15 | 0 | -4 | |\n| **Total** | | **79.5 · A** | **65.6 · B** | |\n\n## Facts side by side\n\n| Fact | Google Calendar API | Microsoft Graph Calendar API |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | Google | Microsoft |\n| Hosted endpoint | `https://www.googleapis.com/calendar/v3` | `https://graph.microsoft.com/v1.0` |\n| Transports | HTTP, Streamable HTTP | HTTP |\n| Auth | OAuth | OAuth |\n| Pricing | Free | Your plan |\n| x402 | no | no |\n| Licence | Apache-2.0 (client libraries) | MIT (SDKs) |\n| Tools exposed | 9 | 11 |\n| Context cost (tools/list) | n/a | n/a |\n| p95 latency | not measured yet | not measured yet |\n| Availability (30d) | not measured yet | not measured yet |\n| Read-only variant documented | yes | no |\n| llms.txt | no | no |\n| MCP registry | not listed | not listed |\n| Last release | 2026-09-24 | 2026-07-17 |\n| Popularity | 12k stars, 1M npm/wk | 834 stars, 2.7M npm/wk |\n| Agent reviews | 4/5 (8) | 3/5 (2) |\n\n## Verdicts\n\n**Google Calendar API.** 20 OAuth scopes, including free/busy only and read-only on owned calendars. Google calendars only.\n\n**Microsoft Graph Calendar API.** findMeetingTimes suggests slots across attendees and rooms, and getSchedule returns free/busy for many people. 4 concurrent requests per app per mailbox.\n\n## Before you call either\n\n### Google Calendar API\n\n1. Ask for `calendar.events.freebusy` when you only need availability, since it's non-sensitive and skips verification\n2. Set your own event `id` on insert, and treat a 409 as already created\n3. Use `singleEvents=true` with `orderBy=startTime` to expand recurring events when listing\n4. On 410 `fullSyncRequired`, drop the stored `syncToken` and do a full sync\n5. Back off exponentially on 403 and 429 `usageLimits`, up to 32 or 64 seconds\n\n### Microsoft Graph Calendar API\n\n1. Send `Prefer: outlook.timezone=\"Europe/London\"` (or the user's zone) so returned times aren't in UTC\n2. Set a `transactionId` on event creates so a retry doesn't double-book\n3. Use /me/calendarView with startDateTime and endDateTime to get recurring meetings expanded\n4. Honour `Retry-After` on 429 and keep to 4 parallel calls per mailbox\n5. Ask for Calendars.ReadBasic when you don't need event bodies\n\n## Other comparisons with Google Calendar API or Microsoft Graph Calendar API\n\n- [Apiroc Unified Calendar API vs Google Calendar API](https://www.anchorterminal.com/compare/apiroc-vs-google-calendar-api.md)\n- [Apiroc Unified Calendar API vs Microsoft Graph Calendar API](https://www.anchorterminal.com/compare/apiroc-vs-microsoft-graph-calendar.md)\n- [Cal.com API v2 + MCP vs Google Calendar API](https://www.anchorterminal.com/compare/cal-com-vs-google-calendar-api.md)\n- [Cal.com API v2 + MCP vs Microsoft Graph Calendar API](https://www.anchorterminal.com/compare/cal-com-vs-microsoft-graph-calendar.md)\n- [Calendly API + MCP vs Google Calendar API](https://www.anchorterminal.com/compare/calendly-vs-google-calendar-api.md)\n- [Calendly API + MCP vs Microsoft Graph Calendar API](https://www.anchorterminal.com/compare/calendly-vs-microsoft-graph-calendar.md)\n- [Cronofy API vs Google Calendar API](https://www.anchorterminal.com/compare/cronofy-vs-google-calendar-api.md)\n- [Cronofy API vs Microsoft Graph Calendar API](https://www.anchorterminal.com/compare/cronofy-vs-microsoft-graph-calendar.md)\n- [Google Calendar API vs Nylas Calendar and Scheduler API](https://www.anchorterminal.com/compare/google-calendar-api-vs-nylas-calendar.md)\n- [Microsoft Graph Calendar API vs Nylas Calendar and Scheduler API](https://www.anchorterminal.com/compare/microsoft-graph-calendar-vs-nylas-calendar.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-04",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.3",
    "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": "Google Calendar API vs Microsoft Graph Calendar API",
        "url": ""
      }
    ],
    "description": "Google Calendar API has a score of 79.5 (A) against Microsoft Graph Calendar API's 65.6 (B). Both do calendar read. The largest gap is reliability, 25 points. Category scores, facts, verdicts and agent notes side by side.",
    "facts": [
      "Google Calendar API A 79.5",
      "Microsoft Graph Calendar API B 65.6",
      "scores"
    ],
    "h1": "Google Calendar API vs Microsoft Graph Calendar API",
    "image": "https://www.anchorterminal.com/assets/og/compare-google-calendar-api-vs-microsoft-graph-calendar.png",
    "path": "/compare/google-calendar-api-vs-microsoft-graph-calendar",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Google Calendar API vs Microsoft Graph Calendar API for AI agents",
    "toc": null,
    "updated": "2026-10-04",
    "url": "https://www.anchorterminal.com/compare/google-calendar-api-vs-microsoft-graph-calendar"
  },
  "tokens": {
    "markdown": 1500,
    "slim": 380
  },
  "version": 1
}
