{
  "data": {
    "a": {
      "slug": "arcgis",
      "name": "ArcGIS Location Platform",
      "vendor": "Esri",
      "vendorUrl": "https://location.arcgis.com",
      "kind": "http-api",
      "category": "maps",
      "summary": "Esri's pay-as-you-go location services for developers. REST APIs cover geocoding, reverse and batch geocoding, place search, routing, basemap tiles, static maps, elevation and demographic enrichment, with an Esri-hosted MCP server in beta.",
      "url": "https://www.anchorterminal.com/tools/arcgis",
      "markdownUrl": "https://www.anchorterminal.com/tools/arcgis.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/arcgis.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/arcgis.json",
      "repo": "https://github.com/Esri/arcgis-rest-js",
      "license": "Proprietary service under the ArcGIS Location Platform Agreement. The ArcGIS REST JS client library is Apache-2.0",
      "transports": [
        "http",
        "streamable-http"
      ],
      "remoteUrl": "https://geocode-api.arcgis.com",
      "packages": [
        {
          "registry": "npm",
          "name": "@esri/arcgis-rest-geocoding"
        },
        {
          "registry": "npm",
          "name": "@esri/arcgis-rest-request"
        },
        {
          "registry": "pypi",
          "name": "arcgis"
        }
      ],
      "auth": "mixed",
      "authNotes": "Self-serve. A free ArcGIS Location Platform account created in a browser issues API key credentials with selected privileges, an expiry date of up to one year, optional referrer limits and two tokens for rotation. OAuth 2.0 user authentication and app authentication (client ID and secret, short-lived tokens) are also supported. Requests take the token as a `token` parameter or in an `X-Esri-Authorization` or `Authorization` header. Accounts are for one person and may not be shared.",
      "pricing": "freemium",
      "pricingNotes": "Usage-based in US dollars with a monthly free tier and no contract. Free each month are 20,000 unstored geocodes, 20,000 routes, 500 place searches, 2 million basemap tiles, 1,000 static maps and 50,000 elevation points. A payment method (card, purchase order or voucher) is needed only to turn on pay-as-you-go, which services without a free tier, among them stored geocodes, require. The sign-up form is drawn by script and we couldn't read whether it asks for a card.",
      "priceSummary": "$0.50 / 1k req",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 on the pricing page, the billing help or the REST and MCP documentation (checked 2026-10-08).",
        "endpoints": []
      },
      "toolCount": 8,
      "popularity": {
        "githubStars": 392,
        "npmWeekly": 65286,
        "pypiWeekly": 32974,
        "asOf": "2026-10-08"
      },
      "docsUrl": "https://developers.arcgis.com/rest/location-based-services/",
      "capabilities": [
        "geo.geocode",
        "geo.reverse",
        "geo.places",
        "geo.routing",
        "geo.tiles"
      ],
      "tags": [
        "hosted",
        "maps",
        "geocoding",
        "routing",
        "places",
        "api-key",
        "oauth",
        "mcp",
        "beta-mcp",
        "free-tier",
        "usage-priced",
        "sla",
        "status-page",
        "typescript",
        "python"
      ],
      "lastRelease": "2026-09-29",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 65.4,
        "grade": "B",
        "agentReady": false,
        "rank": 259,
        "ranked": true,
        "rankOf": 722,
        "categoryRank": 6,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 78,
          "maintenance": 83,
          "payments": 40,
          "reliability": 65,
          "schema": 61,
          "security": 64,
          "transparency": 72
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-08"
        },
        "negative": 0,
        "verdict": "Per-unit prices are public for every service, with a monthly free tier of 20,000 geocodes and 20,000 routes, keys limited to chosen privileges and a 99.9 per cent SLA. No rate limits or OpenAPI description were found, results may not be stored unless the dearer stored geocode is bought, and the agreement bars benchmarking without written permission.",
        "bestFor": "Organisations already on Esri software, and work that needs demographic enrichment, service areas or fleet routing beside geocoding.",
        "strengths": [
          "Every service has a public unit price and most have a monthly free tier, such as 20,000 geocodes, 20,000 routes and 2 million basemap tiles (https://location.arcgis.com/pricing/).",
          "API key credentials carry selected privileges, an expiry date of up to one year, optional referrer limits and two tokens for rotation. OAuth 2.0 user and app authentication are also supported.",
          "A published SLA commits to 99.9 per cent monthly uptime for ten services, with credits of 10 or 20 per cent of the monthly bill for the affected service (document G632a, 23 December 2025).",
          "The agreement promises 90 days' notice for deprecations of SDKs, APIs and location services (ArcGIS Location Platform Agreement, revised 21 November 2025, section 4.1).",
          "An Esri-hosted MCP server at `https://location-services-mcp.arcgis.com/beta/mcp` has eight tools, filters them by the token's privileges and adds no charge on top of service rates."
        ],
        "weaknesses": [
          "The agreement bars benchmarking availability, performance or functionality, and publishing benchmark results, without prior written permission from Esri and its licensors (sections 3.1.b.6 and 3.1.c.6.F).",
          "No request rate limits, 429 behaviour or retry guidance were found in the geocoding, places or routing reference pages we read.",
          "No OpenAPI description or llms.txt was found. `/llms.txt` returns 404 on developers.arcgis.com and location.arcgis.com.",
          "Storing a geocode needs `forStorage=true` at $4 per 1,000 with no free tier, against $0.50 per 1,000 for results that may not be kept. The MCP geocoding tools bill at the stored rate.",
          "The MCP server is a beta under an Early Access programme, and the SLA excludes beta, evaluation and free services. Technical support is sold separately."
        ],
        "agentNotes": [
          "Send the token in an `X-Esri-Authorization: Bearer` or `Authorization` header. The docs' examples put it in a `token` parameter, which Esri's own best-practice page calls less secure.",
          "Set `forStorage=true` on `findAddressCandidates` or `reverseGeocode` only when results will be kept. It needs pay-as-you-go and the Geocode (stored) privilege, and costs eight times the unstored rate.",
          "Cap geocoding output with `maxLocations` (default and maximum 50) and `outFields`, because billing counts results returned and the default returns every field.",
          "Page place searches with `pageSize` (maximum 20) and `offset`. A nearby or extent search costs $8 per 1,000 requests after 500 free a month.",
          "Check the JSON body for an `error` object with `code`, `message` and `details`. Code 499 means the token is missing and 403 means it lacks the privilege."
        ],
        "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": 65.4
          }
        ],
        "editorialScores": {
          "ergonomics": 78,
          "maintenance": 83,
          "payments": 40,
          "reliability": 65,
          "schema": 61,
          "security": 64,
          "transparency": 54
        },
        "provenanceScore": 89
      },
      "connect": {
        "install": "npm install @esri/arcgis-rest-request @esri/arcgis-rest-geocoding",
        "http": "curl https://geocode-api.arcgis.com/arcgis/rest/services/World/GeocodeServer/findAddressCandidates \\\n  -d \"f=pjson\" \\\n  -d \"address=1600 Pennsylvania Ave NW, DC\" \\\n  -d \"token=\u003cACCESS_TOKEN\u003e\"",
        "config": {
          "servers": {
            "mcpArcGISLocationServices": {
              "headers": {
                "Authorization": "Bearer ${input:esriApiKey}"
              },
              "type": "http",
              "url": "https://location-services-mcp.arcgis.com/beta/mcp"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/geo.geocode",
        "tool": "https://letme.dev/arcgis"
      },
      "area": "everyday",
      "unitPrices": [
        {
          "item": "Geocodes, not stored (after 20,000 free a month)",
          "unit": "1k-requests",
          "usd": 0.5
        },
        {
          "item": "Geocodes, stored (`forStorage=true`, no free tier)",
          "unit": "1k-requests",
          "usd": 4
        },
        {
          "item": "Places nearby and extent search (after 500 free a month)",
          "unit": "1k-requests",
          "usd": 8
        },
        {
          "item": "Routes (after 20,000 free a month)",
          "unit": "1k-requests",
          "usd": 0.5
        },
        {
          "item": "Routes, stop-optimised (no free tier)",
          "unit": "1k-requests",
          "usd": 50
        },
        {
          "item": "Service areas (after 5,000 free a month)",
          "unit": "1k-requests",
          "usd": 50
        },
        {
          "item": "Basemap tiles (after 2 million free a month)",
          "unit": "1k-requests",
          "usd": 0.15
        },
        {
          "item": "Static maps (after 1,000 free a month)",
          "unit": "1k-requests",
          "usd": 0.9
        },
        {
          "item": "Elevation, per 1,000 points (after 50,000 free a month)",
          "unit": "1k-requests",
          "usd": 1
        }
      ],
      "provenance": {
        "legalEntity": "Environmental Systems Research Institute, Inc.",
        "domain": "arcgis.com",
        "domainRegistered": "1999-06-09",
        "endpointOnVendorDomain": true,
        "terms": "https://www.esri.com/content/dam/esrisites/en-us/media/legal/platform/platform-legal.pdf",
        "privacy": "https://www.esri.com/en-us/privacy/privacy-statements/privacy-statement",
        "statusPage": "https://status.location.arcgis.com",
        "changelog": "https://location.arcgis.com/help/release-notes/2026-07/",
        "securityTxt": "none",
        "checked": "2026-10-08",
        "notes": [
          "The ArcGIS Location Platform Agreement (E204 Platform Legal, revised 21 November 2025) is between the customer and Environmental Systems Research Institute, Inc., a California corporation at 380 New York Street, Redlands, California 92373-8100.",
          "The privacy statement (revised 31 July 2026) is the one the product's pages link. Esri also publishes a Products \u0026 Services Privacy Statement Supplement (9 September 2025) and a Data Processing Addendum (12 March 2024). Neither names ArcGIS Location Platform. The agreement's section 11.5 points to the addendum.",
          "The services answer on arcgis.com subdomains, among them geocode-api.arcgis.com, places-api.arcgis.com and location-services-mcp.arcgis.com.",
          "`/.well-known/security.txt` returns 404 on www.esri.com, developers.arcgis.com, location.arcgis.com and www.arcgis.com. The trust centre takes reports through a form, with a PGP key and a safe harbour statement.",
          "RDAP gives 1999-06-09 for arcgis.com and 1990-04-18 for esri.com, both registered through MarkMonitor Inc.",
          "The status page is Esri's own. Its event history is drawn by script, so we read the RSS feed it links, whose newest entry is dated 16 June 2026."
        ],
        "score": 89
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/arcgis.json",
      "live": {
        "slug": "arcgis",
        "probe": {
          "target": "https://geocode-api.arcgis.com",
          "method": "get",
          "lastAt": "2026-10-08T21:12:04.262139857Z",
          "lastOk": true,
          "lastStatus": 200,
          "lastMs": 145,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 138,
          "p95ms24h": 386,
          "samples24h": 21,
          "samples30d": 21,
          "days": [
            {
              "date": "2026-10-08",
              "probes": 21,
              "ok": 21
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.location.arcgis.com",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-10-08T19:38:14.482657019Z"
        },
        "updatedAt": "2026-10-08T21:12:04.262139857Z"
      }
    },
    "answer": "OpenCage Geocoding API scores 69.2 (B) on agent readiness against ArcGIS Location Platform's 65.4 (B), and leads in 4 of 7 scored categories. ArcGIS Location Platform leads on security \u0026 auth, payments \u0026 pricing and maintenance \u0026 community.",
    "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": "Esri",
        "b": "OpenCage",
        "name": "Vendor"
      },
      {
        "a": "https://geocode-api.arcgis.com",
        "b": "https://api.opencagedata.com/geocode/v1/json",
        "name": "Hosted endpoint"
      },
      {
        "a": "HTTP, Streamable HTTP",
        "b": "HTTP, stdio",
        "name": "Transports"
      },
      {
        "a": "OAuth or key",
        "b": "API key",
        "name": "Auth"
      },
      {
        "a": "Freemium",
        "b": "Paid",
        "name": "Pricing"
      },
      {
        "a": "$0.50 per 1,000 requests",
        "b": "not published",
        "name": "Price for geo geocode"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "Proprietary service under the ArcGIS Location Platform Agreement. The ArcGIS REST JS client library is Apache-2.0",
        "b": "MIT (MCP server)",
        "name": "Licence"
      },
      {
        "a": "8",
        "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-29",
        "b": "2026-06-25",
        "name": "Last release"
      },
      {
        "a": "",
        "b": "no date given",
        "name": "Terms last updated"
      },
      {
        "a": "2026-07-31",
        "b": "no date given",
        "name": "Privacy policy last updated"
      },
      {
        "a": "",
        "b": "not found in the text",
        "name": "Customer content may train models"
      },
      {
        "a": "",
        "b": "not found in the text",
        "name": "Terms restrict automated access"
      },
      {
        "a": "",
        "b": "not found in the text",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "",
        "b": "not found in the text",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "",
        "b": "not found in the text",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "392 stars, 65k npm/wk, 33k 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 ArcGIS Location Platform's 65.4 (B), and leads in 4 of 7 scored categories. ArcGIS Location Platform leads on security \u0026 auth, payments \u0026 pricing and maintenance \u0026 community.",
        "question": "Which is better for AI agents, ArcGIS Location Platform or OpenCage Geocoding API?"
      },
      {
        "answer": "ArcGIS Location Platform takes an API key or an OAuth sign-in. OpenCage Geocoding API needs an API key.",
        "question": "Do ArcGIS Location Platform and OpenCage Geocoding API need an API key?"
      },
      {
        "answer": "Yes. ArcGIS Location Platform has a hosted endpoint at https://geocode-api.arcgis.com and OpenCage Geocoding API at https://api.opencagedata.com/geocode/v1/json.",
        "question": "Can an agent call ArcGIS Location Platform and OpenCage Geocoding API without installing anything?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Security \u0026 auth, 64 against 47",
          "Payments \u0026 pricing, 40 against 35",
          "Maintenance \u0026 community, 83 against 66"
        ],
        "also": null,
        "goodFor": "Organisations already on Esri software, and work that needs demographic enrichment, service areas or fleet routing beside geocoding.",
        "slug": "arcgis",
        "watchFor": "The agreement bars benchmarking availability, performance or functionality, and publishing benchmark results, without prior written permission from Esri and its licensors (sections 3.1.b.6 and 3.1.c.6.F)."
      },
      {
        "aheadOn": [
          "Reliability, 85 against 65",
          "Schema \u0026 documentation, 77 against 61",
          "Agent ergonomics, 86 against 78",
          "Transparency \u0026 trust, 84 against 72"
        ],
        "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-arcgis.json",
        "title": "Amazon Location Service vs ArcGIS Location Platform",
        "url": "https://www.anchorterminal.com/compare/amazon-location-vs-arcgis"
      },
      {
        "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-geoapify.json",
        "title": "ArcGIS Location Platform vs Geoapify Location Platform + MCP",
        "url": "https://www.anchorterminal.com/compare/arcgis-vs-geoapify"
      },
      {
        "json": "https://www.anchorterminal.com/compare/arcgis-vs-google-maps-platform.json",
        "title": "ArcGIS Location Platform vs Google Maps Platform + Grounding Lite MCP",
        "url": "https://www.anchorterminal.com/compare/arcgis-vs-google-maps-platform"
      },
      {
        "json": "https://www.anchorterminal.com/compare/arcgis-vs-locationiq.json",
        "title": "ArcGIS Location Platform vs LocationIQ",
        "url": "https://www.anchorterminal.com/compare/arcgis-vs-locationiq"
      },
      {
        "json": "https://www.anchorterminal.com/compare/arcgis-vs-mapbox.json",
        "title": "ArcGIS Location Platform vs Mapbox APIs + MCP",
        "url": "https://www.anchorterminal.com/compare/arcgis-vs-mapbox"
      },
      {
        "json": "https://www.anchorterminal.com/compare/arcgis-vs-mapquest.json",
        "title": "ArcGIS Location Platform vs MapQuest",
        "url": "https://www.anchorterminal.com/compare/arcgis-vs-mapquest"
      },
      {
        "json": "https://www.anchorterminal.com/compare/arcgis-vs-stadia-maps.json",
        "title": "ArcGIS Location Platform vs Stadia Maps",
        "url": "https://www.anchorterminal.com/compare/arcgis-vs-stadia-maps"
      },
      {
        "json": "https://www.anchorterminal.com/compare/arcgis-vs-tomtom.json",
        "title": "ArcGIS Location Platform vs TomTom Maps APIs + MCP",
        "url": "https://www.anchorterminal.com/compare/arcgis-vs-tomtom"
      },
      {
        "json": "https://www.anchorterminal.com/compare/azure-maps-vs-opencage.json",
        "title": "Azure Maps vs OpenCage Geocoding API",
        "url": "https://www.anchorterminal.com/compare/azure-maps-vs-opencage"
      },
      {
        "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": [
      {
        "arcgis": 65,
        "by": 20,
        "edge": "opencage",
        "key": "reliability",
        "name": "Reliability",
        "opencage": 85,
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "arcgis": 61,
        "by": 16,
        "edge": "opencage",
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "opencage": 77,
        "weight": 13
      },
      {
        "arcgis": 78,
        "by": 8,
        "edge": "opencage",
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "opencage": 86,
        "weight": 13
      },
      {
        "arcgis": 64,
        "by": 17,
        "edge": "arcgis",
        "key": "security",
        "name": "Security \u0026 auth",
        "opencage": 47,
        "weight": 14
      },
      {
        "arcgis": 40,
        "by": 5,
        "edge": "arcgis",
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "opencage": 35,
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "arcgis": 83,
        "by": 17,
        "edge": "arcgis",
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "opencage": 66,
        "weight": 7
      },
      {
        "arcgis": 72,
        "by": 12,
        "edge": "opencage",
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "opencage": 84,
        "weight": 7
      }
    ],
    "summary": "OpenCage Geocoding API scores 69.2 (B) on agent readiness against ArcGIS Location Platform's 65.4 (B), and leads in 4 of 7 scored categories. ArcGIS Location Platform leads on security \u0026 auth, payments \u0026 pricing and maintenance \u0026 community. Both do geo geocode.",
    "verdicts": {
      "arcgis": "Per-unit prices are public for every service, with a monthly free tier of 20,000 geocodes and 20,000 routes, keys limited to chosen privileges and a 99.9 per cent SLA. No rate limits or OpenAPI description were found, results may not be stored unless the dearer stored geocode is bought, and the agreement bars benchmarking without written permission.",
      "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/arcgis-vs-opencage",
    "json": "https://www.anchorterminal.com/compare/arcgis-vs-opencage.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/arcgis-vs-opencage.md",
    "slim": "https://www.anchorterminal.com/compare/arcgis-vs-opencage.min.md"
  },
  "markdown": "OpenCage Geocoding API scores 69.2 (B) on agent readiness against ArcGIS Location Platform's 65.4 (B), and leads in 4 of 7 scored categories. ArcGIS Location Platform leads on security \u0026 auth, payments \u0026 pricing and maintenance \u0026 community. Both do geo geocode.\n\n- ArcGIS Location Platform: grade B, 65.4/100, rank #259 of 722. Markdown https://www.anchorterminal.com/tools/arcgis.md · JSON https://www.anchorterminal.com/api/v1/tools/arcgis.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### ArcGIS Location Platform (B)\n\nGood for: Organisations already on Esri software, and work that needs demographic enrichment, service areas or fleet routing beside geocoding.\n\nAhead on:\n- Security \u0026 auth, 64 against 47\n- Payments \u0026 pricing, 40 against 35\n- Maintenance \u0026 community, 83 against 66\n\nWatch for: The agreement bars benchmarking availability, performance or functionality, and publishing benchmark results, without prior written permission from Esri and its licensors (sections 3.1.b.6 and 3.1.c.6.F).\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- Reliability, 85 against 65\n- Schema \u0026 documentation, 77 against 61\n- Agent ergonomics, 86 against 78\n- Transparency \u0026 trust, 84 against 72\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 | ArcGIS Location Platform | OpenCage Geocoding API | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 65 | 85 | OpenCage Geocoding API +20 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 61 | 77 | OpenCage Geocoding API +16 |\n| Agent ergonomics | 13% (16.2 this run) | 78 | 86 | OpenCage Geocoding API +8 |\n| Security \u0026 auth | 14% (17.5 this run) | 64 | 47 | ArcGIS Location Platform +17 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 40 | 35 | ArcGIS Location Platform +5 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 83 | 66 | ArcGIS Location Platform +17 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 72 | 84 | OpenCage Geocoding API +12 |\n| Negative events | ≤15 | 0 | 0 | |\n| **Total** | | **65.4 · B** | **69.2 · B** | |\n\n## Facts side by side\n\n| Fact | ArcGIS Location Platform | OpenCage Geocoding API |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | Esri | OpenCage |\n| Hosted endpoint | `https://geocode-api.arcgis.com` | `https://api.opencagedata.com/geocode/v1/json` |\n| Transports | HTTP, Streamable HTTP | HTTP, stdio |\n| Auth | OAuth or key | API key |\n| Pricing | Freemium | Paid |\n| Price for geo geocode | $0.50 per 1,000 requests | not published |\n| x402 | no | no |\n| Licence | Proprietary service under the ArcGIS Location Platform Agreement. The ArcGIS REST JS client library is Apache-2.0 | MIT (MCP server) |\n| Tools exposed | 8 | 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-29 | 2026-06-25 |\n| Terms last updated |  | no date given |\n| Privacy policy last updated | 2026-07-31 | no date given |\n| Customer content may train models |  | not found in the text |\n| Terms restrict automated access |  | not found in the text |\n| Terms restrict benchmarking |  | not found in the text |\n| Terms or service can change without notice |  | not found in the text |\n| Arbitration or class-action waiver |  | not found in the text |\n| Popularity | 392 stars, 65k npm/wk, 33k PyPI/wk | 19 stars, 5.5k npm/wk, 138k PyPI/wk |\n| Agent reviews | none | 3.5/5 (2) |\n\n## Verdicts\n\n**ArcGIS Location Platform.** Per-unit prices are public for every service, with a monthly free tier of 20,000 geocodes and 20,000 routes, keys limited to chosen privileges and a 99.9 per cent SLA. No rate limits or OpenAPI description were found, results may not be stored unless the dearer stored geocode is bought, and the agreement bars benchmarking without written permission.\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### ArcGIS Location Platform\n\n1. Send the token in an `X-Esri-Authorization: Bearer` or `Authorization` header. The docs' examples put it in a `token` parameter, which Esri's own best-practice page calls less secure.\n2. Set `forStorage=true` on `findAddressCandidates` or `reverseGeocode` only when results will be kept. It needs pay-as-you-go and the Geocode (stored) privilege, and costs eight times the unstored rate.\n3. Cap geocoding output with `maxLocations` (default and maximum 50) and `outFields`, because billing counts results returned and the default returns every field.\n4. Page place searches with `pageSize` (maximum 20) and `offset`. A nearby or extent search costs $8 per 1,000 requests after 500 free a month.\n5. Check the JSON body for an `error` object with `code`, `message` and `details`. Code 499 means the token is missing and 403 means it lacks the privilege.\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, ArcGIS Location Platform or OpenCage Geocoding API?\n\nOpenCage Geocoding API scores 69.2 (B) on agent readiness against ArcGIS Location Platform's 65.4 (B), and leads in 4 of 7 scored categories. ArcGIS Location Platform leads on security \u0026 auth, payments \u0026 pricing and maintenance \u0026 community.\n\n### Do ArcGIS Location Platform and OpenCage Geocoding API need an API key?\n\nArcGIS Location Platform takes an API key or an OAuth sign-in. OpenCage Geocoding API needs an API key.\n\n### Can an agent call ArcGIS Location Platform and OpenCage Geocoding API without installing anything?\n\nYes. ArcGIS Location Platform has a hosted endpoint at https://geocode-api.arcgis.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/arcgis-vs-opencage.json, and with the fewest tokens: https://www.anchorterminal.com/compare/arcgis-vs-opencage.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"arcgis\", \"b\": \"opencage\"}`. From a terminal: `anchor compare arcgis opencage`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/arcgis.json and https://www.anchorterminal.com/api/v1/tools/opencage.json\n\n## Other comparisons with ArcGIS Location Platform or OpenCage Geocoding API\n\n- [Amazon Location Service vs ArcGIS Location Platform](https://www.anchorterminal.com/compare/amazon-location-vs-arcgis.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 Geoapify Location Platform + MCP](https://www.anchorterminal.com/compare/arcgis-vs-geoapify.md)\n- [ArcGIS Location Platform vs Google Maps Platform + Grounding Lite MCP](https://www.anchorterminal.com/compare/arcgis-vs-google-maps-platform.md)\n- [ArcGIS Location Platform vs LocationIQ](https://www.anchorterminal.com/compare/arcgis-vs-locationiq.md)\n- [ArcGIS Location Platform vs Mapbox APIs + MCP](https://www.anchorterminal.com/compare/arcgis-vs-mapbox.md)\n- [ArcGIS Location Platform vs MapQuest](https://www.anchorterminal.com/compare/arcgis-vs-mapquest.md)\n- [ArcGIS Location Platform vs Stadia Maps](https://www.anchorterminal.com/compare/arcgis-vs-stadia-maps.md)\n- [ArcGIS Location Platform vs TomTom Maps APIs + MCP](https://www.anchorterminal.com/compare/arcgis-vs-tomtom.md)\n- [Azure Maps vs OpenCage Geocoding API](https://www.anchorterminal.com/compare/azure-maps-vs-opencage.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": "ArcGIS Location Platform vs OpenCage Geocoding API",
        "url": ""
      }
    ],
    "description": "OpenCage Geocoding API scores 69.2 (B) on agent readiness against ArcGIS Location Platform's 65.4 (B), and leads in 4 of 7 scored categories. ArcGIS Location Platform leads on security \u0026 auth, payments \u0026 pricing and maintenance \u0026 community. Both do geo geocode. Category scores…",
    "facts": [
      "ArcGIS Location Platform B 65.4",
      "OpenCage Geocoding API B 69.2",
      "scores"
    ],
    "h1": "ArcGIS Location Platform vs OpenCage Geocoding API",
    "image": "https://www.anchorterminal.com/assets/og/compare-arcgis-vs-opencage.png",
    "path": "/compare/arcgis-vs-opencage",
    "published": "2026-10-01",
    "section": "tools",
    "title": "ArcGIS Location Platform vs OpenCage Geocoding API for AI agents",
    "toc": null,
    "updated": "2026-10-08",
    "url": "https://www.anchorterminal.com/compare/arcgis-vs-opencage"
  },
  "tokens": {
    "markdown": 2500,
    "slim": 830
  },
  "version": 1
}
