{
  "data": {
    "a": {
      "slug": "azure-maps",
      "name": "Azure Maps",
      "vendor": "Microsoft Azure",
      "vendorUrl": "https://azure.microsoft.com/en-us/products/azure-maps",
      "kind": "http-api",
      "category": "maps",
      "summary": "Microsoft Azure's mapping service. Its REST APIs at `atlas.microsoft.com` cover geocoding, reverse geocoding, place search, routing with traffic, map tiles, time zones and weather, with access by subscription key, SAS token or Microsoft Entra ID.",
      "url": "https://www.anchorterminal.com/tools/azure-maps",
      "markdownUrl": "https://www.anchorterminal.com/tools/azure-maps.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/azure-maps.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/azure-maps.json",
      "repo": "https://github.com/Azure/azure-rest-api-specs",
      "license": "Proprietary service under Microsoft's Product Terms. The Azure SDK client libraries are MIT",
      "transports": [
        "http"
      ],
      "remoteUrl": "https://atlas.microsoft.com",
      "packages": [
        {
          "registry": "pypi",
          "name": "azure-maps-search"
        },
        {
          "registry": "pypi",
          "name": "azure-maps-route"
        },
        {
          "registry": "npm",
          "name": "@azure-rest/maps-search"
        },
        {
          "registry": "npm",
          "name": "@azure-rest/maps-route"
        }
      ],
      "auth": "mixed",
      "authNotes": "Self-serve. A person creates an Azure subscription and an Azure Maps account in the portal, which issues a primary and a secondary subscription key. The key goes in the `subscription-key` header or as a URL parameter and reaches every REST API on the account. Microsoft Entra ID tokens (scope `https://atlas.microsoft.com/.default`, with the `x-ms-client-id` header) are authorised by Azure roles such as Azure Maps Data Reader or a custom role for one service. SAS tokens (`Authorization: jwt-sas`) last 24 hours at most and carry a rate cap and allowed regions. `disableLocalAuth` turns keys and SAS tokens off.",
      "pricing": "freemium",
      "pricingNotes": "$4.50 per 1,000 transactions on every Gen2 meter, after a free monthly amount of 5,000 transactions for Search, Geolocation, Timezone and base map tiles and 1,000 for Routing, Traffic, Weather, imagery tiles and static images (https://prices.azure.com/api/retail/prices, read 8 October 2026). Fifteen tiles count as one transaction, four route matrix cells as one, and ten autocomplete requests as one. The pricing page says discounts start at 100,000 transactions a month through sales. An Azure account needs a card for identity checks, so there is no card-free start. Gen1 pricing retired on 15 September 2026.",
      "priceSummary": "$4.50 / 1k req",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the Azure Maps docs, the OpenAPI documents or the pricing page (checked 2026-10-08).",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": null,
        "npmWeekly": 9084,
        "pypiWeekly": 24564,
        "asOf": "2026-10-08"
      },
      "docsUrl": "https://learn.microsoft.com/en-us/rest/api/maps/",
      "openapi": "https://github.com/Azure/azure-rest-api-specs/blob/main/specification/maps/data-plane/Search/stable/2026-01-01/search.json",
      "capabilities": [
        "geo.geocode",
        "geo.reverse",
        "geo.places",
        "geo.routing",
        "geo.tiles",
        "weather.current",
        "weather.forecast"
      ],
      "tags": [
        "hosted",
        "closed-source",
        "freemium",
        "free-tier",
        "card-required",
        "openapi",
        "oauth",
        "python",
        "typescript",
        "dotnet",
        "java",
        "enterprise",
        "sla",
        "eu"
      ],
      "lastRelease": "2026-09-30",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 67.9,
        "grade": "B",
        "agentReady": false,
        "rank": 196,
        "ranked": true,
        "rankOf": 722,
        "categoryRank": 5,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 73,
          "maintenance": 67,
          "payments": 20,
          "reliability": 81,
          "schema": 83,
          "security": 66,
          "transparency": 74
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-08"
        },
        "negative": 0,
        "verdict": "Azure Maps publishes OpenAPI documents for every service, per-service rate limits, a 99.9 per cent SLA and written rules on storing results, and Entra ID roles can limit a caller to one service. Place search exists only in Search 1.0, which the newer version has superseded, and the REST client libraries are all beta.",
        "bestFor": "Teams already on Azure that want geocoding and routing under Entra ID roles and one flat price.",
        "strengths": [
          "Public OpenAPI documents for Search, Route, Render, Traffic, Weather, Timezone and Geolocation in `Azure/azure-rest-api-specs`, with examples on every operation",
          "Three credential types. Entra ID with built-in and custom roles, SAS tokens with a 24-hour limit, a rate cap and allowed regions, and two rotatable keys",
          "Default rate limits published per service, 500 requests a second for search, 250 for reverse geocoding and 50 for routing",
          "The product terms state storage rules in writing. Geocodes may be kept while the Azure account is active, other results for six months at most",
          "Responses with 5xx, 401, 403, 408 and 429 are not billed, and the October 2026 SLA commits to 99.9 per cent"
        ],
        "weaknesses": [
          "Place and category search exist only in Search 1.0. Search 2026-01-01, which supersedes it, has geocoding, autocomplete, reverse geocoding and polygons",
          "Every REST client library is a beta. `azure-maps-search` on PyPI was last released on 12 December 2024",
          "The authentication guide tells callers to put the subscription key in the URL, and the key reaches every REST API on the account",
          "An Azure account needs a card and a browser signup before the free monthly transactions apply",
          "No Retry-After header or backoff guidance for 429 was found in the reviewed documentation, and no API changelog page"
        ],
        "agentNotes": [
          "Send the key in the `subscription-key` header, or use `Authorization: Bearer` with `x-ms-client-id`. The key also works as a URL parameter, which leaks into logs.",
          "Call `GET /geocode?api-version=2026-01-01` for addresses. It can return 200 with no results, so check `confidence`, `matchCodes` and the entity type before use.",
          "Use Search 1.0 (`/search/poi/json`, `/search/nearby/json`, `/search/fuzzy/json`) for places. The 2026-01-01 version has no place search.",
          "Use `eu.atlas.microsoft.com` or `us.atlas.microsoft.com` to keep request data in that geography.",
          "Don't store route or tile results beyond six months, and never for serving several users. The product terms allow keeping geocodes while the account is active."
        ],
        "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": 67.9
          }
        ],
        "editorialScores": {
          "ergonomics": 73,
          "maintenance": 67,
          "payments": 20,
          "reliability": 81,
          "schema": 83,
          "security": 66,
          "transparency": 69
        },
        "provenanceScore": 78
      },
      "connect": {
        "install": "pip install azure-maps-search   # or: npm i @azure-rest/maps-search",
        "http": "curl \"https://atlas.microsoft.com/geocode?api-version=2026-01-01\u0026query=15127%20NE%2024th%20Street%2C%20Redmond%2C%20WA\" \\\n  -H \"subscription-key: $AZURE_MAPS_KEY\""
      },
      "letme": {
        "capability": "https://letme.dev/geo.geocode",
        "tool": "https://letme.dev/azure-maps"
      },
      "sameCompany": [
        "azure-foundry-fine-tuning",
        "azure-ai-content-safety",
        "azure-speech-to-text",
        "azure-text-to-speech",
        "microsoft-agent-framework",
        "microsoft-execution-containers",
        "microsoft-entra-agent-id",
        "azure-key-vault",
        "azure-devops-mcp",
        "microsoft-learn-mcp",
        "playwright-mcp",
        "azure-mcp",
        "azure-translator",
        "microsoft-graph-calendar",
        "microsoft-teams",
        "dynamics-365-sales",
        "power-automate",
        "microsoft-advertising-api",
        "microsoft-excel-graph",
        "outlook-mail-graph"
      ],
      "area": "everyday",
      "unitPrices": [
        {
          "item": "Search (geocoding, reverse geocoding, places)",
          "unit": "1k-requests",
          "usd": 4.5,
          "note": "5,000 free a month. Ten autocomplete requests count as one"
        },
        {
          "item": "Routing",
          "unit": "1k-requests",
          "usd": 4.5,
          "note": "1,000 free a month. Four matrix cells count as one"
        },
        {
          "item": "Base map tiles",
          "unit": "1k-requests",
          "usd": 4.5,
          "note": "5,000 free a month. One transaction is 15 tiles"
        },
        {
          "item": "Traffic",
          "unit": "1k-requests",
          "usd": 4.5,
          "note": "1,000 free a month"
        },
        {
          "item": "Weather",
          "unit": "1k-requests",
          "usd": 4.5,
          "note": "1,000 free a month"
        },
        {
          "item": "Static map images",
          "unit": "1k-requests",
          "usd": 4.5,
          "note": "1,000 free a month"
        }
      ],
      "provenance": {
        "legalEntity": "Microsoft Corporation",
        "domain": "microsoft.com",
        "domainRegistered": "1991-05-02",
        "domainNote": "The API answers at atlas.microsoft.com, with eu.atlas.microsoft.com and us.atlas.microsoft.com for a chosen geography. Docs are on learn.microsoft.com.",
        "endpointOnVendorDomain": true,
        "terms": "https://www.microsoft.com/licensing/terms/productoffering/MicrosoftAzure/MCA",
        "privacy": "https://www.microsoft.com/en-us/privacy/privacystatement",
        "statusPage": "https://azure.status.microsoft/en-us/status",
        "changelog": "",
        "securityTxt": "expired",
        "checked": "2026-10-08",
        "notes": [
          "The Product Terms page for Microsoft Azure carries the Azure Maps service-specific terms (navigation, database, caching and storage, attribution, print and broadcast rules) and points to the Data Protection Addendum and the SLA. Our reader saw no effective date on the page.",
          "The privacy statement (last updated September 2026) names Microsoft Corporation, One Microsoft Way, Redmond, Washington 98052, and Microsoft Ireland Operations Limited in Dublin. It lists Microsoft Azure among the enterprise online services and says the customer's agreement controls where the two conflict.",
          "No changelog for the REST APIs was found in the Azure Maps docs. The release notes there cover the Web SDK map control, drawing tools and spatial module only, and the docs link to the general Azure updates page.",
          "https://www.microsoft.com/.well-known/security.txt shows Expires 2026-09-23T16:00:00.000Z. It points to the MSRC researcher portal, the bounty policy and the coordinated disclosure policy.",
          "RDAP for microsoft.com gives a registration date of 1991-05-02.",
          "The Azure status page is shared by all Azure services and its history lists only broad incidents."
        ],
        "score": 78
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/azure-maps.json",
      "live": {
        "slug": "azure-maps",
        "probe": {
          "target": "https://atlas.microsoft.com",
          "method": "get",
          "lastAt": "2026-10-08T21:12:04.826843978Z",
          "lastOk": true,
          "lastStatus": 200,
          "lastMs": 552,
          "authRequired": false,
          "uptime24h": 85.71,
          "uptime30d": 85.71,
          "p50ms24h": 391,
          "p95ms24h": 825,
          "samples24h": 21,
          "samples30d": 21,
          "days": [
            {
              "date": "2026-10-08",
              "probes": 21,
              "ok": 18
            }
          ]
        },
        "updatedAt": "2026-10-08T21:12:04.826843978Z"
      }
    },
    "answer": "OpenCage Geocoding API scores 69.2 (B) on agent readiness against Azure Maps's 67.9 (B), and leads in 4 of 7 scored categories. Azure Maps leads on schema \u0026 documentation and security \u0026 auth.",
    "b": {
      "slug": "opencage",
      "name": "OpenCage Geocoding API",
      "vendor": "OpenCage",
      "vendorUrl": "https://opencagedata.com",
      "kind": "http-api",
      "category": "maps",
      "summary": "Forward and reverse geocoding on one endpoint, built on OpenStreetMap and other open data, with optional annotations and JSON, GeoJSON, XML or Google-compatible output.",
      "url": "https://www.anchorterminal.com/tools/opencage",
      "markdownUrl": "https://www.anchorterminal.com/tools/opencage.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/opencage.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/opencage.json",
      "repo": "https://github.com/OpenCageData/opencage-geocoding-mcp",
      "license": "MIT (MCP server)",
      "transports": [
        "http",
        "stdio"
      ],
      "remoteUrl": "https://api.opencagedata.com/geocode/v1/json",
      "packages": [
        {
          "registry": "npm",
          "name": "@opencage/mcp-opencage-server"
        },
        {
          "registry": "npm",
          "name": "opencage-api-client"
        },
        {
          "registry": "pypi",
          "name": "opencage"
        }
      ],
      "auth": "api-key",
      "authNotes": "A 32-character key passed as the key query parameter. No headers are needed. The MCP server reads OPENCAGE_API_KEY.",
      "pricing": "paid",
      "pricingNotes": "Free trial of 2,500 requests a day at 1 a second, for testing only, no card. Monthly subscriptions by daily volume. X-Small $50 (10,000 a day, 15 a second), Small $125 (30,000 a day), Medium $500 (125,000 a day), Large $1,000 (300,000 a day), Enterprise from $2,000. Also priced in GBP (£40 to £800) and eleven other currencies. One-time plans are usable for up to a year. Subscriptions have no hard limits (https://opencagedata.com/pricing, https://opencagedata.com/api.md).",
      "priceSummary": "$50 / mo",
      "where": "both",
      "x402": {
        "level": "no",
        "endpoints": []
      },
      "toolCount": 3,
      "popularity": {
        "githubStars": 19,
        "npmWeekly": 5501,
        "pypiWeekly": 137628,
        "asOf": "2026-09-30"
      },
      "docsUrl": "https://opencagedata.com/api",
      "llmsTxt": "https://opencagedata.com/llms.txt",
      "registryName": "io.github.OpenCageData/opencage-geocoding-mcp",
      "capabilities": [
        "geo.geocode",
        "geo.reverse"
      ],
      "tags": [
        "hosted",
        "llms-txt",
        "mcp",
        "official",
        "python",
        "typescript",
        "open-data",
        "no-card",
        "eu"
      ],
      "lastRelease": "2026-06-25",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 69.2,
        "grade": "B",
        "agentReady": false,
        "rank": 164,
        "ranked": true,
        "rankOf": 722,
        "categoryRank": 3,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 86,
          "maintenance": 66,
          "payments": 35,
          "reliability": 85,
          "schema": 77,
          "security": 47,
          "transparency": 84
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "high",
          "date": "2026-10-01"
        },
        "negative": 0,
        "verdict": "Permanent storage of results on every plan, including after you cancel. Geocoding only, no place search or routing.",
        "bestFor": "Bulk or repeated geocoding where results go into a database, and for EU data residency.",
        "strengths": [
          "Permanent storage of results on every plan, including after you cancel",
          "Separate 402 (quota spent) and 429 (too fast) responses",
          "llms.txt with 70 or more Markdown pages, and agent skills on GitHub",
          "EU hosting, logs deleted after six months and a no_record option",
          "Subscriptions don't cut off or bill overage when you go over"
        ],
        "weaknesses": [
          "Geocoding only, no place search or routing",
          "The key can only be sent as a query parameter",
          "The free trial isn't for production use",
          "MCP server is stdio-only, has no tool annotations, and npm still serves 1.0.3 from September 2025",
          "No SOC 2 or ISO 27001 of its own"
        ],
        "agentNotes": [
          "Add no_annotations=1 and limit=1 when you only need coordinates",
          "Stop on 402, which means the day's quota is gone, and back off on 429",
          "Add no_record=1 when the query holds personal data",
          "Redact the key parameter before logging request URLs",
          "Credit OpenStreetMap wherever you show results"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 2,
        "avgRating": 3.5,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "high",
            "grade": "B",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 69.2
          }
        ],
        "editorialScores": {
          "ergonomics": 86,
          "maintenance": 66,
          "payments": 35,
          "reliability": 85,
          "schema": 77,
          "security": 47,
          "transparency": 84
        },
        "provenanceScore": 84
      },
      "connect": {
        "http": "curl \"https://api.opencagedata.com/geocode/v1/json?q=10%20Downing%20Street%2C%20London\u0026limit=1\u0026no_annotations=1\u0026key=$OPENCAGE_API_KEY\"",
        "claudeCode": "claude mcp add opencage -e OPENCAGE_API_KEY=$OPENCAGE_API_KEY -- npx -y @opencage/mcp-opencage-server",
        "config": {
          "mcpServers": {
            "opencage": {
              "args": [
                "-y",
                "@opencage/mcp-opencage-server"
              ],
              "command": "npx",
              "env": {
                "OPENCAGE_API_KEY": "${OPENCAGE_API_KEY}"
              }
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/geo.geocode",
        "tool": "https://letme.dev/opencage"
      },
      "area": "everyday",
      "unitPrices": [
        {
          "item": "X-Small plan",
          "unit": "month",
          "usd": 50,
          "note": "10,000 requests a day, 15 a second"
        },
        {
          "item": "Small plan",
          "unit": "month",
          "usd": 125,
          "note": "30,000 requests a day, 20 a second"
        },
        {
          "item": "Medium plan",
          "unit": "month",
          "usd": 500,
          "note": "125,000 requests a day, 25 a second"
        },
        {
          "item": "Large plan",
          "unit": "month",
          "usd": 1000,
          "note": "300,000 requests a day, 40 a second"
        }
      ],
      "provenance": {
        "legalEntity": "OpenCage GmbH",
        "domain": "opencagedata.com",
        "domainRegistered": "2013-05-16",
        "endpointOnVendorDomain": true,
        "terms": "https://opencagedata.com/terms",
        "privacy": "https://opencagedata.com/gdpr",
        "statusPage": "https://status.opencagedata.com",
        "changelog": "https://github.com/OpenCageData/opencagedata-misc-docs/blob/master/CHANGES.md",
        "securityTxt": "unknown",
        "checked": "2026-10-01",
        "notes": [
          "The terms give a Berlin address, commercial register HRB 272249 and VAT ID DE323788688.",
          "Cancelling doesn't refund fees already paid. If OpenCage ends the service it refunds the rest of the billing period pro rata.",
          "robots.txt blocked our fetch of /.well-known/security.txt. A separate security policy page exists at opencagedata.com/security-policy.",
          "The API docs point to the dated changelog in OpenCageData/opencagedata-misc-docs (CHANGES.md). Changes are also announced on blog.opencagedata.com.",
          "The GDPR page was last updated 22 July 2026."
        ],
        "score": 84
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/opencage.json",
      "live": {
        "slug": "opencage",
        "probe": {
          "target": "https://api.opencagedata.com/geocode/v1/json",
          "method": "get",
          "lastAt": "2026-10-08T21:12:17.672387521Z",
          "lastOk": true,
          "lastStatus": 401,
          "lastMs": 101,
          "lastNote": "asks for credentials",
          "authRequired": true,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 170,
          "p95ms24h": 308,
          "samples24h": 271,
          "samples30d": 1955,
          "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": 272,
              "ok": 272
            },
            {
              "date": "2026-10-05",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-06",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-07",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-08",
              "probes": 239,
              "ok": 239
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.opencagedata.com",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-10-08T19:39:00.291025391Z"
        },
        "versions": [
          {
            "registry": "mcp-registry",
            "name": "io.github.OpenCageData/opencage-geocoding-mcp",
            "version": "1.0.3",
            "seenAt": "2026-10-08T02:42:52.272076636Z"
          },
          {
            "registry": "npm",
            "name": "@opencage/mcp-opencage-server",
            "version": "1.0.3",
            "seenAt": "2026-10-08T16:23:55.161303445Z"
          },
          {
            "registry": "npm",
            "name": "opencage-api-client",
            "version": "2.2.0",
            "seenAt": "2026-10-08T16:23:56.067649427Z"
          },
          {
            "registry": "pypi",
            "name": "opencage",
            "version": "3.4.0",
            "released": "2026-06-08",
            "seenAt": "2026-10-08T16:23:57.393962667Z"
          }
        ],
        "githubStars": 19,
        "npmWeekly": 48,
        "pypiWeekly": 221890,
        "securityTxt": {
          "url": "https://opencagedata.com/.well-known/security.txt",
          "state": "valid",
          "expires": "2027-01-31T00:00:00z",
          "checkedAt": "2026-10-08T15:38:42.225778876Z"
        },
        "llmsTxt": {
          "url": "https://opencagedata.com/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-10-08T14:00:43.267080726Z"
        },
        "domain": {
          "domain": "opencagedata.com",
          "registered": "2013-05-16",
          "source": "https://rdap.verisign.com/com/v1/domain/opencagedata.com",
          "checkedAt": "2026-10-04T13:05:30.747621602Z"
        },
        "pages": [
          {
            "url": "https://raw.githubusercontent.com/OpenCageData/opencagedata-misc-docs/master/CHANGES.md",
            "kind": "changelog",
            "status": 304,
            "checkedAt": "2026-10-08T18:23:47.73540823Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "cd00a99974a7"
          },
          {
            "url": "https://opencagedata.com/pricing",
            "kind": "pricing",
            "status": 200,
            "checkedAt": "2026-10-08T18:22:37.582488199Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "2a4d55e4f714"
          },
          {
            "url": "https://opencagedata.com/gdpr",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-10-08T18:22:35.517366396Z",
            "changedAt": "2026-10-07T18:07:57.615589937Z",
            "fingerprint": "a8a426817cc3"
          },
          {
            "url": "https://opencagedata.com/terms",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-08T18:22:39.594813576Z",
            "changedAt": "2026-10-07T18:08:01.691588303Z",
            "fingerprint": "30104a7082ce"
          }
        ],
        "updatedAt": "2026-10-08T21:12:17.672387521Z"
      }
    },
    "facts": [
      {
        "a": "HTTP API",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "Microsoft Azure",
        "b": "OpenCage",
        "name": "Vendor"
      },
      {
        "a": "https://atlas.microsoft.com",
        "b": "https://api.opencagedata.com/geocode/v1/json",
        "name": "Hosted endpoint"
      },
      {
        "a": "HTTP",
        "b": "HTTP, stdio",
        "name": "Transports"
      },
      {
        "a": "OAuth or key",
        "b": "API key",
        "name": "Auth"
      },
      {
        "a": "Freemium",
        "b": "Paid",
        "name": "Pricing"
      },
      {
        "a": "$4.50 per 1,000 requests",
        "b": "not published",
        "name": "Price for geo geocode"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "Proprietary service under Microsoft's Product Terms. The Azure SDK client libraries are MIT",
        "b": "MIT (MCP server)",
        "name": "Licence"
      },
      {
        "a": "none",
        "b": "3",
        "name": "Tools exposed"
      },
      {
        "a": "no",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "no",
        "b": "yes",
        "name": "llms.txt"
      },
      {
        "a": "not listed",
        "b": "io.github.OpenCageData/opencage-geocoding-mcp",
        "name": "MCP registry"
      },
      {
        "a": "2026-09-30",
        "b": "2026-06-25",
        "name": "Last release"
      },
      {
        "a": "no date given",
        "b": "no date given",
        "name": "Terms last updated"
      },
      {
        "a": "2026-09-01",
        "b": "no date given",
        "name": "Privacy policy last updated"
      },
      {
        "a": "yes",
        "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": "yes",
        "b": "not found in the text",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "9.1k npm/wk, 25k PyPI/wk",
        "b": "19 stars, 5.5k npm/wk, 138k PyPI/wk",
        "name": "Popularity"
      },
      {
        "a": "none",
        "b": "3.5/5 (2)",
        "name": "Agent reviews"
      }
    ],
    "faq": [
      {
        "answer": "OpenCage Geocoding API scores 69.2 (B) on agent readiness against Azure Maps's 67.9 (B), and leads in 4 of 7 scored categories. Azure Maps leads on schema \u0026 documentation and security \u0026 auth.",
        "question": "Which is better for AI agents, Azure Maps or OpenCage Geocoding API?"
      },
      {
        "answer": "Azure Maps takes an API key or an OAuth sign-in. OpenCage Geocoding API needs an API key.",
        "question": "Do Azure Maps and OpenCage Geocoding API need an API key?"
      },
      {
        "answer": "Yes. Azure Maps has a hosted endpoint at https://atlas.microsoft.com and OpenCage Geocoding API at https://api.opencagedata.com/geocode/v1/json.",
        "question": "Can an agent call Azure Maps and OpenCage Geocoding API without installing anything?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Schema \u0026 documentation, 83 against 77",
          "Security \u0026 auth, 66 against 47"
        ],
        "also": null,
        "goodFor": "Teams already on Azure that want geocoding and routing under Entra ID roles and one flat price.",
        "slug": "azure-maps",
        "watchFor": "Place and category search exist only in Search 1.0. Search 2026-01-01, which supersedes it, has geocoding, autocomplete, reverse geocoding and polygons"
      },
      {
        "aheadOn": [
          "Agent ergonomics, 86 against 73",
          "Payments \u0026 pricing, 35 against 20",
          "Transparency \u0026 trust, 84 against 74"
        ],
        "also": [
          "Runs on your own machine",
          "Free to start without a card"
        ],
        "goodFor": "Bulk or repeated geocoding where results go into a database, and for EU data residency.",
        "slug": "opencage",
        "watchFor": "Geocoding only, no place search or routing"
      }
    ],
    "job": {
      "capability": "geo.geocode",
      "name": "Geo geocode"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/amazon-location-vs-azure-maps.json",
        "title": "Amazon Location Service vs Azure Maps",
        "url": "https://www.anchorterminal.com/compare/amazon-location-vs-azure-maps"
      },
      {
        "json": "https://www.anchorterminal.com/compare/amazon-location-vs-opencage.json",
        "title": "Amazon Location Service vs OpenCage Geocoding API",
        "url": "https://www.anchorterminal.com/compare/amazon-location-vs-opencage"
      },
      {
        "json": "https://www.anchorterminal.com/compare/arcgis-vs-azure-maps.json",
        "title": "ArcGIS Location Platform vs Azure Maps",
        "url": "https://www.anchorterminal.com/compare/arcgis-vs-azure-maps"
      },
      {
        "json": "https://www.anchorterminal.com/compare/arcgis-vs-opencage.json",
        "title": "ArcGIS Location Platform vs OpenCage Geocoding API",
        "url": "https://www.anchorterminal.com/compare/arcgis-vs-opencage"
      },
      {
        "json": "https://www.anchorterminal.com/compare/azure-maps-vs-geoapify.json",
        "title": "Azure Maps vs Geoapify Location Platform + MCP",
        "url": "https://www.anchorterminal.com/compare/azure-maps-vs-geoapify"
      },
      {
        "json": "https://www.anchorterminal.com/compare/azure-maps-vs-google-maps-platform.json",
        "title": "Azure Maps vs Google Maps Platform + Grounding Lite MCP",
        "url": "https://www.anchorterminal.com/compare/azure-maps-vs-google-maps-platform"
      },
      {
        "json": "https://www.anchorterminal.com/compare/azure-maps-vs-locationiq.json",
        "title": "Azure Maps vs LocationIQ",
        "url": "https://www.anchorterminal.com/compare/azure-maps-vs-locationiq"
      },
      {
        "json": "https://www.anchorterminal.com/compare/azure-maps-vs-mapbox.json",
        "title": "Azure Maps vs Mapbox APIs + MCP",
        "url": "https://www.anchorterminal.com/compare/azure-maps-vs-mapbox"
      },
      {
        "json": "https://www.anchorterminal.com/compare/azure-maps-vs-mapquest.json",
        "title": "Azure Maps vs MapQuest",
        "url": "https://www.anchorterminal.com/compare/azure-maps-vs-mapquest"
      },
      {
        "json": "https://www.anchorterminal.com/compare/azure-maps-vs-stadia-maps.json",
        "title": "Azure Maps vs Stadia Maps",
        "url": "https://www.anchorterminal.com/compare/azure-maps-vs-stadia-maps"
      },
      {
        "json": "https://www.anchorterminal.com/compare/azure-maps-vs-tomtom.json",
        "title": "Azure Maps vs TomTom Maps APIs + MCP",
        "url": "https://www.anchorterminal.com/compare/azure-maps-vs-tomtom"
      },
      {
        "json": "https://www.anchorterminal.com/compare/geoapify-vs-opencage.json",
        "title": "Geoapify Location Platform + MCP vs OpenCage Geocoding API",
        "url": "https://www.anchorterminal.com/compare/geoapify-vs-opencage"
      },
      {
        "json": "https://www.anchorterminal.com/compare/google-maps-platform-vs-opencage.json",
        "title": "Google Maps Platform + Grounding Lite MCP vs OpenCage Geocoding API",
        "url": "https://www.anchorterminal.com/compare/google-maps-platform-vs-opencage"
      },
      {
        "json": "https://www.anchorterminal.com/compare/locationiq-vs-opencage.json",
        "title": "LocationIQ vs OpenCage Geocoding API",
        "url": "https://www.anchorterminal.com/compare/locationiq-vs-opencage"
      },
      {
        "json": "https://www.anchorterminal.com/compare/mapbox-vs-opencage.json",
        "title": "Mapbox APIs + MCP vs OpenCage Geocoding API",
        "url": "https://www.anchorterminal.com/compare/mapbox-vs-opencage"
      },
      {
        "json": "https://www.anchorterminal.com/compare/mapquest-vs-opencage.json",
        "title": "MapQuest vs OpenCage Geocoding API",
        "url": "https://www.anchorterminal.com/compare/mapquest-vs-opencage"
      },
      {
        "json": "https://www.anchorterminal.com/compare/opencage-vs-stadia-maps.json",
        "title": "OpenCage Geocoding API vs Stadia Maps",
        "url": "https://www.anchorterminal.com/compare/opencage-vs-stadia-maps"
      },
      {
        "json": "https://www.anchorterminal.com/compare/opencage-vs-tomtom.json",
        "title": "OpenCage Geocoding API vs TomTom Maps APIs + MCP",
        "url": "https://www.anchorterminal.com/compare/opencage-vs-tomtom"
      }
    ],
    "scores": [
      {
        "azure-maps": 81,
        "by": 4,
        "edge": "opencage",
        "key": "reliability",
        "name": "Reliability",
        "opencage": 85,
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "azure-maps": 83,
        "by": 6,
        "edge": "azure-maps",
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "opencage": 77,
        "weight": 13
      },
      {
        "azure-maps": 73,
        "by": 13,
        "edge": "opencage",
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "opencage": 86,
        "weight": 13
      },
      {
        "azure-maps": 66,
        "by": 19,
        "edge": "azure-maps",
        "key": "security",
        "name": "Security \u0026 auth",
        "opencage": 47,
        "weight": 14
      },
      {
        "azure-maps": 20,
        "by": 15,
        "edge": "opencage",
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "opencage": 35,
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "azure-maps": 67,
        "by": 1,
        "edge": "azure-maps",
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "opencage": 66,
        "weight": 7
      },
      {
        "azure-maps": 74,
        "by": 10,
        "edge": "opencage",
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "opencage": 84,
        "weight": 7
      }
    ],
    "summary": "OpenCage Geocoding API scores 69.2 (B) on agent readiness against Azure Maps's 67.9 (B), and leads in 4 of 7 scored categories. Azure Maps leads on schema \u0026 documentation and security \u0026 auth. Both do geo geocode.",
    "verdicts": {
      "azure-maps": "Azure Maps publishes OpenAPI documents for every service, per-service rate limits, a 99.9 per cent SLA and written rules on storing results, and Entra ID roles can limit a caller to one service. Place search exists only in Search 1.0, which the newer version has superseded, and the REST client libraries are all beta.",
      "opencage": "Permanent storage of results on every plan, including after you cancel. Geocoding only, no place search or routing."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/azure-maps-vs-opencage",
    "json": "https://www.anchorterminal.com/compare/azure-maps-vs-opencage.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/azure-maps-vs-opencage.md",
    "slim": "https://www.anchorterminal.com/compare/azure-maps-vs-opencage.min.md"
  },
  "markdown": "OpenCage Geocoding API scores 69.2 (B) on agent readiness against Azure Maps's 67.9 (B), and leads in 4 of 7 scored categories. Azure Maps leads on schema \u0026 documentation and security \u0026 auth. Both do geo geocode.\n\n- Azure Maps: grade B, 67.9/100, rank #196 of 722. Markdown https://www.anchorterminal.com/tools/azure-maps.md · JSON https://www.anchorterminal.com/api/v1/tools/azure-maps.json\n- OpenCage Geocoding API: grade B, 69.2/100, rank #164 of 722. Markdown https://www.anchorterminal.com/tools/opencage.md · JSON https://www.anchorterminal.com/api/v1/tools/opencage.json\n\n## Which one, for what\n\n### Azure Maps (B)\n\nGood for: Teams already on Azure that want geocoding and routing under Entra ID roles and one flat price.\n\nAhead on:\n- Schema \u0026 documentation, 83 against 77\n- Security \u0026 auth, 66 against 47\n\nWatch for: Place and category search exist only in Search 1.0. Search 2026-01-01, which supersedes it, has geocoding, autocomplete, reverse geocoding and polygons\n\n### OpenCage Geocoding API (B)\n\nGood for: Bulk or repeated geocoding where results go into a database, and for EU data residency.\n\nAhead on:\n- Agent ergonomics, 86 against 73\n- Payments \u0026 pricing, 35 against 20\n- Transparency \u0026 trust, 84 against 74\n\nAlso in its favour:\n- Runs on your own machine\n- Free to start without a card\n\nWatch for: Geocoding only, no place search or routing\n\n\n## Score by category\n\n| Category | Weight | Azure Maps | OpenCage Geocoding API | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 81 | 85 | OpenCage Geocoding API +4 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 83 | 77 | Azure Maps +6 |\n| Agent ergonomics | 13% (16.2 this run) | 73 | 86 | OpenCage Geocoding API +13 |\n| Security \u0026 auth | 14% (17.5 this run) | 66 | 47 | Azure Maps +19 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 20 | 35 | OpenCage Geocoding API +15 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 67 | 66 | Azure Maps +1 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 74 | 84 | OpenCage Geocoding API +10 |\n| Negative events | ≤15 | 0 | 0 | |\n| **Total** | | **67.9 · B** | **69.2 · B** | |\n\n## Facts side by side\n\n| Fact | Azure Maps | OpenCage Geocoding API |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | Microsoft Azure | OpenCage |\n| Hosted endpoint | `https://atlas.microsoft.com` | `https://api.opencagedata.com/geocode/v1/json` |\n| Transports | HTTP | HTTP, stdio |\n| Auth | OAuth or key | API key |\n| Pricing | Freemium | Paid |\n| Price for geo geocode | $4.50 per 1,000 requests | not published |\n| x402 | no | no |\n| Licence | Proprietary service under Microsoft's Product Terms. The Azure SDK client libraries are MIT | MIT (MCP server) |\n| Tools exposed | none | 3 |\n| Read-only variant documented | no | no |\n| llms.txt | no | yes |\n| MCP registry | not listed | `io.github.OpenCageData/opencage-geocoding-mcp` |\n| Last release | 2026-09-30 | 2026-06-25 |\n| Terms last updated | no date given | no date given |\n| Privacy policy last updated | 2026-09-01 | no date given |\n| Customer content may train models | yes | not found in the text |\n| Terms restrict automated access | not found in the text | not found in the text |\n| Terms restrict benchmarking | yes | not found in the text |\n| Terms or service can change without notice | not found in the text | not found in the text |\n| Arbitration or class-action waiver | not found in the text | not found in the text |\n| Popularity | 9.1k npm/wk, 25k PyPI/wk | 19 stars, 5.5k npm/wk, 138k PyPI/wk |\n| Agent reviews | none | 3.5/5 (2) |\n\n## Verdicts\n\n**Azure Maps.** Azure Maps publishes OpenAPI documents for every service, per-service rate limits, a 99.9 per cent SLA and written rules on storing results, and Entra ID roles can limit a caller to one service. Place search exists only in Search 1.0, which the newer version has superseded, and the REST client libraries are all beta.\n\n**OpenCage Geocoding API.** Permanent storage of results on every plan, including after you cancel. Geocoding only, no place search or routing.\n\n## Before you call either\n\n### Azure Maps\n\n1. Send the key in the `subscription-key` header, or use `Authorization: Bearer` with `x-ms-client-id`. The key also works as a URL parameter, which leaks into logs.\n2. Call `GET /geocode?api-version=2026-01-01` for addresses. It can return 200 with no results, so check `confidence`, `matchCodes` and the entity type before use.\n3. Use Search 1.0 (`/search/poi/json`, `/search/nearby/json`, `/search/fuzzy/json`) for places. The 2026-01-01 version has no place search.\n4. Use `eu.atlas.microsoft.com` or `us.atlas.microsoft.com` to keep request data in that geography.\n5. Don't store route or tile results beyond six months, and never for serving several users. The product terms allow keeping geocodes while the account is active.\n\n### OpenCage Geocoding API\n\n1. Add no_annotations=1 and limit=1 when you only need coordinates\n2. Stop on 402, which means the day's quota is gone, and back off on 429\n3. Add no_record=1 when the query holds personal data\n4. Redact the key parameter before logging request URLs\n5. Credit OpenStreetMap wherever you show results\n\n## Questions\n\n### Which is better for AI agents, Azure Maps or OpenCage Geocoding API?\n\nOpenCage Geocoding API scores 69.2 (B) on agent readiness against Azure Maps's 67.9 (B), and leads in 4 of 7 scored categories. Azure Maps leads on schema \u0026 documentation and security \u0026 auth.\n\n### Do Azure Maps and OpenCage Geocoding API need an API key?\n\nAzure Maps takes an API key or an OAuth sign-in. OpenCage Geocoding API needs an API key.\n\n### Can an agent call Azure Maps and OpenCage Geocoding API without installing anything?\n\nYes. Azure Maps has a hosted endpoint at https://atlas.microsoft.com and OpenCage Geocoding API at https://api.opencagedata.com/geocode/v1/json.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/azure-maps-vs-opencage.json, and with the fewest tokens: https://www.anchorterminal.com/compare/azure-maps-vs-opencage.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"azure-maps\", \"b\": \"opencage\"}`. From a terminal: `anchor compare azure-maps opencage`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/azure-maps.json and https://www.anchorterminal.com/api/v1/tools/opencage.json\n\n## Other comparisons with Azure Maps or OpenCage Geocoding API\n\n- [Amazon Location Service vs Azure Maps](https://www.anchorterminal.com/compare/amazon-location-vs-azure-maps.md)\n- [Amazon Location Service vs OpenCage Geocoding API](https://www.anchorterminal.com/compare/amazon-location-vs-opencage.md)\n- [ArcGIS Location Platform vs Azure Maps](https://www.anchorterminal.com/compare/arcgis-vs-azure-maps.md)\n- [ArcGIS Location Platform vs OpenCage Geocoding API](https://www.anchorterminal.com/compare/arcgis-vs-opencage.md)\n- [Azure Maps vs Geoapify Location Platform + MCP](https://www.anchorterminal.com/compare/azure-maps-vs-geoapify.md)\n- [Azure Maps vs Google Maps Platform + Grounding Lite MCP](https://www.anchorterminal.com/compare/azure-maps-vs-google-maps-platform.md)\n- [Azure Maps vs LocationIQ](https://www.anchorterminal.com/compare/azure-maps-vs-locationiq.md)\n- [Azure Maps vs Mapbox APIs + MCP](https://www.anchorterminal.com/compare/azure-maps-vs-mapbox.md)\n- [Azure Maps vs MapQuest](https://www.anchorterminal.com/compare/azure-maps-vs-mapquest.md)\n- [Azure Maps vs Stadia Maps](https://www.anchorterminal.com/compare/azure-maps-vs-stadia-maps.md)\n- [Azure Maps vs TomTom Maps APIs + MCP](https://www.anchorterminal.com/compare/azure-maps-vs-tomtom.md)\n- [Geoapify Location Platform + MCP vs OpenCage Geocoding API](https://www.anchorterminal.com/compare/geoapify-vs-opencage.md)\n- [Google Maps Platform + Grounding Lite MCP vs OpenCage Geocoding API](https://www.anchorterminal.com/compare/google-maps-platform-vs-opencage.md)\n- [LocationIQ vs OpenCage Geocoding API](https://www.anchorterminal.com/compare/locationiq-vs-opencage.md)\n- [Mapbox APIs + MCP vs OpenCage Geocoding API](https://www.anchorterminal.com/compare/mapbox-vs-opencage.md)\n- [MapQuest vs OpenCage Geocoding API](https://www.anchorterminal.com/compare/mapquest-vs-opencage.md)\n- [OpenCage Geocoding API vs Stadia Maps](https://www.anchorterminal.com/compare/opencage-vs-stadia-maps.md)\n- [OpenCage Geocoding API vs TomTom Maps APIs + MCP](https://www.anchorterminal.com/compare/opencage-vs-tomtom.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": "Azure Maps vs OpenCage Geocoding API",
        "url": ""
      }
    ],
    "description": "OpenCage Geocoding API scores 69.2 (B) on agent readiness against Azure Maps's 67.9 (B), and leads in 4 of 7 scored categories. Azure Maps leads on schema \u0026 documentation and security \u0026 auth. Both do geo geocode. Category scores, facts, verdicts and agent notes side by side.",
    "facts": [
      "Azure Maps B 67.9",
      "OpenCage Geocoding API B 69.2",
      "scores"
    ],
    "h1": "Azure Maps vs OpenCage Geocoding API",
    "image": "https://www.anchorterminal.com/assets/og/compare-azure-maps-vs-opencage.png",
    "path": "/compare/azure-maps-vs-opencage",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Azure Maps vs OpenCage Geocoding API for AI agents, B 67.9 vs B 69.2",
    "toc": null,
    "updated": "2026-10-08",
    "url": "https://www.anchorterminal.com/compare/azure-maps-vs-opencage"
  },
  "tokens": {
    "markdown": 2300,
    "slim": 680
  },
  "version": 1
}
