{
  "data": {
    "a": {
      "slug": "dataforseo",
      "name": "DataForSEO",
      "vendor": "DataForSEO OÜ",
      "vendorUrl": "https://dataforseo.com",
      "kind": "http-api",
      "category": "seo",
      "summary": "SEO data API from DataForSEO OÜ in Estonia. It returns search results pages, keyword volumes, backlinks, ranked keywords and traffic estimates as JSON, billed per request from a prepaid balance, with an official MCP server.",
      "url": "https://www.anchorterminal.com/tools/dataforseo",
      "markdownUrl": "https://www.anchorterminal.com/tools/dataforseo.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/dataforseo.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/dataforseo.json",
      "dns": "dataforseo.grade.anchorterminal.com",
      "repo": "https://github.com/dataforseo/mcp-server-typescript",
      "license": "Proprietary service under DataForSEO's terms of service. The MCP server is Apache-2.0 and the Python client is MIT",
      "transports": [
        "http",
        "streamable-http",
        "stdio"
      ],
      "remoteUrl": "https://api.dataforseo.com/v3/",
      "packages": [
        {
          "registry": "npm",
          "name": "dataforseo-mcp-server"
        },
        {
          "registry": "npm",
          "name": "dataforseo-client"
        },
        {
          "registry": "pypi",
          "name": "dataforseo-client"
        }
      ],
      "auth": "mixed",
      "authNotes": "Self-serve. A person registers at app.dataforseo.com and verifies an email address or phone number, and the dashboard issues one API login and an automatically generated API password. The REST API accepts only HTTP Basic in the `Authorization` header, and the docs say credentials can't be passed in URL parameters. The credentials cover every API on the account, with no scopes. An optional IP whitelist and daily cost limits are set in the dashboard. The hosted MCP server also accepts OAuth 2.0 (authorisation code grant with PKCE, dynamic client registration, refresh and revocation, scopes `api` and `profile`).",
      "pricing": "usage",
      "pricingNotes": "Pay as you go from a prepaid balance, with a $50 minimum payment and funds that don't expire. Registration adds a $1 credit, and the sandbox at sandbox.dataforseo.com is free and returns dummy data, so an agent can start without a contract. Prices are per request and differ by API and by queue (Standard, Priority or Live). The errors page says Backlinks API access needs a minimal commitment, and the amount wasn't found (checked 2026-10-08).",
      "priceSummary": "$0.60 / 1k req",
      "where": "both",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in llms.txt, the docs introduction, the pricing pages or the home page (checked 2026-10-08).",
        "endpoints": []
      },
      "toolCount": 4,
      "popularity": {
        "githubStars": 251,
        "npmWeekly": 31548,
        "pypiWeekly": 49757,
        "asOf": "2026-10-08"
      },
      "docsUrl": "https://docs.dataforseo.com/v3/",
      "llmsTxt": "https://dataforseo.com/llms.txt",
      "openapi": "https://github.com/dataforseo/OpenApiDocumentation/blob/master/openapi_specification.yaml",
      "capabilities": [
        "seo.keywords",
        "seo.backlinks",
        "seo.serp",
        "seo.rankings",
        "seo.traffic",
        "search.serp"
      ],
      "tags": [
        "hosted",
        "usage-based",
        "prepaid",
        "mcp",
        "oauth",
        "openapi",
        "llms-txt",
        "python",
        "typescript",
        "csharp",
        "java",
        "php",
        "sandbox",
        "status-page",
        "closed-source"
      ],
      "lastRelease": "2026-10-30",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 60.1,
        "grade": "C",
        "agentReady": false,
        "rank": 665,
        "ranked": true,
        "rankOf": 1510,
        "categoryRank": 2,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 84,
          "maintenance": 82,
          "payments": 40,
          "reliability": 59,
          "schema": 86,
          "security": 45,
          "transparency": 76
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-11-02"
        },
        "negative": -6,
        "negativeNotes": [
          "26 to 27 March 2026. An attacker took over an admin session on the WordPress marketing website through the Flamingo plugin and deployed two webshells with command execution. DataForSEO says the site holds no customer data and no other infrastructure was affected, and published a postmortem on 28 March. Fixed and documented, so the deduction is reduced (-3). https://dataforseo.com/update/postmortem-wp-incident-march-27",
          "16 September 2026. The Pinterest API and the Social Media API suite were retired with an announcement dated the same day, and the docs pages now return 404. We found no earlier public notice, though customers may have been told by email (-3). The Naver SERP API's default `depth` rose from 15 to 20 results per request on 29 October 2026, announced the same day, and folds into this term as the same kind. https://dataforseo.com/update/ending-support-pinterest-and-social-media-ap%d1%96"
        ],
        "verdict": "Per-request prices are public for every endpoint, and a $1 credit and a free sandbox need no payment. The REST API accepts one account-wide login and password with no scopes, no SLA or security certification was found, and the status page's incident history couldn't be read, since it loads only through an internal data endpoint.",
        "bestFor": "Agents and products that need raw SEO data in bulk at a low unit price, across SERPs, keyword volumes, backlinks, ranked keywords and traffic estimates, and that can work with a task queue.",
        "strengths": [
          "Per-request prices published for every API, from $0.0006 a results page in the standard queue, with the cost returned in each response",
          "OpenAPI 3.0.1 specification with 564 operations, llms.txt and a Markdown copy of each docs page",
          "Default rate limit of 10,000 requests a minute since 19 October 2026, reported in `X-RateLimit-Limit` and `X-RateLimit-Remaining` headers",
          "Appending `.ai` to a path trims the response and sets `limit` and `depth` to 10",
          "Hosted MCP server with four tools, OAuth 2.0 with PKCE, dynamic client registration and token revocation"
        ],
        "weaknesses": [
          "The REST API takes one account-wide login and password over HTTP Basic, with no scopes or read-only credential",
          "No SLA found, the terms disclaim liability for downtime, and the status page shows its incident history only through an internal data endpoint",
          "Errors arrive as HTTP 200 with a `status_code` in the body, at both the response and the task level",
          "No security.txt, certification or bug bounty found, and the marketing website was compromised on 26 March 2026",
          "Pinterest and the Social Media API were retired on 16 September 2026, the day of the announcement"
        ],
        "agentNotes": [
          "Check `status_code` on the response and on every task. HTTP 200 is returned for most errors, and 20000 or 20100 means success",
          "Append `.ai` to Live and Task GET paths to get the trimmed response. The MCP `api_request` tool does this unless `noAiMode` is true",
          "Build against https://sandbox.dataforseo.com/v3/ first. It is free and returns dummy data in the production structure",
          "Use the standard queue (`task_post`, then `task_get` or a `postback_url`) for bulk work. Live Google Ads endpoints allow 12 requests a minute",
          "Ask the account owner to set daily cost limits and an IP whitelist, since the credentials carry the whole prepaid balance"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 4,
        "avgRating": 3.5,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "C",
            "methodology": "0.7",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 60.1
          }
        ],
        "editorialScores": {
          "ergonomics": 84,
          "maintenance": 82,
          "payments": 40,
          "reliability": 59,
          "schema": 86,
          "security": 45,
          "transparency": 65
        },
        "provenanceScore": 87,
        "checked": {
          "categories": {
            "ergonomics": "2026-11-02",
            "maintenance": "2026-11-02",
            "payments": "2026-11-02",
            "reliability": "2026-11-02",
            "schema": "2026-11-02",
            "security": "2026-11-02",
            "transparency": "2026-11-02"
          },
          "last": "2026-11-02",
          "lastMoved": "2026-11-02",
          "oldest": "2026-11-02",
          "stale": false,
          "staleAfterDays": 90
        }
      },
      "connect": {
        "install": "npx dataforseo-mcp-server@latest",
        "http": "curl --location --request POST \"https://api.dataforseo.com/v3/serp/google/organic/live/regular\" --header \"Authorization: Basic ${cred}\" --header \"Content-Type: application/json\" --data-raw '[{\"keyword\":\"dataforseo\",\"location_code\":2840,\"language_code\":\"en\"}]'",
        "claudeCode": "claude mcp add --header \"Authorization: Basic \u003cbasic_auth_token\u003e\" --transport http dfs-mcp https://mcp.dataforseo.com/http",
        "config": {
          "mcpServers": {
            "dataforseo": {
              "url": "https://mcp.dataforseo.com/v3/mcp"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/seo.keywords",
        "tool": "https://letme.dev/dataforseo"
      },
      "area": "web-data",
      "unitPrices": [
        {
          "item": "Google Organic SERP, standard queue, per 1,000 results pages",
          "unit": "1k-requests",
          "usd": 0.6,
          "note": "$0.0006 a page of 10 results, about 5 minutes on average"
        },
        {
          "item": "Google Organic SERP, priority queue, per 1,000 results pages",
          "unit": "1k-requests",
          "usd": 1.2,
          "note": "$0.0012 a page, up to 1 minute on average"
        },
        {
          "item": "Google Organic SERP, Live, per 1,000 results pages",
          "unit": "1k-requests",
          "usd": 2,
          "note": "$0.002 a page, up to 6 seconds on average"
        },
        {
          "item": "Backlinks API, per request",
          "unit": "call",
          "usd": 0.024,
          "note": "plus $0.000036 a row, so $0.06 for a request returning 1,000 rows"
        },
        {
          "item": "Google Ads keyword data, standard task",
          "unit": "call",
          "usd": 0.06,
          "note": "up to 1,000 keywords a task. $0.09 in Live mode"
        },
        {
          "item": "DataForSEO Labs Google, most endpoints, per task",
          "unit": "call",
          "usd": 0.012,
          "note": "plus a per-item charge. Historical Rank is $0.12 a task plus $0.0012 an item"
        },
        {
          "item": "Minimum payment",
          "unit": "tx",
          "usd": 50,
          "note": "prepaid balance, funds don't expire"
        }
      ],
      "provenance": {
        "legalEntity": "DataForSEO OÜ",
        "domain": "dataforseo.com",
        "domainRegistered": "2016-10-24",
        "endpointOnVendorDomain": true,
        "terms": "https://dataforseo.com/terms-of-service/",
        "privacy": "https://dataforseo.com/privacy-policy/",
        "statusPage": "https://status.dataforseo.com/",
        "changelog": "https://dataforseo.com/updates",
        "securityTxt": "none",
        "checked": "2026-11-02",
        "notes": [
          "The terms of service (updated 12 June 2026) name DataForSEO OU, company number 14502291, registered in the Republic of Estonia. The site footer gives an address in Tallinn and one in Kharkiv, Ukraine.",
          "The API answers at https://api.dataforseo.com/v3/, the sandbox at https://sandbox.dataforseo.com/v3/ and the hosted MCP server at https://mcp.dataforseo.com/v3/mcp, with OAuth served from https://data.dataforseo.com.",
          "https://dataforseo.com/.well-known/security.txt returns 403, the same path on docs.dataforseo.com returns 404 and on api.dataforseo.com 401. No security contact or disclosure policy was found in the reviewed pages. Re-read on 2 November 2026, still 403.",
          "The status page is the vendor's own application. It links no feed and draws its history by script from a status data endpoint on data.dataforseo.com, an internal endpoint we don't call, so its history wasn't read on 2 November 2026.",
          "RDAP for dataforseo.com gives a registration date of 2016-10-24."
        ],
        "score": 87
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/dataforseo.json",
      "live": {
        "slug": "dataforseo",
        "probe": {
          "target": "https://api.dataforseo.com/v3/",
          "method": "get",
          "lastAt": "2026-11-07T19:22:02.587646274Z",
          "lastOk": true,
          "lastStatus": 401,
          "lastMs": 97,
          "lastNote": "asks for credentials",
          "authRequired": true,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 99,
          "p95ms24h": 204,
          "samples24h": 238,
          "samples30d": 7473,
          "days": [
            {
              "date": "2026-10-08",
              "probes": 93,
              "ok": 93
            },
            {
              "date": "2026-10-09",
              "probes": 250,
              "ok": 250
            },
            {
              "date": "2026-10-10",
              "probes": 247,
              "ok": 247
            },
            {
              "date": "2026-10-11",
              "probes": 247,
              "ok": 247
            },
            {
              "date": "2026-10-12",
              "probes": 247,
              "ok": 247
            },
            {
              "date": "2026-10-13",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-14",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-10-15",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-16",
              "probes": 252,
              "ok": 252
            },
            {
              "date": "2026-10-17",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-18",
              "probes": 256,
              "ok": 256
            },
            {
              "date": "2026-10-19",
              "probes": 255,
              "ok": 255
            },
            {
              "date": "2026-10-20",
              "probes": 252,
              "ok": 252
            },
            {
              "date": "2026-10-21",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-22",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-23",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-24",
              "probes": 251,
              "ok": 251
            },
            {
              "date": "2026-10-25",
              "probes": 250,
              "ok": 250
            },
            {
              "date": "2026-10-26",
              "probes": 252,
              "ok": 252
            },
            {
              "date": "2026-10-27",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-10-28",
              "probes": 251,
              "ok": 251
            },
            {
              "date": "2026-10-29",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-30",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-10-31",
              "probes": 251,
              "ok": 251
            },
            {
              "date": "2026-11-01",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-11-02",
              "probes": 250,
              "ok": 250
            },
            {
              "date": "2026-11-03",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-11-04",
              "probes": 246,
              "ok": 246
            },
            {
              "date": "2026-11-05",
              "probes": 185,
              "ok": 185
            },
            {
              "date": "2026-11-06",
              "probes": 241,
              "ok": 241
            },
            {
              "date": "2026-11-07",
              "probes": 197,
              "ok": 197
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.dataforseo.com",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-11-07T04:47:36.17358544Z"
        },
        "versions": [
          {
            "registry": "npm",
            "name": "dataforseo-client",
            "version": "2.1.10",
            "seenAt": "2026-11-06T23:19:26.499831458Z"
          },
          {
            "registry": "npm",
            "name": "dataforseo-mcp-server",
            "version": "3.1.3",
            "seenAt": "2026-11-06T23:19:26.298557963Z"
          },
          {
            "registry": "pypi",
            "name": "dataforseo-client",
            "version": "2.1.10",
            "released": "2026-10-26",
            "seenAt": "2026-11-06T23:19:28.759883883Z"
          }
        ],
        "githubStars": 260,
        "npmWeekly": 10427,
        "pypiWeekly": 28588,
        "securityTxt": {
          "url": "https://dataforseo.com/.well-known/security.txt",
          "state": "unknown",
          "checkedAt": "2026-11-07T15:59:28.083297758Z"
        },
        "llmsTxt": {
          "url": "https://dataforseo.com/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-11-07T15:32:14.339852817Z"
        },
        "domain": {
          "domain": "dataforseo.com",
          "registered": "2016-10-24",
          "source": "https://rdap.verisign.com/com/v1/domain/dataforseo.com",
          "checkedAt": "2026-11-01T14:24:56.055326633Z"
        },
        "pages": [
          {
            "url": "https://dataforseo.com/updates",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-11-07T14:02:39.869697198Z",
            "changedAt": "2026-11-07T14:02:39.869697198Z",
            "fingerprint": "8a5ac9847ea4"
          },
          {
            "url": "https://dataforseo.com/update/desktop-depth-changes-in-google-local-finder-serp-api",
            "kind": "deprecations",
            "status": 304,
            "checkedAt": "2026-11-07T14:02:31.933602392Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "c47daed7f394"
          },
          {
            "url": "https://dataforseo.com/update/max-depth-change-in-app-store-list-api",
            "kind": "deprecations",
            "status": 304,
            "checkedAt": "2026-11-07T14:02:35.430375266Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "15880a1bb0f2"
          },
          {
            "url": "https://dataforseo.com/update/naver-serp-api-default-depth-increased-to-20",
            "kind": "deprecations",
            "status": 304,
            "checkedAt": "2026-11-07T14:02:35.87181541Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "743638f2d828"
          },
          {
            "url": "https://dataforseo.com/update/organic-result-checks-in-google-serps",
            "kind": "deprecations",
            "status": 304,
            "checkedAt": "2026-11-07T14:02:37.848820909Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "15cbcc04a41c"
          },
          {
            "url": "https://dataforseo.com/privacy-policy/",
            "kind": "privacy",
            "status": 304,
            "checkedAt": "2026-11-07T14:02:27.805673605Z",
            "changedAt": "2026-11-06T13:25:03.868715339Z",
            "fingerprint": "118ae4869350"
          },
          {
            "url": "https://dataforseo.com/terms-of-service/",
            "kind": "terms",
            "status": 304,
            "checkedAt": "2026-11-07T14:02:29.919152696Z",
            "changedAt": "2026-11-06T13:25:06.56703745Z",
            "fingerprint": "e8ed0ad4d3f9"
          }
        ],
        "mcpTools": {
          "url": "https://mcp.dataforseo.com/http",
          "checkedAt": "2026-11-07T01:43:42.003890984Z",
          "status": "auth",
          "note": "asks for credentials before listing its tools",
          "changedAt": "2026-11-07T01:43:42.003890984Z"
        },
        "github": {
          "repo": "dataforseo/mcp-server-typescript",
          "checkedAt": "2026-11-02T08:42:58.267868854Z",
          "stars": 258,
          "archived": false,
          "issuesEnabled": true,
          "pushedAt": "2026-11-01T10:56:49Z",
          "openIssues": 3,
          "openPRs": 3,
          "issuesOpened90d": 1,
          "issuesClosed90d": 1,
          "prsMerged90d": 3,
          "replies": {
            "sampled": 16,
            "unanswered": 2,
            "medianDays": 7.4
          }
        },
        "updatedAt": "2026-11-07T19:22:02.587646274Z"
      }
    },
    "answer": "DataForSEO scores 60.1 (C) on agent readiness against SpyFu API's 48.1 (D), and leads in 6 of 7 scored categories. SpyFu API leads on security \u0026 auth.",
    "b": {
      "slug": "spyfu",
      "name": "SpyFu API",
      "vendor": "SpyFu, Inc.",
      "vendorUrl": "https://www.spyfu.com",
      "kind": "http-api",
      "category": "seo",
      "summary": "SpyFu's REST API returns competitor SEO and paid-search data from SpyFu's index, including domain stats over time, organic and paid keywords, ad history, ranking history and competitors, billed per row returned.",
      "url": "https://www.anchorterminal.com/tools/spyfu",
      "markdownUrl": "https://www.anchorterminal.com/tools/spyfu.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/spyfu.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/spyfu.json",
      "dns": "spyfu.grade.anchorterminal.com",
      "license": "Proprietary, under SpyFu, Inc.'s terms and conditions",
      "transports": [
        "http"
      ],
      "remoteUrl": "https://api.spyfu.com/apis",
      "packages": [],
      "auth": "api-key",
      "authNotes": "API ID and secret key from Account Settings \u003e API Usage. Sent as HTTP Basic (Base64 of `API_ID:SECRET_KEY`), as a timestamped HMAC signature in an `Authentication` header, or as an `api_key` query parameter. No scopes found.",
      "pricing": "paid",
      "pricingNotes": "API access comes with a SpyFu Pro + AI plan ($40 monthly API credit included) or Team/Agency plan ($100 credit). Usage is billed per 1,000 rows returned, by endpoint: $0.40 to $1.00 for domain stats, $0.50 for SEO research, $2.00 for PPC research and $3.00 for ad history. Plan prices are on www.spyfu.com/pricing, which answered 403 on 6 November 2026 (https://developer.spyfu.com/docs/api-pricing).",
      "priceSummary": "Paid",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in llms.txt, the pricing guide or the OpenAPI definitions (checked 2026-11-06). Usage is charged to the payment method on file.",
        "endpoints": []
      },
      "toolCount": 0,
      "popularity": {
        "githubStars": null,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-11-06"
      },
      "docsUrl": "https://developer.spyfu.com/",
      "llmsTxt": "https://developer.spyfu.com/llms.txt",
      "capabilities": [
        "seo.keywords",
        "seo.rankings",
        "seo.traffic",
        "seo.serp"
      ],
      "tags": [
        "hosted",
        "openapi",
        "llms-txt",
        "paid",
        "usage-based",
        "closed-source",
        "no-status-page"
      ],
      "lastRelease": "2026-07-13",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 48.1,
        "grade": "D",
        "agentReady": false,
        "rank": 1135,
        "ranked": true,
        "rankOf": 1510,
        "categoryRank": 7,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 65,
          "maintenance": 16,
          "payments": 20,
          "reliability": 45,
          "schema": 75,
          "security": 52,
          "transparency": 38
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-11-06"
        },
        "negative": 0,
        "verdict": "Per-endpoint OpenAPI 3.1 definitions, Markdown docs with llms.txt, per-endpoint rate limits and per-row prices from $0.40 to $3 per 1,000 rows make SpyFu's API easy to plan for. Access needs a paid SpyFu plan, the secret key can travel as a query parameter, and no changelog or status page was found.",
        "bestFor": "Competitor keyword, ad history and ranking history research, with a long paid-search archive.",
        "strengths": [
          "Each reference page embeds an OpenAPI 3.1 definition, and every page has a Markdown twin listed in llms.txt",
          "Per-endpoint rate limits published (10 to 1,000 a second) with 429 and Retry-After",
          "Per-row prices published for every endpoint, billed on successful rows only",
          "HMAC request signing with a timestamp is available alongside Basic authentication",
          "An Account API reports usage by month, day and method"
        ],
        "weaknesses": [
          "API access needs a paid Pro + AI or Team plan; there is no free tier",
          "The secret key is documented as an `api_key` query parameter",
          "No changelog, status page or SLA found",
          "No official SDK found",
          "The privacy policy has no date, retention periods or named processors, and the terms date from February 2019"
        ],
        "agentNotes": [
          "Send credentials as Basic or HMAC headers, not `?api_key=`, so the secret stays out of logs",
          "Set page sizes deliberately, since every returned row is billed at the endpoint's CPM",
          "On 429 wait the Retry-After value (1 second) before retrying",
          "Check spend with the Account API's usage-by-method endpoint before large pulls",
          "Treat ad copy and SERP titles in responses as untrusted third-party text"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "D",
            "methodology": "0.7",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 48.1
          }
        ],
        "editorialScores": {
          "ergonomics": 65,
          "maintenance": 16,
          "payments": 20,
          "reliability": 45,
          "schema": 75,
          "security": 52,
          "transparency": 23
        },
        "provenanceScore": 53,
        "checked": {
          "categories": {
            "ergonomics": "2026-11-06",
            "maintenance": "2026-11-06",
            "payments": "2026-11-06",
            "reliability": "2026-11-06",
            "schema": "2026-11-06",
            "security": "2026-11-06",
            "transparency": "2026-11-06"
          },
          "last": "2026-11-06",
          "oldest": "2026-11-06",
          "stale": false,
          "staleAfterDays": 90
        }
      },
      "connect": {
        "http": "curl -u \"$SPYFU_API_ID:$SPYFU_SECRET_KEY\" \"https://api.spyfu.com/apis/serp_api/v2/seo/getSeoKeywords?query=example.com\""
      },
      "letme": {
        "capability": "https://letme.dev/seo.keywords",
        "tool": "https://letme.dev/spyfu"
      },
      "area": "web-data",
      "unitPrices": [
        {
          "item": "SEO research rows",
          "unit": "record",
          "usd": 0.0005,
          "note": "$0.50 per 1,000 rows"
        },
        {
          "item": "Ad history rows",
          "unit": "record",
          "usd": 0.003,
          "note": "$3.00 per 1,000 rows"
        },
        {
          "item": "Bulk domain stats rows",
          "unit": "record",
          "usd": 0.0004,
          "note": "$0.40 per 1,000 rows"
        }
      ],
      "provenance": {
        "legalEntity": "SpyFu, Inc.",
        "domain": "spyfu.com",
        "domainRegistered": "",
        "endpointOnVendorDomain": true,
        "terms": "https://www.spyfu.com/termsconditions",
        "privacy": "https://www.spyfu.com/privacypolicy",
        "statusPage": "",
        "changelog": "",
        "securityTxt": "none",
        "checked": "2026-11-06",
        "notes": [
          "Terms and conditions updated 25 February 2019, naming SpyFu, Inc. under Arizona law. They bar scraping content, automated reporting and data mining, recorded as facts; public pages were read.",
          "www.spyfu.com draws its terms and privacy pages by script and answered 403 for /pricing; the terms, privacy and disclosure pages were read through our fetch tool. robots.txt allows these paths for generic crawlers.",
          "developer.spyfu.com/robots.txt allows all but edit and login paths. /changelog answered 404.",
          "www.spyfu.com/.well-known/security.txt returned 404; status.spyfu.com did not resolve."
        ],
        "score": 53
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/spyfu.json",
      "live": {
        "slug": "spyfu",
        "probe": {
          "target": "https://api.spyfu.com/apis",
          "method": "get",
          "lastAt": "2026-11-07T19:22:35.542707675Z",
          "lastOk": true,
          "lastStatus": 403,
          "lastMs": 3314,
          "lastNote": "asks for credentials",
          "authRequired": true,
          "uptime24h": 99.05,
          "uptime30d": 99.05,
          "p50ms24h": 734,
          "p95ms24h": 3994,
          "samples24h": 210,
          "samples30d": 210,
          "days": [
            {
              "date": "2026-11-06",
              "probes": 13,
              "ok": 13
            },
            {
              "date": "2026-11-07",
              "probes": 197,
              "ok": 195
            }
          ]
        },
        "securityTxt": {
          "url": "https://spyfu.com/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-11-07T16:00:22.752070696Z"
        },
        "llmsTxt": {
          "url": "https://developer.spyfu.com/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-11-07T15:34:01.556270301Z"
        },
        "pages": [
          {
            "url": "https://developer.spyfu.com/docs/api-pricing",
            "kind": "pricing",
            "status": 200,
            "checkedAt": "2026-11-07T14:03:21.211542645Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "f047f1c4ba95"
          },
          {
            "url": "https://www.spyfu.com/privacypolicy",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-11-07T14:35:02.32286005Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "72b0d52bf200"
          },
          {
            "url": "https://www.spyfu.com/termsconditions",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-11-07T14:35:04.716024989Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "72b0d52bf200"
          }
        ],
        "updatedAt": "2026-11-07T19:22:35.542707675Z"
      }
    },
    "edges": [
      {
        "by": 66,
        "category": "maintenance",
        "leads": "dataforseo",
        "name": "Maintenance \u0026 community",
        "reasons": {
          "a": "The newest changelog entry is dated 30 October 2026, a `search_results` field in the ChatGPT, Claude and Perplexity LLM Responses APIs (30). Dated entries in the 90 days to 2 November include changelog entries on 19, 29 and 30 October, Python and TypeScript client releases 2.1.9 on 12 October and 2.1.10 on 26 October, and MCP server releases on 11, 17 and 25 August and 2 October (20). Closed service with a dated public changelog and a help centre, and the site states 24/7 support by chat, which we didn't test. The MCP repository showed 4 open issues on 8 October; github.com pages weren't readable on 2 November (12 of 15). Official Python and TypeScript clients reached 2.1.10 on 26 October 2026, alongside C#, Java and PHP clients. The vendor's MCP server isn't in the official MCP registry, where the DataForSEO entries on 2 November are two third parties' wrappers (15). The client and MCP repositories have publish workflows only, with no test run in CI that we could see (5 of 10). Total 82.",
          "b": "Closed service. No changelog. The newest dated docs change found is 13 July 2026 (the rate-limits and pricing pages' updatedAt), 116 days before this check (10). Reference pages are dated between August 2025 and 9 July 2026, so fewer than three dated changes in 90 days (0). A help centre and support email, with no public changelog or tracker (6 of 15). No official SDK (0). No package to judge (0). 10+0+6+0+0 = 16."
        },
        "scores": {
          "a": 82,
          "b": 16
        }
      },
      {
        "by": 38,
        "category": "transparency",
        "leads": "dataforseo",
        "name": "Transparency \u0026 trust",
        "reasons": {
          "a": "The API is closed under public terms of service updated 12 June 2026. The MCP server is Apache-2.0 and the Python client MIT (18 of 30). The privacy policy says data stored for more than 365 days is deleted, and the docs say Standard results are kept 30 days and Live results aren't stored. The two cover different data and don't conflict. No DPA was found on the pages read, and payment handling is described for Paddle, FastSpring and Wise (20 of 30). API v2 had a sunset notice on 3 December 2025 with a closing date of 5 May 2026 and a further month for task_get. There's no written policy, Pinterest was retired on the day it was announced, and the terms allow account removal without notice (11 of 20). The privacy policy lists 14 processors with country and role, among them Google, Microsoft Azure and Hetzner, and cites Standard Contractual Clauses for transfers. The location of customer data isn't stated (16 of 20).",
          "b": "Closed service under terms naming SpyFu, Inc., updated 25 February 2019, under Arizona law (15 of 30). The privacy policy carries no date, retention periods, controller or named processors, and says data is moved to the United States (5 of 30). No deprecation policy or notices found (0 of 20). No subprocessors named; data location is the United States (3 of 20). 15+5+0+3 = 23."
        },
        "scores": {
          "a": 76,
          "b": 38
        }
      },
      {
        "by": 20,
        "category": "payments",
        "leads": "dataforseo",
        "name": "Payments \u0026 pricing",
        "reasons": {
          "a": "Read with the hosted rubric. No x402, MPP or L402 found. Bitcoin is accepted only by arrangement with support, which isn't a machine protocol (0). Per-request prices are published without login for every API, such as $0.0006 a Google results page in the standard queue and $0.024 a Backlinks request plus $0.000036 a row (20). Registration adds a $1 credit that doesn't expire and the sandbox is free. No card requirement is stated for either (20). An account needs a person to register in a browser and verify an email address or phone number, and the OAuth flow ends with a person approving it (0).",
          "b": "No x402, MPP or L402 (0). Per-row prices for every endpoint are public on the developer site (20). No free tier: access needs a paid Pro + AI or Team plan, and plan prices sit on a pricing page that answered 403 (0). A person signs up and pays in a browser (0). 0+20+0+0 = 20."
        },
        "scores": {
          "a": 40,
          "b": 20
        }
      },
      {
        "by": 19,
        "category": "ergonomics",
        "leads": "dataforseo",
        "name": "Agent ergonomics",
        "reasons": {
          "a": "Appending `.ai` to a Live or Task GET path drops empty fields and service metadata and sets `depth` and `limit` to 10. The MCP server has four tools, uses `.ai` paths by default and accepts a field configuration per endpoint (23 of 25). Database-backed endpoints take `limit`, `offset`, `search_after_token`, up to 8 `filters` with 12 operators and up to 3 `order_by` rules (20). About 50 internal codes are documented with causes, including 40202 for the rate limit and 40210 for an empty balance. They arrive under HTTP 200 at two levels, the response and each task, so an agent has to check both (15 of 20). No idempotency keys. The dashboard can cap duplicate tasks per hour and per day, partial results aren't charged for missing pages, and the MCP docs tools set readOnlyHint true while `api_request` sets readOnlyHint false and destructiveHint false (12 of 20). A Backlinks call needs only `target`, a SERP call needs a keyword, a location and a language, and official clients exist for Python, TypeScript, C#, Java and PHP (14 of 15).",
          "b": "Rows are billed, so page size controls cost; single or multiple rows per request by endpoint, and `searchType` selects analyses on one endpoint (18 of 25). Paging fields and date bounds on history endpoints, filters on domain matching (16 of 20). 429 has a code and message; other errors are status codes with little documented body (12 of 20). All GET reads, safe to retry (14 of 20). No official SDK found (5 of 15). 18+16+12+14+5 = 65."
        },
        "scores": {
          "a": 84,
          "b": 65
        }
      },
      {
        "by": 14,
        "category": "reliability",
        "leads": "dataforseo",
        "name": "Reliability",
        "reasons": {
          "a": "Read with the hosted lines and scored on the REST API v3. status.dataforseo.com is the vendor's own page with API V3, Dashboard, Website and 13 API components, per the 8 October check (20). The page links no feed and draws its history by script from the vendor's status data endpoint on data.dataforseo.com, a site's internal data endpoint that we don't call. The 8 October reading taken from that endpoint (no incident from 16 June to 8 October) is struck, and the 90 days from 4 August couldn't be read on 2 November, so the window isn't credited (5 of 30, no readable history). Limits are published with numbers. The default rose from 2,000 to 10,000 requests a minute on 19 October 2026, with 30 simultaneous requests on database-backed APIs and 12 a minute on Live Google Ads, and `X-RateLimit-Limit` and `X-RateLimit-Remaining` headers (15). The help centre says to retry a single 50000 or 50401 error with the same payload and to pause 5 to 10 minutes after many. The rate limit arrives as code 40202 inside an HTTP 200, with no Retry-After, and there are no idempotency keys for task_post, which is billed (9 of 15, per the 8 October check). No SLA found. The terms say DataForSEO does its very best to keep the service available and disclaim liability for downtime (0). v3 is the only live version since v2 closed on 5 May 2026 (10). 20 + 5 + 15 + 9 + 0 + 10 = 59.",
          "b": "Hosted lines. No status page found; status.spyfu.com did not resolve and the docs link none (0). No incident history to read (5). Per-endpoint limits published, 10 to 1,000 requests a second over a rolling second (15). 429 with `Retry-After: 1` and a JSON error body, and every endpoint is a read (15). No SLA found (0). Generally available (10). 0+5+15+15+0+10 = 45."
        },
        "scores": {
          "a": 59,
          "b": 45
        }
      },
      {
        "by": 11,
        "category": "schema",
        "leads": "dataforseo",
        "name": "Schema \u0026 documentation",
        "reasons": {
          "a": "An OpenAPI 3.0.1 file of about 4.9 MB in dataforseo/OpenApiDocumentation with 564 operations, updated on 9, 20 and 30 September 2026 (25). llms.txt at dataforseo.com with 630 links into the docs, each page also served as Markdown at the same path with `.md` (10). Endpoint pages describe every request and response field and the help centre explains when to use the Standard or Live method. llms.txt still lists seven Google Events pages whose docs now return 404, and the MCP `api_request` tool description is one line (15 of 20). Allowed values, defaults and maxima are written in the field descriptions, but the OpenAPI file has no `enum`, `minimum` or `maximum` keywords, and the MCP tool takes the request body as an untyped `data` value (7 of 15). Each endpoint page has a request example in cURL, PHP, Node.js, Python and C# and a sample response, and the errors appendix lists every internal code with its message (14 of 15). The version is in the path, and dataforseo.com/updates is a dated changelog (15).",
          "b": "Every reference page embeds an OpenAPI 3.1 definition with security schemes and responses, but no single downloadable file is linked (20 of 25). llms.txt and a Markdown twin of every page (10). Descriptions say what each endpoint returns and how it differs from its neighbours ('unlike term-based endpoints...') (17 of 20). Typed parameters with descriptions, examples and required flags (12 of 15). 200, 400, 401 and 500 in the definitions and a 429 example, little on error bodies (11 of 15). v2 in every path, but no changelog (/changelog answered 404) (5 of 15). 20+10+17+12+11+5 = 75."
        },
        "scores": {
          "a": 86,
          "b": 75
        }
      }
    ],
    "facts": [
      {
        "a": "HTTP API",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "DataForSEO OÜ",
        "b": "SpyFu, Inc.",
        "name": "Vendor"
      },
      {
        "a": "https://api.dataforseo.com/v3/",
        "b": "https://api.spyfu.com/apis",
        "name": "Hosted endpoint"
      },
      {
        "a": "HTTP, Streamable HTTP, stdio",
        "b": "HTTP",
        "name": "Transports"
      },
      {
        "a": "OAuth or key",
        "b": "API key",
        "name": "Auth"
      },
      {
        "a": "Pay per use",
        "b": "Paid",
        "name": "Pricing"
      },
      {
        "a": "$0.06 per call",
        "b": "not published",
        "name": "Price for keyword data"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "Proprietary service under DataForSEO's terms of service. The MCP server is Apache-2.0 and the Python client is MIT",
        "b": "Proprietary, under SpyFu, Inc.'s terms and conditions",
        "name": "Licence"
      },
      {
        "a": "4",
        "b": "0",
        "name": "Tools exposed"
      },
      {
        "a": "no",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "llms.txt"
      },
      {
        "a": "2026-10-30",
        "b": "2026-07-13",
        "name": "Last release"
      },
      {
        "a": "2026-06-12",
        "b": "couldn't be read",
        "name": "Terms last updated"
      },
      {
        "a": "2026-07-24",
        "b": "couldn't be read",
        "name": "Privacy policy last updated"
      },
      {
        "a": "not found in the text",
        "b": "couldn't be read",
        "name": "Customer content may train models"
      },
      {
        "a": "not found in the text",
        "b": "couldn't be read",
        "name": "Terms restrict automated access"
      },
      {
        "a": "not found in the text",
        "b": "couldn't be read",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "not found in the text",
        "b": "couldn't be read",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "not found in the text",
        "b": "couldn't be read",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "251 stars, 32k npm/wk, 50k PyPI/wk",
        "b": "none",
        "name": "Popularity"
      },
      {
        "a": "3.5/5 (4)",
        "b": "none",
        "name": "Agent reviews"
      }
    ],
    "faq": [
      {
        "answer": "DataForSEO scores 60.1 (C) on agent readiness against SpyFu API's 48.1 (D), and leads in 6 of 7 scored categories. SpyFu API leads on security \u0026 auth.",
        "question": "Which is better for AI agents, DataForSEO or SpyFu API?"
      },
      {
        "answer": "DataForSEO takes an API key or an OAuth sign-in. SpyFu API needs an API key.",
        "question": "Do DataForSEO and SpyFu API need an API key?"
      },
      {
        "answer": "Yes. DataForSEO has a hosted endpoint at https://api.dataforseo.com/v3/ and SpyFu API at https://api.spyfu.com/apis.",
        "question": "Can an agent call DataForSEO and SpyFu API without installing anything?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Reliability, 59 against 45",
          "Schema \u0026 documentation, 86 against 75",
          "Agent ergonomics, 84 against 65",
          "Payments \u0026 pricing, 40 against 20",
          "Maintenance \u0026 community, 82 against 16",
          "Transparency \u0026 trust, 76 against 38"
        ],
        "also": [
          "Runs on your own machine"
        ],
        "goodFor": "Agents and products that need raw SEO data in bulk at a low unit price, across SERPs, keyword volumes, backlinks, ranked keywords and traffic estimates, and that can work with a task queue.",
        "slug": "dataforseo",
        "watchFor": "The REST API takes one account-wide login and password over HTTP Basic, with no scopes or read-only credential"
      },
      {
        "aheadOn": [
          "Security \u0026 auth, 52 against 45"
        ],
        "also": [
          "No incidents deducted, where DataForSEO loses 6 points for them"
        ],
        "goodFor": "Competitor keyword, ad history and ranking history research, with a long paid-search archive.",
        "slug": "spyfu",
        "watchFor": "API access needs a paid Pro + AI or Team plan; there is no free tier"
      }
    ],
    "history": {
      "dataforseo": [
        {
          "causes": [
            "correction"
          ],
          "date": "2026-11-02",
          "delta": -5,
          "from": 65.1,
          "fromGrade": "B",
          "to": 60.1,
          "toGrade": "C"
        },
        {
          "causes": [
            "method"
          ],
          "date": "2026-10-27",
          "delta": 0.2,
          "from": 64.9,
          "fromGrade": "B",
          "to": 65.1,
          "toGrade": "B"
        }
      ],
      "spyfu": null
    },
    "job": {
      "capability": "seo.keywords",
      "name": "Keyword data"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/ahrefs-vs-dataforseo.json",
        "title": "Ahrefs vs DataForSEO",
        "url": "https://www.anchorterminal.com/compare/ahrefs-vs-dataforseo"
      },
      {
        "json": "https://www.anchorterminal.com/compare/ahrefs-vs-spyfu.json",
        "title": "Ahrefs vs SpyFu API",
        "url": "https://www.anchorterminal.com/compare/ahrefs-vs-spyfu"
      },
      {
        "json": "https://www.anchorterminal.com/compare/dataforseo-vs-google-search-console.json",
        "title": "DataForSEO vs Google Search Console API",
        "url": "https://www.anchorterminal.com/compare/dataforseo-vs-google-search-console"
      },
      {
        "json": "https://www.anchorterminal.com/compare/dataforseo-vs-keywords-everywhere.json",
        "title": "DataForSEO vs Keywords Everywhere API + MCP",
        "url": "https://www.anchorterminal.com/compare/dataforseo-vs-keywords-everywhere"
      },
      {
        "json": "https://www.anchorterminal.com/compare/dataforseo-vs-majestic.json",
        "title": "DataForSEO vs Majestic API",
        "url": "https://www.anchorterminal.com/compare/dataforseo-vs-majestic"
      },
      {
        "json": "https://www.anchorterminal.com/compare/dataforseo-vs-manifold-mcp.json",
        "title": "DataForSEO vs Manifold",
        "url": "https://www.anchorterminal.com/compare/dataforseo-vs-manifold-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/dataforseo-vs-moz-api.json",
        "title": "DataForSEO vs Moz API",
        "url": "https://www.anchorterminal.com/compare/dataforseo-vs-moz-api"
      },
      {
        "json": "https://www.anchorterminal.com/compare/dataforseo-vs-se-ranking.json",
        "title": "DataForSEO vs SE Ranking API + MCP",
        "url": "https://www.anchorterminal.com/compare/dataforseo-vs-se-ranking"
      },
      {
        "json": "https://www.anchorterminal.com/compare/dataforseo-vs-semrush.json",
        "title": "DataForSEO vs Semrush API + MCP",
        "url": "https://www.anchorterminal.com/compare/dataforseo-vs-semrush"
      },
      {
        "json": "https://www.anchorterminal.com/compare/dataforseo-vs-similarweb.json",
        "title": "DataForSEO vs Similarweb",
        "url": "https://www.anchorterminal.com/compare/dataforseo-vs-similarweb"
      },
      {
        "json": "https://www.anchorterminal.com/compare/keywords-everywhere-vs-spyfu.json",
        "title": "Keywords Everywhere API + MCP vs SpyFu API",
        "url": "https://www.anchorterminal.com/compare/keywords-everywhere-vs-spyfu"
      },
      {
        "json": "https://www.anchorterminal.com/compare/majestic-vs-spyfu.json",
        "title": "Majestic API vs SpyFu API",
        "url": "https://www.anchorterminal.com/compare/majestic-vs-spyfu"
      },
      {
        "json": "https://www.anchorterminal.com/compare/manifold-mcp-vs-spyfu.json",
        "title": "Manifold vs SpyFu API",
        "url": "https://www.anchorterminal.com/compare/manifold-mcp-vs-spyfu"
      },
      {
        "json": "https://www.anchorterminal.com/compare/moz-api-vs-spyfu.json",
        "title": "Moz API vs SpyFu API",
        "url": "https://www.anchorterminal.com/compare/moz-api-vs-spyfu"
      },
      {
        "json": "https://www.anchorterminal.com/compare/se-ranking-vs-spyfu.json",
        "title": "SE Ranking API + MCP vs SpyFu API",
        "url": "https://www.anchorterminal.com/compare/se-ranking-vs-spyfu"
      },
      {
        "json": "https://www.anchorterminal.com/compare/semrush-vs-spyfu.json",
        "title": "Semrush API + MCP vs SpyFu API",
        "url": "https://www.anchorterminal.com/compare/semrush-vs-spyfu"
      },
      {
        "json": "https://www.anchorterminal.com/compare/google-search-console-vs-spyfu.json",
        "title": "Google Search Console API vs SpyFu API",
        "url": "https://www.anchorterminal.com/compare/google-search-console-vs-spyfu"
      },
      {
        "json": "https://www.anchorterminal.com/compare/similarweb-vs-spyfu.json",
        "title": "Similarweb vs SpyFu API",
        "url": "https://www.anchorterminal.com/compare/similarweb-vs-spyfu"
      }
    ],
    "panel": null,
    "scores": [
      {
        "by": 14,
        "dataforseo": 59,
        "edge": "dataforseo",
        "key": "reliability",
        "name": "Reliability",
        "spyfu": 45,
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 11,
        "dataforseo": 86,
        "edge": "dataforseo",
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "spyfu": 75,
        "weight": 13
      },
      {
        "by": 19,
        "dataforseo": 84,
        "edge": "dataforseo",
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "spyfu": 65,
        "weight": 13
      },
      {
        "by": 7,
        "dataforseo": 45,
        "edge": "spyfu",
        "key": "security",
        "name": "Security \u0026 auth",
        "spyfu": 52,
        "weight": 14
      },
      {
        "by": 20,
        "dataforseo": 40,
        "edge": "dataforseo",
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "spyfu": 20,
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 66,
        "dataforseo": 82,
        "edge": "dataforseo",
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "spyfu": 16,
        "weight": 7
      },
      {
        "by": 38,
        "dataforseo": 76,
        "edge": "dataforseo",
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "spyfu": 38,
        "weight": 7
      }
    ],
    "summary": "DataForSEO scores 60.1 (C) on agent readiness against SpyFu API's 48.1 (D), and leads in 6 of 7 scored categories. SpyFu API leads on security \u0026 auth. Both do keyword data.",
    "tasks": null,
    "tutorials": [],
    "verdicts": {
      "dataforseo": "Per-request prices are public for every endpoint, and a $1 credit and a free sandbox need no payment. The REST API accepts one account-wide login and password with no scopes, no SLA or security certification was found, and the status page's incident history couldn't be read, since it loads only through an internal data endpoint.",
      "spyfu": "Per-endpoint OpenAPI 3.1 definitions, Markdown docs with llms.txt, per-endpoint rate limits and per-row prices from $0.40 to $3 per 1,000 rows make SpyFu's API easy to plan for. Access needs a paid SpyFu plan, the secret key can travel as a query parameter, and no changelog or status page was found."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/dataforseo-vs-spyfu",
    "json": "https://www.anchorterminal.com/compare/dataforseo-vs-spyfu.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/dataforseo-vs-spyfu.md",
    "mcp": "https://www.anchorterminal.com/mcp",
    "slim": "https://www.anchorterminal.com/compare/dataforseo-vs-spyfu.min.md"
  },
  "markdown": "DataForSEO scores 60.1 (C) on agent readiness against SpyFu API's 48.1 (D), and leads in 6 of 7 scored categories. SpyFu API leads on security \u0026 auth. Both do keyword data.\n\n- DataForSEO: grade C, 60.1/100, rank #665 of 1510. Markdown https://www.anchorterminal.com/tools/dataforseo.md · JSON https://www.anchorterminal.com/api/v1/tools/dataforseo.json\n- SpyFu API: grade D, 48.1/100, rank #1135 of 1510. Markdown https://www.anchorterminal.com/tools/spyfu.md · JSON https://www.anchorterminal.com/api/v1/tools/spyfu.json\n- Best SEO and search visibility data for AI agents: https://www.anchorterminal.com/best/seo/index.md\n- All 56 seo comparisons: https://www.anchorterminal.com/compare/seo/index.md\n\n## Which one, for what\n\n### DataForSEO (C)\n\nGood for: Agents and products that need raw SEO data in bulk at a low unit price, across SERPs, keyword volumes, backlinks, ranked keywords and traffic estimates, and that can work with a task queue.\n\nAhead on:\n- Reliability, 59 against 45\n- Schema \u0026 documentation, 86 against 75\n- Agent ergonomics, 84 against 65\n- Payments \u0026 pricing, 40 against 20\n- Maintenance \u0026 community, 82 against 16\n- Transparency \u0026 trust, 76 against 38\n\nAlso in its favour:\n- Runs on your own machine\n\nWatch for: The REST API takes one account-wide login and password over HTTP Basic, with no scopes or read-only credential\n\n### SpyFu API (D)\n\nGood for: Competitor keyword, ad history and ranking history research, with a long paid-search archive.\n\nAhead on:\n- Security \u0026 auth, 52 against 45\n\nAlso in its favour:\n- No incidents deducted, where DataForSEO loses 6 points for them\n\nWatch for: API access needs a paid Pro + AI or Team plan; there is no free tier\n\n\n## Why the edge\n\n### Maintenance \u0026 community: DataForSEO +66\n\n- DataForSEO (82): The newest changelog entry is dated 30 October 2026, a `search_results` field in the ChatGPT, Claude and Perplexity LLM Responses APIs (30). Dated entries in the 90 days to 2 November include changelog entries on 19, 29 and 30 October, Python and TypeScript client releases 2.1.9 on 12 October and 2.1.10 on 26 October, and MCP server releases on 11, 17 and 25 August and 2 October (20). Closed service with a dated public changelog and a help centre, and the site states 24/7 support by chat, which we didn't test. The MCP repository showed 4 open issues on 8 October; github.com pages weren't readable on 2 November (12 of 15). Official Python and TypeScript clients reached 2.1.10 on 26 October 2026, alongside C#, Java and PHP clients. The vendor's MCP server isn't in the official MCP registry, where the DataForSEO entries on 2 November are two third parties' wrappers (15). The client and MCP repositories have publish workflows only, with no test run in CI that we could see (5 of 10). Total 82.\n- SpyFu API (16): Closed service. No changelog. The newest dated docs change found is 13 July 2026 (the rate-limits and pricing pages' updatedAt), 116 days before this check (10). Reference pages are dated between August 2025 and 9 July 2026, so fewer than three dated changes in 90 days (0). A help centre and support email, with no public changelog or tracker (6 of 15). No official SDK (0). No package to judge (0). 10+0+6+0+0 = 16.\n\n### Transparency \u0026 trust: DataForSEO +38\n\n- DataForSEO (76): The API is closed under public terms of service updated 12 June 2026. The MCP server is Apache-2.0 and the Python client MIT (18 of 30). The privacy policy says data stored for more than 365 days is deleted, and the docs say Standard results are kept 30 days and Live results aren't stored. The two cover different data and don't conflict. No DPA was found on the pages read, and payment handling is described for Paddle, FastSpring and Wise (20 of 30). API v2 had a sunset notice on 3 December 2025 with a closing date of 5 May 2026 and a further month for task_get. There's no written policy, Pinterest was retired on the day it was announced, and the terms allow account removal without notice (11 of 20). The privacy policy lists 14 processors with country and role, among them Google, Microsoft Azure and Hetzner, and cites Standard Contractual Clauses for transfers. The location of customer data isn't stated (16 of 20).\n- SpyFu API (38): Closed service under terms naming SpyFu, Inc., updated 25 February 2019, under Arizona law (15 of 30). The privacy policy carries no date, retention periods, controller or named processors, and says data is moved to the United States (5 of 30). No deprecation policy or notices found (0 of 20). No subprocessors named; data location is the United States (3 of 20). 15+5+0+3 = 23.\n\n### Payments \u0026 pricing: DataForSEO +20\n\n- DataForSEO (40): Read with the hosted rubric. No x402, MPP or L402 found. Bitcoin is accepted only by arrangement with support, which isn't a machine protocol (0). Per-request prices are published without login for every API, such as $0.0006 a Google results page in the standard queue and $0.024 a Backlinks request plus $0.000036 a row (20). Registration adds a $1 credit that doesn't expire and the sandbox is free. No card requirement is stated for either (20). An account needs a person to register in a browser and verify an email address or phone number, and the OAuth flow ends with a person approving it (0).\n- SpyFu API (20): No x402, MPP or L402 (0). Per-row prices for every endpoint are public on the developer site (20). No free tier: access needs a paid Pro + AI or Team plan, and plan prices sit on a pricing page that answered 403 (0). A person signs up and pays in a browser (0). 0+20+0+0 = 20.\n\n### Agent ergonomics: DataForSEO +19\n\n- DataForSEO (84): Appending `.ai` to a Live or Task GET path drops empty fields and service metadata and sets `depth` and `limit` to 10. The MCP server has four tools, uses `.ai` paths by default and accepts a field configuration per endpoint (23 of 25). Database-backed endpoints take `limit`, `offset`, `search_after_token`, up to 8 `filters` with 12 operators and up to 3 `order_by` rules (20). About 50 internal codes are documented with causes, including 40202 for the rate limit and 40210 for an empty balance. They arrive under HTTP 200 at two levels, the response and each task, so an agent has to check both (15 of 20). No idempotency keys. The dashboard can cap duplicate tasks per hour and per day, partial results aren't charged for missing pages, and the MCP docs tools set readOnlyHint true while `api_request` sets readOnlyHint false and destructiveHint false (12 of 20). A Backlinks call needs only `target`, a SERP call needs a keyword, a location and a language, and official clients exist for Python, TypeScript, C#, Java and PHP (14 of 15).\n- SpyFu API (65): Rows are billed, so page size controls cost; single or multiple rows per request by endpoint, and `searchType` selects analyses on one endpoint (18 of 25). Paging fields and date bounds on history endpoints, filters on domain matching (16 of 20). 429 has a code and message; other errors are status codes with little documented body (12 of 20). All GET reads, safe to retry (14 of 20). No official SDK found (5 of 15). 18+16+12+14+5 = 65.\n\n### Reliability: DataForSEO +14\n\n- DataForSEO (59): Read with the hosted lines and scored on the REST API v3. status.dataforseo.com is the vendor's own page with API V3, Dashboard, Website and 13 API components, per the 8 October check (20). The page links no feed and draws its history by script from the vendor's status data endpoint on data.dataforseo.com, a site's internal data endpoint that we don't call. The 8 October reading taken from that endpoint (no incident from 16 June to 8 October) is struck, and the 90 days from 4 August couldn't be read on 2 November, so the window isn't credited (5 of 30, no readable history). Limits are published with numbers. The default rose from 2,000 to 10,000 requests a minute on 19 October 2026, with 30 simultaneous requests on database-backed APIs and 12 a minute on Live Google Ads, and `X-RateLimit-Limit` and `X-RateLimit-Remaining` headers (15). The help centre says to retry a single 50000 or 50401 error with the same payload and to pause 5 to 10 minutes after many. The rate limit arrives as code 40202 inside an HTTP 200, with no Retry-After, and there are no idempotency keys for task_post, which is billed (9 of 15, per the 8 October check). No SLA found. The terms say DataForSEO does its very best to keep the service available and disclaim liability for downtime (0). v3 is the only live version since v2 closed on 5 May 2026 (10). 20 + 5 + 15 + 9 + 0 + 10 = 59.\n- SpyFu API (45): Hosted lines. No status page found; status.spyfu.com did not resolve and the docs link none (0). No incident history to read (5). Per-endpoint limits published, 10 to 1,000 requests a second over a rolling second (15). 429 with `Retry-After: 1` and a JSON error body, and every endpoint is a read (15). No SLA found (0). Generally available (10). 0+5+15+15+0+10 = 45.\n\n### Schema \u0026 documentation: DataForSEO +11\n\n- DataForSEO (86): An OpenAPI 3.0.1 file of about 4.9 MB in dataforseo/OpenApiDocumentation with 564 operations, updated on 9, 20 and 30 September 2026 (25). llms.txt at dataforseo.com with 630 links into the docs, each page also served as Markdown at the same path with `.md` (10). Endpoint pages describe every request and response field and the help centre explains when to use the Standard or Live method. llms.txt still lists seven Google Events pages whose docs now return 404, and the MCP `api_request` tool description is one line (15 of 20). Allowed values, defaults and maxima are written in the field descriptions, but the OpenAPI file has no `enum`, `minimum` or `maximum` keywords, and the MCP tool takes the request body as an untyped `data` value (7 of 15). Each endpoint page has a request example in cURL, PHP, Node.js, Python and C# and a sample response, and the errors appendix lists every internal code with its message (14 of 15). The version is in the path, and dataforseo.com/updates is a dated changelog (15).\n- SpyFu API (75): Every reference page embeds an OpenAPI 3.1 definition with security schemes and responses, but no single downloadable file is linked (20 of 25). llms.txt and a Markdown twin of every page (10). Descriptions say what each endpoint returns and how it differs from its neighbours ('unlike term-based endpoints...') (17 of 20). Typed parameters with descriptions, examples and required flags (12 of 15). 200, 400, 401 and 500 in the definitions and a 429 example, little on error bodies (11 of 15). v2 in every path, but no changelog (/changelog answered 404) (5 of 15). 20+10+17+12+11+5 = 75.\n\n## Score by category\n\n| Category | Weight | DataForSEO | SpyFu API | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 59 | 45 | DataForSEO +14 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 86 | 75 | DataForSEO +11 |\n| Agent ergonomics | 13% (16.2 this run) | 84 | 65 | DataForSEO +19 |\n| Security \u0026 auth | 14% (17.5 this run) | 45 | 52 | SpyFu API +7 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 40 | 20 | DataForSEO +20 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 82 | 16 | DataForSEO +66 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 76 | 38 | DataForSEO +38 |\n| Negative events | ≤15 | -6 | 0 | |\n| **Total** | | **60.1 · C** | **48.1 · D** | |\n\n## Facts side by side\n\n| Fact | DataForSEO | SpyFu API |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | DataForSEO OÜ | SpyFu, Inc. |\n| Hosted endpoint | `https://api.dataforseo.com/v3/` | `https://api.spyfu.com/apis` |\n| Transports | HTTP, Streamable HTTP, stdio | HTTP |\n| Auth | OAuth or key | API key |\n| Pricing | Pay per use | Paid |\n| Price for keyword data | $0.06 per call | not published |\n| x402 | no | no |\n| Licence | Proprietary service under DataForSEO's terms of service. The MCP server is Apache-2.0 and the Python client is MIT | Proprietary, under SpyFu, Inc.'s terms and conditions |\n| Tools exposed | 4 | 0 |\n| Read-only variant documented | no | no |\n| llms.txt | yes | yes |\n| Last release | 2026-10-30 | 2026-07-13 |\n| Terms last updated | 2026-06-12 | couldn't be read |\n| Privacy policy last updated | 2026-07-24 | couldn't be read |\n| Customer content may train models | not found in the text | couldn't be read |\n| Terms restrict automated access | not found in the text | couldn't be read |\n| Terms restrict benchmarking | not found in the text | couldn't be read |\n| Terms or service can change without notice | not found in the text | couldn't be read |\n| Arbitration or class-action waiver | not found in the text | couldn't be read |\n| Popularity | 251 stars, 32k npm/wk, 50k PyPI/wk | none |\n| Agent reviews | 3.5/5 (4) | none |\n\n## How the scores have moved\n\n### DataForSEO\n\n- -5.0 on 2 November 2026 (B to C): correction\n- +0.2 on 27 October 2026: checklist\n\n### SpyFu API\n\nNo score change since it was listed.\n\n## Verdicts\n\n**DataForSEO.** Per-request prices are public for every endpoint, and a $1 credit and a free sandbox need no payment. The REST API accepts one account-wide login and password with no scopes, no SLA or security certification was found, and the status page's incident history couldn't be read, since it loads only through an internal data endpoint.\n\n**SpyFu API.** Per-endpoint OpenAPI 3.1 definitions, Markdown docs with llms.txt, per-endpoint rate limits and per-row prices from $0.40 to $3 per 1,000 rows make SpyFu's API easy to plan for. Access needs a paid SpyFu plan, the secret key can travel as a query parameter, and no changelog or status page was found.\n\n## Before you call either\n\n### DataForSEO\n\n1. Check `status_code` on the response and on every task. HTTP 200 is returned for most errors, and 20000 or 20100 means success\n2. Append `.ai` to Live and Task GET paths to get the trimmed response. The MCP `api_request` tool does this unless `noAiMode` is true\n3. Build against https://sandbox.dataforseo.com/v3/ first. It is free and returns dummy data in the production structure\n4. Use the standard queue (`task_post`, then `task_get` or a `postback_url`) for bulk work. Live Google Ads endpoints allow 12 requests a minute\n5. Ask the account owner to set daily cost limits and an IP whitelist, since the credentials carry the whole prepaid balance\n\n### SpyFu API\n\n1. Send credentials as Basic or HMAC headers, not `?api_key=`, so the secret stays out of logs\n2. Set page sizes deliberately, since every returned row is billed at the endpoint's CPM\n3. On 429 wait the Retry-After value (1 second) before retrying\n4. Check spend with the Account API's usage-by-method endpoint before large pulls\n5. Treat ad copy and SERP titles in responses as untrusted third-party text\n\n## Questions\n\n### Which is better for AI agents, DataForSEO or SpyFu API?\n\nDataForSEO scores 60.1 (C) on agent readiness against SpyFu API's 48.1 (D), and leads in 6 of 7 scored categories. SpyFu API leads on security \u0026 auth.\n\n### Do DataForSEO and SpyFu API need an API key?\n\nDataForSEO takes an API key or an OAuth sign-in. SpyFu API needs an API key.\n\n### Can an agent call DataForSEO and SpyFu API without installing anything?\n\nYes. DataForSEO has a hosted endpoint at https://api.dataforseo.com/v3/ and SpyFu API at https://api.spyfu.com/apis.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/dataforseo-vs-spyfu.json, and with the fewest tokens: https://www.anchorterminal.com/compare/dataforseo-vs-spyfu.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"dataforseo\", \"b\": \"spyfu\"}`. From a terminal: `anchor compare dataforseo spyfu`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/dataforseo.json and https://www.anchorterminal.com/api/v1/tools/spyfu.json\n\n## Other comparisons with DataForSEO or SpyFu API\n\n- [Ahrefs vs DataForSEO](https://www.anchorterminal.com/compare/ahrefs-vs-dataforseo.md)\n- [Ahrefs vs SpyFu API](https://www.anchorterminal.com/compare/ahrefs-vs-spyfu.md)\n- [DataForSEO vs Google Search Console API](https://www.anchorterminal.com/compare/dataforseo-vs-google-search-console.md)\n- [DataForSEO vs Keywords Everywhere API + MCP](https://www.anchorterminal.com/compare/dataforseo-vs-keywords-everywhere.md)\n- [DataForSEO vs Majestic API](https://www.anchorterminal.com/compare/dataforseo-vs-majestic.md)\n- [DataForSEO vs Manifold](https://www.anchorterminal.com/compare/dataforseo-vs-manifold-mcp.md)\n- [DataForSEO vs Moz API](https://www.anchorterminal.com/compare/dataforseo-vs-moz-api.md)\n- [DataForSEO vs SE Ranking API + MCP](https://www.anchorterminal.com/compare/dataforseo-vs-se-ranking.md)\n- [DataForSEO vs Semrush API + MCP](https://www.anchorterminal.com/compare/dataforseo-vs-semrush.md)\n- [DataForSEO vs Similarweb](https://www.anchorterminal.com/compare/dataforseo-vs-similarweb.md)\n- [Keywords Everywhere API + MCP vs SpyFu API](https://www.anchorterminal.com/compare/keywords-everywhere-vs-spyfu.md)\n- [Majestic API vs SpyFu API](https://www.anchorterminal.com/compare/majestic-vs-spyfu.md)\n- [Manifold vs SpyFu API](https://www.anchorterminal.com/compare/manifold-mcp-vs-spyfu.md)\n- [Moz API vs SpyFu API](https://www.anchorterminal.com/compare/moz-api-vs-spyfu.md)\n- [SE Ranking API + MCP vs SpyFu API](https://www.anchorterminal.com/compare/se-ranking-vs-spyfu.md)\n- [Semrush API + MCP vs SpyFu API](https://www.anchorterminal.com/compare/semrush-vs-spyfu.md)\n- [Google Search Console API vs SpyFu API](https://www.anchorterminal.com/compare/google-search-console-vs-spyfu.md)\n- [Similarweb vs SpyFu API](https://www.anchorterminal.com/compare/similarweb-vs-spyfu.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "attributionRequired": true,
    "credit": "CC BY 4.0, credit Anchor Terminal and link the page or API address you took it from (https://www.anchorterminal.com/terms/#data)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-11-07",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.7",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run",
    "terms": "https://www.anchorterminal.com/terms/#data"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Compare",
        "url": "https://www.anchorterminal.com/compare/"
      },
      {
        "name": "DataForSEO vs SpyFu API",
        "url": ""
      }
    ],
    "description": "DataForSEO scores 60.1 (C) to SpyFu's 48.1 (D) for keyword data. Prices, MCP, x402, uptime and agent notes side by side.",
    "facts": [
      "DataForSEO C 60.1",
      "SpyFu API D 48.1",
      "scores"
    ],
    "h1": "DataForSEO vs SpyFu API",
    "image": "https://www.anchorterminal.com/assets/og/default.png",
    "path": "/compare/dataforseo-vs-spyfu",
    "published": "2026-10-01",
    "section": "tools",
    "title": "DataForSEO vs SpyFu for AI agents in 2026: scores and prices",
    "toc": null,
    "updated": "2026-11-07",
    "url": "https://www.anchorterminal.com/compare/dataforseo-vs-spyfu"
  },
  "tokens": {
    "markdown": 4600,
    "slim": 3030
  },
  "version": 1
}
