{
  "data": {
    "a": {
      "slug": "parallel-search-api",
      "name": "Parallel Search and Task APIs",
      "vendor": "Parallel Web Systems",
      "vendorUrl": "https://parallel.ai",
      "kind": "http-api",
      "category": "search",
      "summary": "Parallel's web APIs for agents, covering search, page extraction, asynchronous research tasks, closed-ended decisions answered from current web evidence and an OpenAI-compatible Responses endpoint, with hosted Search and Task MCP servers.",
      "url": "https://www.anchorterminal.com/tools/parallel-search-api",
      "markdownUrl": "https://www.anchorterminal.com/tools/parallel-search-api.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/parallel-search-api.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/parallel-search-api.json",
      "dns": "parallel-search-api.grade.anchorterminal.com",
      "transports": [
        "http",
        "streamable-http"
      ],
      "remoteUrl": "https://api.parallel.ai/v1/search",
      "packages": [
        {
          "registry": "npm",
          "name": "parallel-web"
        },
        {
          "registry": "pypi",
          "name": "parallel-web"
        }
      ],
      "auth": "mixed",
      "authNotes": "API key in the `x-api-key` header. The Search MCP at search.parallel.ai/mcp works anonymously at lower limits, takes a Bearer key, and /mcp-oauth adds OAuth. An OAuth provider can issue keys on behalf of your users.",
      "pricing": "freemium",
      "pricingNotes": "Up to 5,000 free requests a month, with $5 of free credit monthly and up to $80 at signup. Search $1 per 1,000 requests in turbo or fast, $5 in basic or advanced, 10 results included and $1 per 1,000 extra results. Image Search $1 (fast) or $5 (advanced) per 1,000, up to 20 results. Extract $1 per 1,000 URLs. Task $5 (lite) to $2,400 (ultra8x) per 1,000 successful runs. Responses $10 to $250 per 1,000 by reasoning effort. Decisions $1 per 1,000 requests, up to 100 questions a request. Failed runs aren't billed (https://parallel.ai/pricing).",
      "priceSummary": "$1 / 1k req",
      "where": "hosted",
      "x402": {
        "level": "partial",
        "evidence": "Not on api.parallel.ai. A separate gateway at parallelmpp.dev takes x402 (USDC on Base) and MPP (Stripe or Tempo) for search and extract at $0.01 and an ultra task at $0.30. An unauthenticated POST to /api/search returned 402 with an x402 v2 challenge for 10000 base units on eip155:8453 (checked 2026-09-30) (https://docs.parallel.ai/integrations/agentic-payments).",
        "endpoints": [
          {
            "url": "https://parallelmpp.dev/api/search",
            "priceUsd": 0.01,
            "network": "eip155:8453"
          },
          {
            "url": "https://parallelmpp.dev/api/extract",
            "priceUsd": 0.01,
            "network": "eip155:8453"
          },
          {
            "url": "https://parallelmpp.dev/api/task",
            "priceUsd": 0.3,
            "network": "eip155:8453"
          }
        ]
      },
      "toolCount": 6,
      "popularity": {
        "githubStars": 28,
        "npmWeekly": 249803,
        "pypiWeekly": 994376,
        "asOf": "2026-09-30"
      },
      "docsUrl": "https://docs.parallel.ai",
      "llmsTxt": "https://docs.parallel.ai/llms.txt",
      "openapi": "https://docs.parallel.ai/public-openapi.json",
      "registryName": "ai.parallel/search-mcp",
      "capabilities": [
        "web.search",
        "web.fetch",
        "web.extract",
        "search.answer",
        "search.research"
      ],
      "tags": [
        "hosted",
        "freemium",
        "mcp",
        "llms-txt",
        "openapi",
        "x402",
        "python",
        "typescript",
        "async-jobs",
        "webhooks"
      ],
      "lastRelease": "2026-10-28",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 75,
        "grade": "BB",
        "agentReady": true,
        "rank": 73,
        "ranked": true,
        "rankOf": 1486,
        "categoryRank": 4,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 87,
          "maintenance": 87,
          "payments": 75,
          "reliability": 75,
          "schema": 94,
          "security": 45,
          "transparency": 65
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-11-01"
        },
        "negative": 0,
        "verdict": "Fast-mode search at $1 per 1,000 with 10 excerpted results, and a keyless two-tool Search MCP annotated read-only. Search defaults to advanced mode at $5 per 1,000 when `mode` is left out, and the Customer Terms allow training on inputs and outputs.",
        "bestFor": "Agents that mix quick search with long research or enrichment jobs and want one vendor and one bill.",
        "strengths": [
          "Fast-mode search at $1 per 1,000 with 10 excerpted results, and Extract at $1 per 1,000 URLs",
          "Task runs billed only on success, and documented limits of 600 searches and 2,000 task creations a minute",
          "Keyless hosted MCP servers whose search, fetch and decision tools are annotated read-only, plus Bearer and OAuth sign-in",
          "Public OpenAPI, llms.txt and an errors table that says which codes to retry and how",
          "SDK releases several times a month, with CI and a breaking-change check on the Python SDK, and a dated changelog with entries on 19 and 26 October 2026"
        ],
        "weaknesses": [
          "Search defaults to advanced mode at $5 per 1,000 when `mode` is left out",
          "SDKs retry Task creation on 429 and 5xx with no idempotency key",
          "x402 and MPP only through parallelmpp.dev at a flat $0.01, not on api.parallel.ai",
          "Customer Terms let Parallel train on inputs and outputs, and no retention period is stated outside the EU endpoint",
          "No prompt-injection guidance, no security.txt and no public subprocessor list"
        ],
        "agentNotes": [
          "Pass `mode: \"fast\"` on every API search. Without it you pay the advanced rate. On an authenticated MCP connection, pin it with `?mode=fast`",
          "Create Task runs with `max_retries=0` and check for an existing run before retrying",
          "Give an `objective` plus two or three short `search_queries`. That's what ranks the excerpts",
          "On 402, check available balance rather than total. Running tasks reserve credit",
          "Ask for zero data retention or use the EU endpoint before sending private queries. The default terms allow training on them",
          "On Decisions, check each answer's `type` before reading it. A refusal is a 200, not an error, and a predicate is a probability you threshold yourself"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 8,
        "avgRating": 3.6,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "BB",
            "methodology": "0.7",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 75
          }
        ],
        "editorialScores": {
          "ergonomics": 87,
          "maintenance": 87,
          "payments": 75,
          "reliability": 75,
          "schema": 94,
          "security": 45,
          "transparency": 45
        },
        "provenanceScore": 85,
        "checked": {
          "categories": {
            "ergonomics": "2026-11-01",
            "maintenance": "2026-11-01",
            "payments": "2026-11-01",
            "reliability": "2026-11-01",
            "schema": "2026-11-01",
            "security": "2026-11-01",
            "transparency": "2026-11-01"
          },
          "last": "2026-11-01",
          "lastMoved": "2026-10-30",
          "oldest": "2026-11-01",
          "stale": false,
          "staleAfterDays": 90
        }
      },
      "connect": {
        "http": "curl https://api.parallel.ai/v1/search -H \"x-api-key: $PARALLEL_API_KEY\" -H \"Content-Type: application/json\" \\\n  -d '{\"mode\":\"fast\",\"objective\":\"Latest Parallel Web Systems announcements\",\"search_queries\":[\"Parallel Web Systems news\"]}'",
        "claudeCode": "claude mcp add --transport http parallel-search https://search.parallel.ai/mcp",
        "config": {
          "mcpServers": {
            "parallel-search": {
              "headers": {
                "Authorization": "Bearer ${PARALLEL_API_KEY}"
              },
              "url": "https://search.parallel.ai/mcp"
            }
          }
        },
        "x402": "curl -i -X POST https://parallelmpp.dev/api/search -H 'content-type: application/json' -d '{\"query\":\"test\"}'\n# 402 -\u003e pay $0.01 USDC on eip155:8453 (or MPP via Stripe/Tempo) -\u003e resend"
      },
      "letme": {
        "capability": "https://letme.dev/web.search",
        "tool": "https://letme.dev/parallel-search-api"
      },
      "area": "web-data",
      "unitPrices": [
        {
          "item": "Search, turbo or fast",
          "unit": "1k-requests",
          "usd": 1,
          "note": "10 results included"
        },
        {
          "item": "Search, basic or advanced",
          "unit": "1k-requests",
          "usd": 5,
          "note": "advanced is the default mode"
        },
        {
          "item": "Extract",
          "unit": "1k-pages",
          "usd": 1
        },
        {
          "item": "Task, lite processor",
          "unit": "1k-calls",
          "usd": 5
        },
        {
          "item": "Task, pro processor",
          "unit": "1k-calls",
          "usd": 100
        },
        {
          "item": "Responses, medium effort",
          "unit": "1k-requests",
          "usd": 50
        },
        {
          "item": "Decisions, up to 100 questions a request",
          "unit": "1k-requests",
          "usd": 1,
          "note": "docs pricing page, 1 November 2026"
        },
        {
          "item": "x402 search via gateway",
          "unit": "call",
          "usd": 0.01,
          "note": "parallelmpp.dev"
        }
      ],
      "provenance": {
        "legalEntity": "Parallel Web Systems Inc.",
        "domain": "parallel.ai",
        "domainRegistered": "2017-12-16",
        "domainNote": "Registered in 2017 and transferred on 2024-07-01, so the registration date predates the company's use of it.",
        "endpointOnVendorDomain": true,
        "terms": "https://parallel.ai/customer-terms",
        "privacy": "https://parallel.ai/privacy-policy",
        "statusPage": "https://status.parallel.ai",
        "changelog": "https://docs.parallel.ai/resources/changelog",
        "securityTxt": "none",
        "checked": "2026-11-01",
        "score": 85
      },
      "requirements": {
        "setupChecked": true,
        "complianceChecked": true,
        "agentAlone": true,
        "card": "unknown",
        "freeTier": true,
        "minutes": 5,
        "credential": "mixed",
        "hosting": [
          "US",
          "EU"
        ],
        "euResidency": "enterprise",
        "trainsOnData": "unknown",
        "zeroRetention": "enterprise",
        "certifications": [
          "GDPR"
        ],
        "dpa": true,
        "selfHost": "no"
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/parallel-search-api.json",
      "live": {
        "slug": "parallel-search-api",
        "probe": {
          "target": "https://api.parallel.ai/v1/search",
          "method": "get",
          "lastAt": "2026-11-07T18:20:45.797474111Z",
          "lastOk": true,
          "lastStatus": 401,
          "lastMs": 1251,
          "lastNote": "asks for credentials",
          "authRequired": true,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 1156,
          "p95ms24h": 1251,
          "samples24h": 239,
          "samples30d": 7910,
          "days": [
            {
              "date": "2026-10-07",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-08",
              "probes": 268,
              "ok": 268
            },
            {
              "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": 250,
              "ok": 250
            },
            {
              "date": "2026-10-29",
              "probes": 249,
              "ok": 249
            },
            {
              "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": 187,
              "ok": 187
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.parallel.ai",
          "indicator": "none",
          "summary": "All Systems Operational",
          "checkedAt": "2026-11-07T18:21:52.770771808Z"
        },
        "versions": [
          {
            "registry": "mcp-registry",
            "name": "ai.parallel/search-mcp",
            "version": "1.0.0",
            "seenAt": "2026-11-07T18:16:28.95801333Z"
          },
          {
            "registry": "npm",
            "name": "parallel-web",
            "version": "1.3.7",
            "seenAt": "2026-11-06T23:54:39.327146641Z"
          },
          {
            "registry": "pypi",
            "name": "parallel-web",
            "version": "1.3.7",
            "released": "2026-10-23",
            "seenAt": "2026-11-06T23:54:40.221328103Z"
          }
        ],
        "npmWeekly": 499802,
        "pypiWeekly": 1280811,
        "securityTxt": {
          "url": "https://parallel.ai/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-11-07T15:59:47.651524803Z"
        },
        "llmsTxt": {
          "url": "https://docs.parallel.ai/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-11-07T15:33:35.374820292Z"
        },
        "domain": {
          "domain": "parallel.ai",
          "registered": "2017-12-16",
          "source": "https://rdap.identitydigital.services/rdap/domain/parallel.ai",
          "checkedAt": "2026-11-01T14:08:31.990227623Z"
        },
        "pages": [
          {
            "url": "https://docs.parallel.ai/resources/changelog",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-11-07T14:07:25.166885545Z",
            "changedAt": "2026-11-06T13:29:46.487630215Z",
            "fingerprint": "64580beee981"
          },
          {
            "url": "https://parallel.ai/pricing",
            "kind": "pricing",
            "status": 200,
            "checkedAt": "2026-11-07T14:15:57.961317128Z",
            "changedAt": "2026-11-07T14:15:57.961317128Z",
            "fingerprint": "6907599c6534"
          },
          {
            "url": "https://parallel.ai/privacy-policy",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-11-07T14:15:59.73217133Z",
            "changedAt": "2026-11-06T13:37:39.393174208Z",
            "fingerprint": "4f0dd0d135d9"
          },
          {
            "url": "https://parallel.ai/customer-terms",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-11-07T14:15:55.334035778Z",
            "changedAt": "2026-11-06T13:37:35.126347484Z",
            "fingerprint": "0f2621896abb"
          },
          {
            "url": "https://parallel.ai/terms-of-service",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-16T22:28:19.906253644Z",
            "changedAt": "2026-10-15T22:01:22.246898534Z",
            "fingerprint": "5d9bafee0ed2"
          }
        ],
        "mcpTools": {
          "url": "https://search.parallel.ai/mcp",
          "checkedAt": "2026-11-07T01:46:44.757089899Z",
          "status": "ok",
          "protocol": "2026-07-28",
          "tools": [
            {
              "name": "web_search",
              "description": "Purpose: Perform web searches and return\nLLM-friendly results, including excerpts that are usually sufficient to\nanswer directly without a follow-up fetch.\n\nIdeal Use Cases:\n- Answering questions that require fresh or current information\n- Research, comparison, documentation, and troubleshooting questions\n- Broad tasks where multiple `search_queries` can be issued in a single call\n\nFor multiple independent objectives, make one web_search call per objective\nconcurrently. Put related query variations for the same objective in a single\ncall's search_queries list.\n",
              "inputSchema": {
                "properties": {
                  "model_name": {
                    "description": "The identifier of the LLM model making this tool call (e.g. 'claude-opus-4.7', 'gpt-5.5', 'gemini-2.5-pro'). Before the first call, verify the exact active model slug from trusted runtime/session metadata or active client configuration. Pass the full slug verbatim; never shorten or substitute a model-family alias like 'gpt-5'. Used for product analytics only; does not affect search behavior.",
                    "maxLength": 100,
                    "type": "string"
                  },
                  "objective": {
                    "description": "Natural-language description of what the web search is trying to find.\nTry to make the search objective atomic, looking for a specific piece of information. May include guidance about preferred sources or freshness.",
                    "title": "Objective",
                    "type": "string"
                  },
                  "search_queries": {
                    "description": "Concise keyword search queries, 3-6 words\neach. They may use site: with a bare domain (such as site:example.com), but\nnever a URL path after the domain and never quoted phrases. At least one query\nis required; provide 2-3 for best results. For broad tasks, you can include\nmultiple related queries in a single call instead of chaining web_search\ncalls. The queries should be related to the objective.",
                    "items": {
                      "type": "string"
                    },
                    "title": "Search Queries",
                    "type": "array"
                  },
                  "session_id": {
                    "description": "Stable identifier for the current conversation. Generate a random value (UUID or 32+ character hex string) at the start of your session and reuse the exact same value on every web_search / web_fetch call. Do NOT change it between turns. Used for free-tier rate limiting and correlating your tool calls in our logs; ignored on paid-tier keys.",
                    "maxLength": 100,
                    "type": "string"
                  }
                },
                "required": [
                  "objective",
                  "search_queries"
                ],
                "title": "v1_search_toolArguments",
                "type": "object"
              },
              "outputSchema": {
                "$defs": {
                  "UsageItem": {
                    "description": "Usage item for a single operation.",
                    "properties": {
                      "count": {
                        "description": "Count of the SKU.",
                        "examples": [
                          1
                        ],
                        "title": "Count",
                        "type": "integer"
                      },
                      "name": {
                        "description": "Name of the SKU.",
                        "examples": [
                          "sku_search",
                          "sku_extract_excerpts"
                        ],
                        "title": "Name",
                        "type": "string"
                      }
                    },
                    "required": [
                      "name",
                      "count"
                    ],
                    "title": "UsageItem",
                    "type": "object"
                  },
                  "V1WebSearchResult": {
                    "description": "A single search result from the web search API.",
                    "properties": {
                      "excerpts": {
                        "description": "Relevant excerpted content from the URL, formatted as markdown.",
                        "items": {
                          "type": "string"
                        },
                        "title": "Excerpts",
                        "type": "array"
                      },
                      "publish_date": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "default": null,
                        "description": "Publish date of the webpage in YYYY-MM-DD format, if available.",
                        "title": "Publish Date"
                      },
                      "title": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "default": null,
                        "description": "Title of the webpage, if available.",
                        "title": "Title"
                      },
                      "url": {
                        "description": "URL associated with the search result.",
                        "title": "Url",
                        "type": "string"
                      }
                    },
                    "required": [
                      "url",
                      "excerpts"
                    ],
                    "title": "V1WebSearchResult",
                    "type": "object"
                  },
                  "Warning": {
                    "description": "Human-readable message for a task.",
                    "properties": {
                      "detail": {
                        "anyOf": [
                          {
                            "additionalProperties": true,
                            "type": "object"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "default": null,
                        "description": "Optional detail supporting the warning.",
                        "title": "Detail"
                      },
                      "message": {
                        "description": "Human-readable message.",
                        "title": "Message",
                        "type": "string"
                      },
                      "type": {
                        "description": "Type of warning. Note that adding new warning types is considered a backward-compatible change.",
                        "enum": [
                          "spec_validation_warning",
                          "input_validation_warning",
                          "warning"
                        ],
                        "examples": [
                          "spec_validation_warning",
                          "input_validation_warning"
                        ],
                        "title": "Type",
                        "type": "string"
                      }
                    },
                    "required": [
                      "type",
                      "message"
                    ],
                    "title": "Warning",
                    "type": "object"
                  }
                },
                "description": "Search response.",
                "properties": {
                  "results": {
                    "description": "A list of search results, ordered by decreasing relevance.",
                    "items": {
                      "$ref": "#/$defs/V1WebSearchResult"
                    },
                    "title": "Results",
                    "type": "array"
                  },
                  "search_id": {
                    "description": "Search ID. Example: `search_cad0a6d2dec046bd95ae900527d880e7`",
                    "title": "Search Id",
                    "type": "string"
                  },
                  "session_id": {
                    "description": "Session identifier, echoed back from the request if provided, otherwise generated by the server. Should be passed to future search and extract calls made by the agent as part of the same larger task.",
                    "examples": [
                      "session_8a911eb27c7a4afaa20d0d9dc98d07c0"
                    ],
                    "title": "Session Id",
                    "type": "string"
                  },
                  "usage": {
                    "anyOf": [
                      {
                        "items": {
                          "$ref": "#/$defs/UsageItem"
                        },
                        "type": "array"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "default": null,
                    "description": "Usage metrics for the search request.",
                    "title": "Usage"
                  },
                  "warnings": {
                    "anyOf": [
                      {
                        "items": {
                          "$ref": "#/$defs/Warning"
                        },
                        "type": "array"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "default": null,
                    "description": "Warnings for the search request, if any.",
                    "title": "Warnings"
                  }
                },
                "required": [
                  "search_id",
                  "results",
                  "session_id"
                ],
                "title": "V1SearchResponse",
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": true,
                "readOnlyHint": true,
                "title": "Web search"
              }
            },
            {
              "name": "web_fetch",
              "description": "Purpose: Fetch and extract relevant content\nfrom specific web URLs. Use only when web_search excerpts are insufficient\nfor the task at hand.\n\nIdeal Use Cases:\n- The user asked about a specific URL or page\n- You need exact wording or quotes that excerpts may have truncated\n- You need full-page analysis (long article, document, or page structure)\n- web_search excerpts are conflicting or clearly insufficient to answer\n\nFor multiple independent extraction objectives, make separate web_fetch calls\nconcurrently. Put related URLs that share one objective in a single call.\n",
              "inputSchema": {
                "properties": {
                  "allow_live_fetch": {
                    "default": true,
                    "description": "Whether live fetching is allowed. Leave\ntrue for the freshest available content. Set false to use cached content only,\nwhich makes web_fetch much faster by avoiding the source website, but may return\nolder content.",
                    "title": "Allow Live Fetch",
                    "type": "boolean"
                  },
                  "full_content": {
                    "default": false,
                    "description": "Prefer leaving this off. The default\nexcerpt mode returns LLM-optimized snippets focused on your objective — they\nare much smaller, cheaper, and usually all you need. Only set to true when\nyou explicitly need the entire page as markdown (e.g. reading a long article\nin full, or running a document through a downstream summarizer).\n\nWarning: enabling full content can return a large amount of content —\noften tens of thousands of tokens for a long article. This may exceed your\nMCP client's tool-output limit and will substantially increase response\nsize and latency.",
                    "title": "Full Content",
                    "type": "boolean"
                  },
                  "model_name": {
                    "description": "The identifier of the LLM model making this tool call (e.g. 'claude-opus-4.7', 'gpt-5.5', 'gemini-2.5-pro'). Before the first call, verify the exact active model slug from trusted runtime/session metadata or active client configuration. Pass the full slug verbatim; never shorten or substitute a model-family alias like 'gpt-5'. Used for product analytics only; does not affect search behavior.",
                    "maxLength": 100,
                    "type": "string"
                  },
                  "objective": {
                    "anyOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "default": null,
                    "description": "Natural-language description of what\ninformation you're looking for from the URLs. Limit to 200 characters.",
                    "title": "Objective"
                  },
                  "search_queries": {
                    "anyOf": [
                      {
                        "items": {
                          "type": "string"
                        },
                        "type": "array"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "default": null,
                    "description": "Optional keyword search queries (3-6\nwords each) used together with objective to focus excerpts on the most\nrelevant content. Pass the queries from the prior web_search call that\nsurfaced these URLs, if applicable.",
                    "title": "Search Queries"
                  },
                  "session_id": {
                    "description": "Stable identifier for the current conversation. Generate a random value (UUID or 32+ character hex string) at the start of your session and reuse the exact same value on every web_search / web_fetch call. Do NOT change it between turns. Used for free-tier rate limiting and correlating your tool calls in our logs; ignored on paid-tier keys.",
                    "maxLength": 100,
                    "type": "string"
                  },
                  "urls": {
                    "description": "List of URLs to extract content from. Must be\nvalid HTTP/HTTPS URLs. Up to 20 URLs per request.",
                    "items": {
                      "type": "string"
                    },
                    "title": "Urls",
                    "type": "array"
                  }
                },
                "required": [
                  "urls"
                ],
                "title": "v1_extract_toolArguments",
                "type": "object"
              },
              "outputSchema": {
                "$defs": {
                  "ExtractError": {
                    "description": "Extract error details.",
                    "properties": {
                      "content": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "Content returned for http client or server errors, if any.",
                        "title": "Content"
                      },
                      "error_type": {
                        "description": "Error type.",
                        "title": "Error Type",
                        "type": "string"
                      },
                      "http_status_code": {
                        "anyOf": [
                          {
                            "type": "integer"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "description": "HTTP status code, if available.",
                        "title": "Http Status Code"
                      },
                      "url": {
                        "title": "Url",
                        "type": "string"
                      }
                    },
                    "required": [
                      "url",
                      "error_type",
                      "http_status_code",
                      "content"
                    ],
                    "title": "ExtractError",
                    "type": "object"
                  },
                  "UsageItem": {
                    "description": "Usage item for a single operation.",
                    "properties": {
                      "count": {
                        "description": "Count of the SKU.",
                        "examples": [
                          1
                        ],
                        "title": "Count",
                        "type": "integer"
                      },
                      "name": {
                        "description": "Name of the SKU.",
                        "examples": [
                          "sku_search",
                          "sku_extract_excerpts"
                        ],
                        "title": "Name",
                        "type": "string"
                      }
                    },
                    "required": [
                      "name",
                      "count"
                    ],
                    "title": "UsageItem",
                    "type": "object"
                  },
                  "V1ExtractResult": {
                    "description": "Extract result for a single URL.",
                    "properties": {
                      "acquired_at": {
                        "anyOf": [
                          {
                            "format": "date-time",
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "default": null,
                        "description": "When the returned content was acquired, as an RFC 3339 timestamp truncated to the start of the UTC day. Null when unknown.",
                        "examples": [
                          "2026-10-08T00:00:00Z"
                        ],
                        "title": "Acquired At"
                      },
                      "excerpts": {
                        "description": "Relevant excerpted content from the URL, formatted as markdown.",
                        "items": {
                          "type": "string"
                        },
                        "title": "Excerpts",
                        "type": "array"
                      },
                      "full_content": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "default": null,
                        "description": "Full content from the URL formatted as markdown, if requested.",
                        "title": "Full Content"
                      },
                      "links": {
                        "anyOf": [
                          {
                            "items": {
                              "type": "string"
                            },
                            "type": "array"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "default": null,
                        "description": "Links from the page's rendered content, if requested: up to 512 unique absolute URLs in document order. Empty for pages with no links, including PDFs. Present only when advanced_settings.links was requested.",
                        "title": "Links"
                      },
                      "publish_date": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "default": null,
                        "description": "Publish date of the webpage in YYYY-MM-DD format, if available.",
                        "title": "Publish Date"
                      },
                      "title": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "default": null,
                        "description": "Title of the webpage, if available.",
                        "title": "Title"
                      },
                      "url": {
                        "description": "URL associated with the search result.",
                        "title": "Url",
                        "type": "string"
                      }
                    },
                    "required": [
                      "url",
                      "excerpts"
                    ],
                    "title": "V1ExtractResult",
                    "type": "object"
                  },
                  "Warning": {
                    "description": "Human-readable message for a task.",
                    "properties": {
                      "detail": {
                        "anyOf": [
                          {
                            "additionalProperties": true,
                            "type": "object"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "default": null,
                        "description": "Optional detail supporting the warning.",
                        "title": "Detail"
                      },
                      "message": {
                        "description": "Human-readable message.",
                        "title": "Message",
                        "type": "string"
                      },
                      "type": {
                        "description": "Type of warning. Note that adding new warning types is considered a backward-compatible change.",
                        "enum": [
                          "spec_validation_warning",
                          "input_validation_warning",
                          "warning"
                        ],
                        "examples": [
                          "spec_validation_warning",
                          "input_validation_warning"
                        ],
                        "title": "Type",
                        "type": "string"
                      }
                    },
                    "required": [
                      "type",
                      "message"
                    ],
                    "title": "Warning",
                    "type": "object"
                  }
                },
                "description": "Extract response.",
                "properties": {
                  "errors": {
                    "description": "Extract errors: requested URLs not in the results.",
                    "items": {
                      "$ref": "#/$defs/ExtractError"
                    },
                    "title": "Errors",
                    "type": "array"
                  },
                  "extract_id": {
                    "description": "Extract request ID, e.g. `extract_cad0a6d2dec046bd95ae900527d880e7`",
                    "title": "Extract Id",
                    "type": "string"
                  },
                  "results": {
                    "description": "Successful extract results.",
                    "items": {
                      "$ref": "#/$defs/V1ExtractResult"
                    },
                    "title": "Results",
                    "type": "array"
                  },
                  "session_id": {
                    "description": "Session identifier. Echoed back from the request if provided, otherwise generated by the server. Should be passed to future search and extract calls made by the agent as part of the same larger task.",
                    "examples": [
                      "session_8a911eb27c7a4afaa20d0d9dc98d07c0"
                    ],
                    "title": "Session Id",
                    "type": "string"
                  },
                  "usage": {
                    "anyOf": [
                      {
                        "items": {
                          "$ref": "#/$defs/UsageItem"
                        },
                        "type": "array"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "default": null,
                    "description": "Usage metrics for the extract request.",
                    "title": "Usage"
                  },
                  "warnings": {
                    "anyOf": [
                      {
                        "items": {
                          "$ref": "#/$defs/Warning"
                        },
                        "type": "array"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "default": null,
                    "description": "Warnings for the extract request, if any.",
                    "title": "Warnings"
                  }
                },
                "required": [
                  "extract_id",
                  "results",
                  "errors",
                  "session_id"
                ],
                "title": "V1ExtractResponse",
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": true,
                "openWorldHint": true,
                "readOnlyHint": true,
                "title": "Web fetch"
              }
            },
            {
              "name": "send_feedback",
              "description": "Report a problem with Parallel to the Parallel team. Use it when, while\nworking with Parallel, you see any of these:\n- A Parallel tool returned an error you didn't cause: a 5xx, a timeout, or a\n  rate limit you didn't expect.\n- Results were wrong, irrelevant, stale or missing something you know exists:\n  a wrong date or number, an excerpt the page doesn't support, an empty fetch of\n  a page that has content.\n- Parallel's docs, tool descriptions and behavior disagree, or you couldn't work\n  out how to call a tool.\n- An evaluation, benchmark or comparison you ran shows Parallel doing worse than\n  expected.\nProblems you worked around count too. It isn't for mistakes in your own\nrequests, or for questions.\n\nAsk the user first. When you tell them about the problem, offer to report it\nand show what you'd send: the message and the IDs. Send it only if they agree,\nthen tell them it was sent.\n\nPut the IDs involved (search_id, extract_id, run_id) in `examples`, with a\nshort note on each. web_decisions returns no ID: put the subject and the\nquestions it answered wrongly in `message`.\n\nParallel receives only the fields you fill in, plus the account and client the\nrequest came from; nothing else from your conversation. Leave out secrets and\npersonal data.\n",
              "inputSchema": {
                "$defs": {
                  "FeedbackExample": {
                    "properties": {
                      "expected": {
                        "anyOf": [
                          {
                            "maxLength": 1000,
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "default": null,
                        "description": "What you expected instead, such as a fact or URL Parallel missed.",
                        "title": "Expected"
                      },
                      "id": {
                        "description": "ID of the Parallel request this example is about, such as a search_id, extract_id, task run_id, findall_id or monitor_id.",
                        "maxLength": 128,
                        "minLength": 1,
                        "pattern": "^[A-Za-z0-9_-]+$",
                        "title": "Id",
                        "type": "string"
                      },
                      "issue": {
                        "anyOf": [
                          {
                            "maxLength": 1000,
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "default": null,
                        "description": "What was wrong with this result.",
                        "title": "Issue"
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "title": "FeedbackExample",
                    "type": "object"
                  }
                },
                "additionalProperties": false,
                "properties": {
                  "actual": {
                    "anyOf": [
                      {
                        "maxLength": 2000,
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "default": null,
                    "description": "The overall observed behavior.",
                    "title": "Actual"
                  },
                  "category": {
                    "description": "The kind of problem.",
                    "enum": [
                      "results_quality",
                      "error",
                      "latency",
                      "missing_capability",
                      "docs",
                      "billing",
                      "other"
                    ],
                    "title": "Category",
                    "type": "string"
                  },
                  "examples": {
                    "anyOf": [
                      {
                        "items": {
                          "$ref": "#/$defs/FeedbackExample"
                        },
                        "maxItems": 50,
                        "type": "array"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "default": null,
                    "description": "The specific requests involved, each with a short note.",
                    "title": "Examples"
                  },
                  "expected": {
                    "anyOf": [
                      {
                        "maxLength": 2000,
                        "type": "string"
                      },
                      {
                        "type": "null"
                      }
                    ],
                    "default": null,
                    "description": "The overall expected behavior.",
                    "title": "Expected"
                  },
                  "message": {
                    "description": "What you were doing, what went wrong, and what you expected. Do not include secrets or personal data.",
                    "maxLength": 4000,
                    "minLength": 20,
                    "title": "Message",
                    "type": "string"
                  },
                  "product": {
                    "description": "The Parallel product involved.",
                    "enum": [
                      "search",
                      "extract",
                      "task",
                      "findall",
                      "monitor",
                      "responses",
                      "decisions",
                      "mcp",
                      "cli",
                      "other"
                    ],
                    "title": "Product",
                    "type": "string"
                  },
                  "severity": {
                    "default": "degraded",
                    "description": "How much the problem affected the work: blocking, degraded (a workaround was needed) or minor (noticeable, but the work went on unchanged).",
                    "enum": [
                      "blocking",
                      "degraded",
                      "minor"
                    ],
                    "title": "Severity",
                    "type": "string"
                  }
                },
                "required": [
                  "message",
                  "category",
                  "product"
                ],
                "title": "send_feedback_toolArguments",
                "type": "object"
              },
              "outputSchema": {
                "$defs": {
                  "FeedbackReport": {
                    "properties": {
                      "actual": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "default": null,
                        "title": "Actual"
                      },
                      "category": {
                        "enum": [
                          "results_quality",
                          "error",
                          "latency",
                          "missing_capability",
                          "docs",
                          "billing",
                          "other"
                        ],
                        "title": "Category",
                        "type": "string"
                      },
                      "context": {
                        "$ref": "#/$defs/FeedbackReportContext"
                      },
                      "examples": {
                        "items": {
                          "$ref": "#/$defs/FeedbackReportExample"
                        },
                        "title": "Examples",
                        "type": "array"
                      },
                      "expected": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "default": null,
                        "title": "Expected"
                      },
                      "message": {
                        "title": "Message",
                        "type": "string"
                      },
                      "product": {
                        "enum": [
                          "search",
                          "extract",
                          "task",
                          "findall",
                          "monitor",
                          "responses",
                          "decisions",
                          "mcp",
                          "cli",
                          "other"
                        ],
                        "title": "Product",
                        "type": "string"
                      },
                      "recipient": {
                        "description": "Who receives the report and how long it is kept.",
                        "title": "Recipient",
                        "type": "string"
                      },
                      "redactions": {
                        "description": "How many secrets were removed.",
                        "title": "Redactions",
                        "type": "integer"
                      },
                      "severity": {
                        "enum": [
                          "blocking",
                          "degraded",
                          "minor"
                        ],
                        "title": "Severity",
                        "type": "string"
                      }
                    },
                    "required": [
                      "message",
                      "category",
                      "product",
                      "severity",
                      "examples",
                      "context",
                      "redactions",
                      "recipient"
                    ],
                    "title": "FeedbackReport",
                    "type": "object"
                  },
                  "FeedbackReportContext": {
                    "properties": {
                      "llm_model": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "default": null,
                        "title": "Llm Model"
                      },
                      "org_id": {
                        "title": "Org Id",
                        "type": "string"
                      },
                      "sender": {
                        "description": "Who Parallel sees as the sender.",
                        "title": "Sender",
                        "type": "string"
                      },
                      "session_id": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "default": null,
                        "title": "Session Id"
                      },
                      "surface": {
                        "description": "How the feedback was sent: api, cli, mcp or platform.",
                        "enum": [
                          "api",
                          "cli",
                          "mcp",
                          "platform"
                        ],
                        "title": "Surface",
                        "type": "string"
                      },
                      "user_agent": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "default": null,
                        "title": "User Agent"
                      }
                    },
                    "required": [
                      "org_id",
                      "sender",
                      "surface"
                    ],
                    "title": "FeedbackReportContext",
                    "type": "object"
                  },
                  "FeedbackReportExample": {
                    "properties": {
                      "expected": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "default": null,
                        "title": "Expected"
                      },
                      "id": {
                        "title": "Id",
                        "type": "string"
                      },
                      "issue": {
                        "anyOf": [
                          {
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ],
                        "default": null,
                        "title": "Issue"
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "title": "FeedbackReportExample",
                    "type": "object"
                  }
                },
                "properties": {
                  "duplicate": {
                    "default": false,
                    "description": "True when the same report was received in the last 24 hours; feedback_id is the original report and nothing new was stored.",
                    "title": "Duplicate",
                    "type": "boolean"
                  },
                  "feedback_id": {
                    "description": "ID of the stored report.",
                    "title": "Feedback Id",
                    "type": "string"
                  },
                  "next_step": {
                    "description": "What the agent should do next.",
                    "title": "Next Step",
                    "type": "string"
                  },
                  "report": {
                    "$ref": "#/$defs/FeedbackReport",
                    "description": "Exactly what Parallel received, with secrets removed."
                  },
                  "status": {
                    "const": "received",
                    "title": "Status",
                    "type": "string"
                  }
                },
                "required": [
                  "status",
                  "feedback_id",
                  "report",
                  "next_step"
                ],
                "title": "FeedbackResponse",
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "idempotentHint": false,
                "openWorldHint": false,
                "readOnlyHint": false,
                "title": "Send feedback to Parallel"
              }
            }
          ],
          "schemaTokens": 5322,
          "changedAt": "2026-11-07T01:46:44.757089899Z",
          "check": {
            "checker": "anchor-check/1.0",
            "totalTokens": 5322,
            "counts": {
              "error": 0,
              "note": 1,
              "warn": 3
            },
            "findings": [
              {
                "rule": "TC15",
                "severity": "warn",
                "tool": "send_feedback",
                "message": "inputSchema uses $ref/$defs",
                "fix": "Inline the referenced schemas. Pydantic and zod-to-json-schema emit $defs for nested models; most can be told not to."
              },
              {
                "rule": "TC22",
                "severity": "warn",
                "tool": "send_feedback",
                "message": "the definition is about 1,634 tokens",
                "fix": "Trim the description and parameter docs, or split the tool."
              },
              {
                "rule": "TC22",
                "severity": "warn",
                "tool": "web_fetch",
                "message": "the definition is about 1,970 tokens",
                "fix": "Trim the description and parameter docs, or split the tool."
              },
              {
                "rule": "TC29",
                "severity": "note",
                "message": "about 396 tokens (7% of the definitions) are titles that repeat property or function names",
                "fix": "Strip \"title\" keys that only restate a name before listing tools."
              }
            ]
          }
        },
        "updatedAt": "2026-11-07T18:21:52.770771808Z"
      }
    },
    "answer": "Parallel Search and Task APIs scores 75 (BB) on agent readiness against SERPHouse's 42.4 (E), and leads in every scored category.",
    "b": {
      "slug": "serphouse",
      "name": "SERPHouse",
      "vendor": "Patoliya Infotech LLP",
      "vendorUrl": "https://www.serphouse.com",
      "kind": "http-api",
      "category": "search",
      "summary": "SERPHouse is a SERP API from Patoliya Infotech LLP in India that returns parsed Google, Bing and Yahoo results as JSON, live or scheduled, with a Scraper API for page HTML or Markdown and a hosted MCP server.",
      "url": "https://www.anchorterminal.com/tools/serphouse",
      "markdownUrl": "https://www.anchorterminal.com/tools/serphouse.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/serphouse.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/serphouse.json",
      "dns": "serphouse.grade.anchorterminal.com",
      "repo": "https://github.com/SERPHouse/serphouse-mcp",
      "transports": [
        "streamable-http",
        "stdio"
      ],
      "remoteUrl": "https://mcp.serphouse.com/YOUR_API_KEY/mcp",
      "packages": [
        {
          "registry": "npm",
          "name": "serphouse-mcp"
        }
      ],
      "auth": "api-key",
      "authNotes": "One API key per account, shown on the dashboard after a browser signup and email confirmation. Sent as `Authorization: Bearer` or as `api_token` in the query string. The hosted MCP server takes the key in its URL path. One account per user. No scopes or rotation found.",
      "pricing": "paid",
      "pricingNotes": "Basic $29.99 a month for 400,000 credits ($0.75 per 1,000 SERP requests) and Regular $49.99 for 800,000 ($0.62). Autocomplete $0.37 and $0.31, Top 100 Google $7.50 and $6.25 per 1,000. Custom plans by email. Free trial 4,000 credits for 7 days, no card. Credits don't roll over.",
      "priceSummary": "$0.75 / 1k req",
      "where": "both",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 on the pricing page, the docs, llms.txt or the MCP source (checked 2026-11-06). An empty balance returns 402 'Insufficient credits'.",
        "endpoints": []
      },
      "toolCount": 23,
      "popularity": {
        "githubStars": null,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-11-06"
      },
      "docsUrl": "https://www.serphouse.com/docs",
      "llmsTxt": "https://www.serphouse.com/llms.txt",
      "capabilities": [
        "search.serp",
        "web.search",
        "search.news",
        "search.images",
        "web.fetch"
      ],
      "tags": [
        "hosted",
        "paid",
        "no-card",
        "free-tier",
        "mcp",
        "remote-mcp",
        "llms-txt",
        "python",
        "india"
      ],
      "lastRelease": "2026-07-06",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 42.4,
        "grade": "E",
        "agentReady": false,
        "rank": 1265,
        "ranked": true,
        "rankOf": 1486,
        "categoryRank": 23,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 64,
          "maintenance": 23,
          "payments": 40,
          "reliability": 40,
          "schema": 66,
          "security": 11,
          "transparency": 50
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-11-06"
        },
        "negative": 0,
        "verdict": "SERPHouse returns parsed Google, Bing and Yahoo results at published prices from $0.62 per 1,000 requests, with a 23-tool MCP server and a 4,000-credit trial without a card. The hosted MCP puts the key in its URL, there is no status page, changelog or security contact, and the terms keep search history indefinitely.",
        "bestFor": "Low-cost Google, Bing and Yahoo result parsing for SEO and rank tracking, with many Google verticals.",
        "strengths": [
          "Published prices per 1,000 requests, $0.75 on Basic and $0.62 on Regular, with failed requests not charged",
          "Google web, news, images, shopping, jobs, videos, forums, local and autocomplete, plus Bing and Yahoo, in one API",
          "Hosted and stdio MCP server with 23 tools, typed Zod inputs and routing advice between tools, MIT licensed",
          "llms.txt and Markdown copies of the docs pages, with a status code table and per-engine examples",
          "Free trial of 4,000 credits for 7 days with no card"
        ],
        "weaknesses": [
          "The hosted MCP server takes the API key only in its URL path, and the REST API also accepts `api_token` in the query string",
          "No status page, changelog, security.txt, disclosure policy or certification found",
          "Terms keep search history indefinitely and advise users in the European Economic Area not to use the service",
          "The pricing page states a 99.99% uptime SLA and the docs 99.95%, with no SLA terms or credits found",
          "The home page sends readers to a playground 'on the Oxylabs dashboard', with no relationship to Oxylabs found"
        ],
        "agentNotes": [
          "Send the key as `Authorization: Bearer`, not as `api_token` in the URL",
          "Treat a 200 with `\"status\": \"error\"` and 'Please try again' as a failure and retry later",
          "Pass `loc` or `loc_id` for Google and Bing tools other than `serphouse_search`; find IDs with `serphouse_location_search`",
          "Use `serphouse_search` for plain lookups and `serphouse_serp_google_advanced` only when ranks beyond the top 10 are needed, at ten times the price",
          "Keep under 60 requests a minute on self-serve plans"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "E",
            "methodology": "0.7",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 42.4
          }
        ],
        "editorialScores": {
          "ergonomics": 64,
          "maintenance": 23,
          "payments": 40,
          "reliability": 40,
          "schema": 66,
          "security": 11,
          "transparency": 39
        },
        "provenanceScore": 61,
        "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": {
        "install": "npx serphouse-mcp",
        "http": "curl -X POST https://api.serphouse.com/serp/live \\\n  -H 'accept: application/json' \\\n  -H 'authorization: Bearer API_TOKEN' \\\n  -H 'content-type: application/json' \\\n  -d '{\"data\": {\"domain\": \"google.com\", \"lang\": \"en\", \"q\": \"Coffee\", \"loc\": \"Texas,United States\", \"device\": \"desktop\", \"serp_type\": \"web\"}}'",
        "config": {
          "mcpServers": {
            "serphouse": {
              "url": "https://mcp.serphouse.com/YOUR_SERPHouse_API_KEY/mcp"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/search.serp",
        "tool": "https://letme.dev/serphouse"
      },
      "area": "web-data",
      "unitPrices": [
        {
          "item": "SERP request, Basic",
          "unit": "1k-requests",
          "usd": 0.75,
          "note": "$29.99 a month for 400,000 credits"
        },
        {
          "item": "SERP request, Regular",
          "unit": "1k-requests",
          "usd": 0.62,
          "note": "$49.99 a month for 800,000 credits"
        },
        {
          "item": "Autocomplete request, Basic",
          "unit": "1k-requests",
          "usd": 0.37,
          "note": "$0.31 on Regular"
        },
        {
          "item": "Top 100 Google SERP, Basic",
          "unit": "1k-requests",
          "usd": 7.5,
          "note": "$6.25 on Regular"
        },
        {
          "item": "Basic plan",
          "unit": "month",
          "usd": 29.99,
          "note": "400,000 credits, no rollover"
        },
        {
          "item": "Regular plan",
          "unit": "month",
          "usd": 49.99,
          "note": "800,000 credits, no rollover"
        }
      ],
      "provenance": {
        "legalEntity": "Patoliya Infotech LLP",
        "domain": "serphouse.com",
        "domainRegistered": "2019-08-20",
        "endpointOnVendorDomain": true,
        "terms": "https://www.serphouse.com/terms-of-service",
        "privacy": "https://www.serphouse.com/privacy-policy",
        "statusPage": "",
        "changelog": "",
        "securityTxt": "none",
        "checked": "2026-11-06",
        "notes": [
          "The terms name Patoliya Infotech LLP, a limited liability partnership incorporated in India, under Indian law with courts in Surat. The contact page gives an address in Utran, Surat, Gujarat.",
          "No effective or updated date was found on the terms or the privacy policy.",
          "www.serphouse.com/robots.txt allows all agents except /data/.",
          "The trial terms forbid 'scraping at scale or performing automated bulk data extraction' with trial credits. No clause on automated access to the website was found.",
          "/.well-known/security.txt answers 404. No status page is linked, and status.serphouse.com did not answer.",
          "RDAP gives serphouse.com a registration date of 20 August 2019; the about page says SERPHouse started in September 2019."
        ],
        "score": 61
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/serphouse.json",
      "live": {
        "slug": "serphouse",
        "probe": {
          "target": "https://mcp.serphouse.com/YOUR_API_KEY/mcp",
          "method": "get",
          "lastAt": "2026-11-07T18:20:53.888566191Z",
          "lastOk": true,
          "lastStatus": 400,
          "lastMs": 246,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 234,
          "p95ms24h": 348,
          "samples24h": 200,
          "samples30d": 200,
          "days": [
            {
              "date": "2026-11-06",
              "probes": 13,
              "ok": 13
            },
            {
              "date": "2026-11-07",
              "probes": 187,
              "ok": 187
            }
          ]
        },
        "versions": [
          {
            "registry": "github",
            "name": "SERPHouse/serphouse-mcp",
            "version": "1.1.0",
            "released": "2026-07-06",
            "seenAt": "2026-11-07T00:04:55.526969474Z"
          },
          {
            "registry": "npm",
            "name": "serphouse-mcp",
            "version": "1.1.0",
            "seenAt": "2026-11-07T00:04:54.741719814Z"
          }
        ],
        "githubStars": 10,
        "npmWeekly": 11,
        "securityTxt": {
          "url": "https://serphouse.com/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-11-07T15:59:39.38860304Z"
        },
        "llmsTxt": {
          "url": "https://www.serphouse.com/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-11-07T15:33:54.600324581Z"
        },
        "pages": [
          {
            "url": "https://www.serphouse.com/privacy-policy",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-11-07T14:34:21.531839335Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "85f9c0a9e291"
          },
          {
            "url": "https://www.serphouse.com/terms-of-service",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-11-07T14:34:24.703890347Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "171892dff54e"
          }
        ],
        "mcpTools": {
          "url": "https://mcp.serphouse.com/YOUR_SERPHouse_API_KEY/mcp",
          "checkedAt": "2026-11-07T01:47:41.660458875Z",
          "status": "ok",
          "protocol": "2025-11-25",
          "tools": [
            {
              "name": "serphouse_domain_list",
              "title": "Serphouse Domain List",
              "description": "List supported search domains. Call this before Yahoo searches — yahoo.com is not valid; use regional domains like uk.yahoo.com from this list.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "properties": {},
                "type": "object"
              }
            },
            {
              "name": "serphouse_language_list",
              "title": "Serphouse Language List",
              "description": "Get supported language codes for google, bing, or yahoo.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "properties": {
                  "type": {
                    "description": "Search engine language catalog to fetch.",
                    "enum": [
                      "google",
                      "bing",
                      "yahoo"
                    ],
                    "type": "string"
                  }
                },
                "required": [
                  "type"
                ],
                "type": "object"
              }
            },
            {
              "name": "serphouse_location_search",
              "title": "Serphouse Location Search",
              "description": "Search Serphouse location ids and location strings for Google or Bing targeting.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "properties": {
                  "q": {
                    "description": "Location search term, for example texas or london.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "type": {
                    "default": "google",
                    "enum": [
                      "google",
                      "bing"
                    ],
                    "type": "string"
                  }
                },
                "required": [
                  "q"
                ],
                "type": "object"
              }
            },
            {
              "name": "serphouse_account_info",
              "title": "Serphouse Account Info",
              "description": "Get Serphouse account plan and credit usage.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "properties": {},
                "type": "object"
              }
            },
            {
              "name": "serphouse_search",
              "title": "Serphouse Search",
              "description": "Default web search for agents — fast lightweight Google organic results via POST /web-search-lite. Only q is required; gl defaults to US. Use serphouse_google_web only when you need device, gfilter, or num_result. Use serphouse_serp_google_advanced for SEO rankings beyond top 10.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "properties": {
                  "date_range": {
                    "description": "Optional date filter: YYYY-MM-DD,YYYY-MM-DD or one of h, d, w, m, y. Omit for general searches — lite results may be empty when this is set.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "domain": {
                    "default": "google.com",
                    "minLength": 1,
                    "type": "string"
                  },
                  "gl": {
                    "description": "Two-letter ISO country code, e.g. US, IN, GB. Used when loc is omitted.",
                    "minLength": 1,
                    "pattern": "^[A-Za-z]{2}$",
                    "type": "string"
                  },
                  "lang": {
                    "default": "en",
                    "minLength": 1,
                    "type": "string"
                  },
                  "loc": {
                    "description": "Location name, e.g. Austin,Texas,United States. Provide loc or gl, not both.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "no_trace": {
                    "anyOf": [
                      {
                        "const": 0,
                        "type": "number"
                      },
                      {
                        "const": 1,
                        "type": "number"
                      },
                      {
                        "const": "0",
                        "type": "string"
                      },
                      {
                        "const": "1",
                        "type": "string"
                      },
                      {
                        "const": "true",
                        "type": "string"
                      },
                      {
                        "const": "false",
                        "type": "string"
                      },
                      {
                        "const": true,
                        "type": "boolean"
                      },
                      {
                        "const": false,
                        "type": "boolean"
                      }
                    ],
                    "description": "Enterprise only. Enables NoTrace mode when set to 1 or true."
                  },
                  "page": {
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991,
                    "type": "integer"
                  },
                  "q": {
                    "description": "Search phrase to query.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "verbatim": {
                    "anyOf": [
                      {
                        "const": 0,
                        "type": "number"
                      },
                      {
                        "const": 1,
                        "type": "number"
                      },
                      {
                        "const": "0",
                        "type": "string"
                      },
                      {
                        "const": "1",
                        "type": "string"
                      }
                    ]
                  }
                },
                "required": [
                  "q"
                ],
                "type": "object"
              }
            },
            {
              "name": "serphouse_google_web_lite",
              "title": "Serphouse Google Web Search (Lite)",
              "description": "Alias of serphouse_search — fast lightweight Google organic results via POST /web-search-lite. Prefer serphouse_search for general agent queries.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "properties": {
                  "date_range": {
                    "description": "Optional date filter: YYYY-MM-DD,YYYY-MM-DD or one of h, d, w, m, y. Omit for general searches — lite results may be empty when this is set.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "domain": {
                    "default": "google.com",
                    "minLength": 1,
                    "type": "string"
                  },
                  "gl": {
                    "description": "Two-letter ISO country code, e.g. US, IN, GB. Used when loc is omitted.",
                    "minLength": 1,
                    "pattern": "^[A-Za-z]{2}$",
                    "type": "string"
                  },
                  "lang": {
                    "default": "en",
                    "minLength": 1,
                    "type": "string"
                  },
                  "loc": {
                    "description": "Location name, e.g. Austin,Texas,United States. Provide loc or gl, not both.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "no_trace": {
                    "anyOf": [
                      {
                        "const": 0,
                        "type": "number"
                      },
                      {
                        "const": 1,
                        "type": "number"
                      },
                      {
                        "const": "0",
                        "type": "string"
                      },
                      {
                        "const": "1",
                        "type": "string"
                      },
                      {
                        "const": "true",
                        "type": "string"
                      },
                      {
                        "const": "false",
                        "type": "string"
                      },
                      {
                        "const": true,
                        "type": "boolean"
                      },
                      {
                        "const": false,
                        "type": "boolean"
                      }
                    ],
                    "description": "Enterprise only. Enables NoTrace mode when set to 1 or true."
                  },
                  "page": {
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991,
                    "type": "integer"
                  },
                  "q": {
                    "description": "Search phrase to query.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "verbatim": {
                    "anyOf": [
                      {
                        "const": 0,
                        "type": "number"
                      },
                      {
                        "const": 1,
                        "type": "number"
                      },
                      {
                        "const": "0",
                        "type": "string"
                      },
                      {
                        "const": "1",
                        "type": "string"
                      }
                    ]
                  }
                },
                "required": [
                  "q"
                ],
                "type": "object"
              }
            },
            {
              "name": "serphouse_google_web",
              "title": "Serphouse Google Web Search (Full)",
              "description": "Full Google web search via POST /google-web with device, gfilter, and num_result. Requires loc or loc_id. For general queries use serphouse_search instead.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "properties": {
                  "date_range": {
                    "description": "Date range as YYYY-MM-DD,YYYY-MM-DD or one of h, d, w, m, y.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "device": {
                    "default": "desktop",
                    "enum": [
                      "desktop",
                      "mobile"
                    ],
                    "type": "string"
                  },
                  "domain": {
                    "default": "google.com",
                    "minLength": 1,
                    "type": "string"
                  },
                  "gfilter": {
                    "anyOf": [
                      {
                        "const": 0,
                        "type": "number"
                      },
                      {
                        "const": 1,
                        "type": "number"
                      },
                      {
                        "const": "0",
                        "type": "string"
                      },
                      {
                        "const": "1",
                        "type": "string"
                      }
                    ]
                  },
                  "lang": {
                    "default": "en",
                    "minLength": 1,
                    "type": "string"
                  },
                  "loc": {
                    "description": "Required unless loc_id is provided. Location name, for example Austin,Texas,United States. Provide exactly one of loc or loc_id.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "loc_id": {
                    "anyOf": [
                      {
                        "exclusiveMinimum": 0,
                        "maximum": 9007199254740991,
                        "type": "integer"
                      },
                      {
                        "minLength": 1,
                        "pattern": "^\\d+$",
                        "type": "string"
                      }
                    ],
                    "description": "Required unless loc is provided. Serphouse location id from serphouse_location_search. Provide exactly one of loc_id or loc."
                  },
                  "no_trace": {
                    "anyOf": [
                      {
                        "const": 0,
                        "type": "number"
                      },
                      {
                        "const": 1,
                        "type": "number"
                      },
                      {
                        "const": "0",
                        "type": "string"
                      },
                      {
                        "const": "1",
                        "type": "string"
                      },
                      {
                        "const": "true",
                        "type": "string"
                      },
                      {
                        "const": "false",
                        "type": "string"
                      },
                      {
                        "const": true,
                        "type": "boolean"
                      },
                      {
                        "const": false,
                        "type": "boolean"
                      }
                    ],
                    "description": "Enterprise only. Enables NoTrace mode when set to 1 or true."
                  },
                  "num_result": {
                    "maximum": 10,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "page": {
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991,
                    "type": "integer"
                  },
                  "q": {
                    "description": "Search phrase to query.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "verbatim": {
                    "anyOf": [
                      {
                        "const": 0,
                        "type": "number"
                      },
                      {
                        "const": 1,
                        "type": "number"
                      },
                      {
                        "const": "0",
                        "type": "string"
                      },
                      {
                        "const": "1",
                        "type": "string"
                      }
                    ]
                  }
                },
                "required": [
                  "q"
                ],
                "type": "object"
              }
            },
            {
              "name": "serphouse_google_image",
              "title": "Serphouse Google Image Search",
              "description": "Run a realtime Google image search via POST /google-image.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "properties": {
                  "date_range": {
                    "minLength": 1,
                    "type": "string"
                  },
                  "domain": {
                    "default": "google.com",
                    "minLength": 1,
                    "type": "string"
                  },
                  "lang": {
                    "default": "en",
                    "minLength": 1,
                    "type": "string"
                  },
                  "loc": {
                    "description": "Required unless loc_id is provided. Location name, for example Austin,Texas,United States. Provide exactly one of loc or loc_id.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "loc_id": {
                    "anyOf": [
                      {
                        "exclusiveMinimum": 0,
                        "maximum": 9007199254740991,
                        "type": "integer"
                      },
                      {
                        "minLength": 1,
                        "pattern": "^\\d+$",
                        "type": "string"
                      }
                    ],
                    "description": "Required unless loc is provided. Serphouse location id from serphouse_location_search. Provide exactly one of loc_id or loc."
                  },
                  "no_trace": {
                    "anyOf": [
                      {
                        "const": 0,
                        "type": "number"
                      },
                      {
                        "const": 1,
                        "type": "number"
                      },
                      {
                        "const": "0",
                        "type": "string"
                      },
                      {
                        "const": "1",
                        "type": "string"
                      },
                      {
                        "const": "true",
                        "type": "string"
                      },
                      {
                        "const": "false",
                        "type": "string"
                      },
                      {
                        "const": true,
                        "type": "boolean"
                      },
                      {
                        "const": false,
                        "type": "boolean"
                      }
                    ],
                    "description": "Enterprise only. Enables NoTrace mode when set to 1 or true."
                  },
                  "page": {
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991,
                    "type": "integer"
                  },
                  "q": {
                    "description": "Search phrase to query.",
                    "minLength": 1,
                    "type": "string"
                  }
                },
                "required": [
                  "q"
                ],
                "type": "object"
              }
            },
            {
              "name": "serphouse_google_news",
              "title": "Serphouse Google News Search",
              "description": "Run a realtime Google news search via POST /google-news.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "properties": {
                  "date_range": {
                    "minLength": 1,
                    "type": "string"
                  },
                  "device": {
                    "default": "desktop",
                    "enum": [
                      "desktop",
                      "mobile"
                    ],
                    "type": "string"
                  },
                  "domain": {
                    "default": "google.com",
                    "minLength": 1,
                    "type": "string"
                  },
                  "lang": {
                    "default": "en",
                    "minLength": 1,
                    "type": "string"
                  },
                  "loc": {
                    "description": "Required unless loc_id is provided. Location name, for example Austin,Texas,United States. Provide exactly one of loc or loc_id.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "loc_id": {
                    "anyOf": [
                      {
                        "exclusiveMinimum": 0,
                        "maximum": 9007199254740991,
                        "type": "integer"
                      },
                      {
                        "minLength": 1,
                        "pattern": "^\\d+$",
                        "type": "string"
                      }
                    ],
                    "description": "Required unless loc is provided. Serphouse location id from serphouse_location_search. Provide exactly one of loc_id or loc."
                  },
                  "no_trace": {
                    "anyOf": [
                      {
                        "const": 0,
                        "type": "number"
                      },
                      {
                        "const": 1,
                        "type": "number"
                      },
                      {
                        "const": "0",
                        "type": "string"
                      },
                      {
                        "const": "1",
                        "type": "string"
                      },
                      {
                        "const": "true",
                        "type": "string"
                      },
                      {
                        "const": "false",
                        "type": "string"
                      },
                      {
                        "const": true,
                        "type": "boolean"
                      },
                      {
                        "const": false,
                        "type": "boolean"
                      }
                    ],
                    "description": "Enterprise only. Enables NoTrace mode when set to 1 or true."
                  },
                  "page": {
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991,
                    "type": "integer"
                  },
                  "q": {
                    "description": "Search phrase to query.",
                    "minLength": 1,
                    "type": "string"
                  }
                },
                "required": [
                  "q"
                ],
                "type": "object"
              }
            },
            {
              "name": "serphouse_google_shop",
              "title": "Serphouse Google Shop Search",
              "description": "Run a realtime Google shopping search via POST /google-shop.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "properties": {
                  "domain": {
                    "default": "google.com",
                    "minLength": 1,
                    "type": "string"
                  },
                  "lang": {
                    "default": "en",
                    "minLength": 1,
                    "type": "string"
                  },
                  "loc": {
                    "description": "Required unless loc_id is provided. Location name, for example Austin,Texas,United States. Provide exactly one of loc or loc_id.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "loc_id": {
                    "anyOf": [
                      {
                        "exclusiveMinimum": 0,
                        "maximum": 9007199254740991,
                        "type": "integer"
                      },
                      {
                        "minLength": 1,
                        "pattern": "^\\d+$",
                        "type": "string"
                      }
                    ],
                    "description": "Required unless loc is provided. Serphouse location id from serphouse_location_search. Provide exactly one of loc_id or loc."
                  },
                  "no_trace": {
                    "anyOf": [
                      {
                        "const": 0,
                        "type": "number"
                      },
                      {
                        "const": 1,
                        "type": "number"
                      },
                      {
                        "const": "0",
                        "type": "string"
                      },
                      {
                        "const": "1",
                        "type": "string"
                      },
                      {
                        "const": "true",
                        "type": "string"
                      },
                      {
                        "const": "false",
                        "type": "string"
                      },
                      {
                        "const": true,
                        "type": "boolean"
                      },
                      {
                        "const": false,
                        "type": "boolean"
                      }
                    ],
                    "description": "Enterprise only. Enables NoTrace mode when set to 1 or true."
                  },
                  "page": {
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991,
                    "type": "integer"
                  },
                  "q": {
                    "description": "Search phrase to query.",
                    "minLength": 1,
                    "type": "string"
                  }
                },
                "required": [
                  "q"
                ],
                "type": "object"
              }
            },
            {
              "name": "serphouse_bing_web",
              "title": "Serphouse Bing Web Search",
              "description": "Run a realtime Bing web search via POST /bing-web.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "properties": {
                  "date_range": {
                    "minLength": 1,
                    "type": "string"
                  },
                  "device": {
                    "default": "desktop",
                    "enum": [
                      "desktop",
                      "mobile"
                    ],
                    "type": "string"
                  },
                  "lang": {
                    "default": "en-US",
                    "description": "Language code, for example en-US or fr-FR.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "loc": {
                    "description": "Required unless loc_id is provided. Location name, for example Austin,Texas,United States. Provide exactly one of loc or loc_id.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "loc_id": {
                    "anyOf": [
                      {
                        "exclusiveMinimum": 0,
                        "maximum": 9007199254740991,
                        "type": "integer"
                      },
                      {
                        "minLength": 1,
                        "pattern": "^\\d+$",
                        "type": "string"
                      }
                    ],
                    "description": "Required unless loc is provided. Serphouse location id from serphouse_location_search. Provide exactly one of loc_id or loc."
                  },
                  "no_trace": {
                    "anyOf": [
                      {
                        "const": 0,
                        "type": "number"
                      },
                      {
                        "const": 1,
                        "type": "number"
                      },
                      {
                        "const": "0",
                        "type": "string"
                      },
                      {
                        "const": "1",
                        "type": "string"
                      },
                      {
                        "const": "true",
                        "type": "string"
                      },
                      {
                        "const": "false",
                        "type": "string"
                      },
                      {
                        "const": true,
                        "type": "boolean"
                      },
                      {
                        "const": false,
                        "type": "boolean"
                      }
                    ],
                    "description": "Enterprise only. Enables NoTrace mode when set to 1 or true."
                  },
                  "page": {
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991,
                    "type": "integer"
                  },
                  "q": {
                    "description": "Search phrase to query.",
                    "minLength": 1,
                    "type": "string"
                  }
                },
                "required": [
                  "q"
                ],
                "type": "object"
              }
            },
            {
              "name": "serphouse_bing_image",
              "title": "Serphouse Bing Image Search",
              "description": "Run a realtime Bing image search via POST /bing-image.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "properties": {
                  "lang": {
                    "default": "en-US",
                    "minLength": 1,
                    "type": "string"
                  },
                  "loc": {
                    "description": "Required unless loc_id is provided. Location name, for example Austin,Texas,United States. Provide exactly one of loc or loc_id.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "loc_id": {
                    "anyOf": [
                      {
                        "exclusiveMinimum": 0,
                        "maximum": 9007199254740991,
                        "type": "integer"
                      },
                      {
                        "minLength": 1,
                        "pattern": "^\\d+$",
                        "type": "string"
                      }
                    ],
                    "description": "Required unless loc is provided. Serphouse location id from serphouse_location_search. Provide exactly one of loc_id or loc."
                  },
                  "no_trace": {
                    "anyOf": [
                      {
                        "const": 0,
                        "type": "number"
                      },
                      {
                        "const": 1,
                        "type": "number"
                      },
                      {
                        "const": "0",
                        "type": "string"
                      },
                      {
                        "const": "1",
                        "type": "string"
                      },
                      {
                        "const": "true",
                        "type": "string"
                      },
                      {
                        "const": "false",
                        "type": "string"
                      },
                      {
                        "const": true,
                        "type": "boolean"
                      },
                      {
                        "const": false,
                        "type": "boolean"
                      }
                    ],
                    "description": "Enterprise only. Enables NoTrace mode when set to 1 or true."
                  },
                  "page": {
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991,
                    "type": "integer"
                  },
                  "q": {
                    "description": "Search phrase to query.",
                    "minLength": 1,
                    "type": "string"
                  }
                },
                "required": [
                  "q"
                ],
                "type": "object"
              }
            },
            {
              "name": "serphouse_bing_news",
              "title": "Serphouse Bing News Search",
              "description": "Run a realtime Bing news search via POST /bing-news.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "properties": {
                  "device": {
                    "default": "desktop",
                    "enum": [
                      "desktop",
                      "mobile"
                    ],
                    "type": "string"
                  },
                  "lang": {
                    "default": "en-US",
                    "minLength": 1,
                    "type": "string"
                  },
                  "loc": {
                    "description": "Required unless loc_id is provided. Location name, for example Austin,Texas,United States. Provide exactly one of loc or loc_id.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "loc_id": {
                    "anyOf": [
                      {
                        "exclusiveMinimum": 0,
                        "maximum": 9007199254740991,
                        "type": "integer"
                      },
                      {
                        "minLength": 1,
                        "pattern": "^\\d+$",
                        "type": "string"
                      }
                    ],
                    "description": "Required unless loc is provided. Serphouse location id from serphouse_location_search. Provide exactly one of loc_id or loc."
                  },
                  "no_trace": {
                    "anyOf": [
                      {
                        "const": 0,
                        "type": "number"
                      },
                      {
                        "const": 1,
                        "type": "number"
                      },
                      {
                        "const": "0",
                        "type": "string"
                      },
                      {
                        "const": "1",
                        "type": "string"
                      },
                      {
                        "const": "true",
                        "type": "string"
                      },
                      {
                        "const": "false",
                        "type": "string"
                      },
                      {
                        "const": true,
                        "type": "boolean"
                      },
                      {
                        "const": false,
                        "type": "boolean"
                      }
                    ],
                    "description": "Enterprise only. Enables NoTrace mode when set to 1 or true."
                  },
                  "page": {
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991,
                    "type": "integer"
                  },
                  "q": {
                    "description": "Search phrase to query.",
                    "minLength": 1,
                    "type": "string"
                  }
                },
                "required": [
                  "q"
                ],
                "type": "object"
              }
            },
            {
              "name": "serphouse_yahoo_web",
              "title": "Serphouse Yahoo Web Search",
              "description": "Run a realtime Yahoo web search via POST /yahoo-web.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "properties": {
                  "device": {
                    "default": "desktop",
                    "enum": [
                      "desktop",
                      "mobile"
                    ],
                    "type": "string"
                  },
                  "domain": {
                    "default": "uk.yahoo.com",
                    "description": "Regional Yahoo domain from serphouse_domain_list, for example uk.yahoo.com or fr.yahoo.com. Do not use yahoo.com.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "lang": {
                    "default": "lang_en",
                    "description": "Yahoo language code, for example lang_en or lang_fr.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "no_trace": {
                    "anyOf": [
                      {
                        "const": 0,
                        "type": "number"
                      },
                      {
                        "const": 1,
                        "type": "number"
                      },
                      {
                        "const": "0",
                        "type": "string"
                      },
                      {
                        "const": "1",
                        "type": "string"
                      },
                      {
                        "const": "true",
                        "type": "string"
                      },
                      {
                        "const": "false",
                        "type": "string"
                      },
                      {
                        "const": true,
                        "type": "boolean"
                      },
                      {
                        "const": false,
                        "type": "boolean"
                      }
                    ],
                    "description": "Enterprise only. Enables NoTrace mode when set to 1 or true."
                  },
                  "page": {
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991,
                    "type": "integer"
                  },
                  "q": {
                    "description": "Search phrase to query.",
                    "minLength": 1,
                    "type": "string"
                  }
                },
                "required": [
                  "q"
                ],
                "type": "object"
              }
            },
            {
              "name": "serphouse_yahoo_image",
              "title": "Serphouse Yahoo Image Search",
              "description": "Run a realtime Yahoo image search via POST /yahoo-image.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "properties": {
                  "domain": {
                    "default": "uk.yahoo.com",
                    "description": "Regional Yahoo domain from serphouse_domain_list, for example uk.yahoo.com or fr.yahoo.com. Do not use yahoo.com.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "lang": {
                    "default": "lang_en",
                    "minLength": 1,
                    "type": "string"
                  },
                  "no_trace": {
                    "anyOf": [
                      {
                        "const": 0,
                        "type": "number"
                      },
                      {
                        "const": 1,
                        "type": "number"
                      },
                      {
                        "const": "0",
                        "type": "string"
                      },
                      {
                        "const": "1",
                        "type": "string"
                      },
                      {
                        "const": "true",
                        "type": "string"
                      },
                      {
                        "const": "false",
                        "type": "string"
                      },
                      {
                        "const": true,
                        "type": "boolean"
                      },
                      {
                        "const": false,
                        "type": "boolean"
                      }
                    ],
                    "description": "Enterprise only. Enables NoTrace mode when set to 1 or true."
                  },
                  "page": {
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991,
                    "type": "integer"
                  },
                  "q": {
                    "description": "Search phrase to query.",
                    "minLength": 1,
                    "type": "string"
                  }
                },
                "required": [
                  "q"
                ],
                "type": "object"
              }
            },
            {
              "name": "serphouse_yahoo_news",
              "title": "Serphouse Yahoo News Search",
              "description": "Run a realtime Yahoo news search via POST /yahoo-news.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "properties": {
                  "device": {
                    "default": "desktop",
                    "enum": [
                      "desktop",
                      "mobile"
                    ],
                    "type": "string"
                  },
                  "domain": {
                    "default": "uk.yahoo.com",
                    "description": "Regional Yahoo domain from serphouse_domain_list, for example uk.yahoo.com or fr.yahoo.com. Do not use yahoo.com.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "lang": {
                    "default": "lang_en",
                    "minLength": 1,
                    "type": "string"
                  },
                  "no_trace": {
                    "anyOf": [
                      {
                        "const": 0,
                        "type": "number"
                      },
                      {
                        "const": 1,
                        "type": "number"
                      },
                      {
                        "const": "0",
                        "type": "string"
                      },
                      {
                        "const": "1",
                        "type": "string"
                      },
                      {
                        "const": "true",
                        "type": "string"
                      },
                      {
                        "const": "false",
                        "type": "string"
                      },
                      {
                        "const": true,
                        "type": "boolean"
                      },
                      {
                        "const": false,
                        "type": "boolean"
                      }
                    ],
                    "description": "Enterprise only. Enables NoTrace mode when set to 1 or true."
                  },
                  "page": {
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991,
                    "type": "integer"
                  },
                  "q": {
                    "description": "Search phrase to query.",
                    "minLength": 1,
                    "type": "string"
                  }
                },
                "required": [
                  "q"
                ],
                "type": "object"
              }
            },
            {
              "name": "serphouse_serp_google_advanced",
              "title": "Serphouse Google Advanced SERP",
              "description": "SEO ranking checks: fetch up to 100 Google results in one request. Use max_pages 1–10 (~10 results per page). For general web search use serphouse_search; use this when rank position beyond the top 10 is needed.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "properties": {
                  "date_range": {
                    "description": "Date range as YYYY-MM-DD,YYYY-MM-DD or one of h, d, w, m, y.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "device": {
                    "default": "desktop",
                    "enum": [
                      "desktop",
                      "mobile"
                    ],
                    "type": "string"
                  },
                  "domain": {
                    "default": "google.com",
                    "minLength": 1,
                    "type": "string"
                  },
                  "gfilter": {
                    "anyOf": [
                      {
                        "const": 0,
                        "type": "number"
                      },
                      {
                        "const": 1,
                        "type": "number"
                      },
                      {
                        "const": "0",
                        "type": "string"
                      },
                      {
                        "const": "1",
                        "type": "string"
                      }
                    ]
                  },
                  "lang": {
                    "default": "en",
                    "minLength": 1,
                    "type": "string"
                  },
                  "loc": {
                    "description": "Required unless loc_id is provided. Location name, for example Austin,Texas,United States. Provide exactly one of loc or loc_id.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "loc_id": {
                    "anyOf": [
                      {
                        "exclusiveMinimum": 0,
                        "maximum": 9007199254740991,
                        "type": "integer"
                      },
                      {
                        "minLength": 1,
                        "pattern": "^\\d+$",
                        "type": "string"
                      }
                    ],
                    "description": "Required unless loc is provided. Serphouse location id from serphouse_location_search. Provide exactly one of loc_id or loc."
                  },
                  "max_pages": {
                    "default": 10,
                    "maximum": 10,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "page": {
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991,
                    "type": "integer"
                  },
                  "q": {
                    "description": "Search phrase to query.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "serp_type": {
                    "default": "web",
                    "enum": [
                      "web",
                      "news",
                      "image",
                      "shop"
                    ],
                    "type": "string"
                  },
                  "verbatim": {
                    "anyOf": [
                      {
                        "const": 0,
                        "type": "number"
                      },
                      {
                        "const": 1,
                        "type": "number"
                      },
                      {
                        "const": "0",
                        "type": "string"
                      },
                      {
                        "const": "1",
                        "type": "string"
                      }
                    ]
                  }
                },
                "required": [
                  "q"
                ],
                "type": "object"
              }
            },
            {
              "name": "serphouse_google_jobs",
              "title": "Serphouse Google Jobs",
              "description": "Run a realtime Google Jobs search.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "properties": {
                  "date_range": {
                    "minLength": 1,
                    "type": "string"
                  },
                  "domain": {
                    "default": "google.com",
                    "minLength": 1,
                    "type": "string"
                  },
                  "lang": {
                    "default": "en",
                    "minLength": 1,
                    "type": "string"
                  },
                  "loc": {
                    "description": "Required unless loc_id is provided. Location name, for example Austin,Texas,United States. Provide exactly one of loc or loc_id.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "loc_id": {
                    "anyOf": [
                      {
                        "exclusiveMinimum": 0,
                        "maximum": 9007199254740991,
                        "type": "integer"
                      },
                      {
                        "minLength": 1,
                        "pattern": "^\\d+$",
                        "type": "string"
                      }
                    ],
                    "description": "Required unless loc is provided. Serphouse location id from serphouse_location_search. Provide exactly one of loc_id or loc."
                  },
                  "q": {
                    "minLength": 1,
                    "type": "string"
                  }
                },
                "required": [
                  "q"
                ],
                "type": "object"
              }
            },
            {
              "name": "serphouse_google_autocomplete",
              "title": "Serphouse Google Autocomplete",
              "description": "Get realtime localized Google autocomplete suggestions.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "properties": {
                  "client": {
                    "default": "chrome",
                    "enum": [
                      "chrome",
                      "chrome-omni",
                      "home_page",
                      "safari",
                      "firefox",
                      "youtube"
                    ],
                    "type": "string"
                  },
                  "lang": {
                    "default": "en",
                    "minLength": 1,
                    "type": "string"
                  },
                  "loc": {
                    "description": "Location name used to localize suggestions.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "q": {
                    "minLength": 1,
                    "type": "string"
                  }
                },
                "required": [
                  "q",
                  "loc"
                ],
                "type": "object"
              }
            },
            {
              "name": "serphouse_google_videos",
              "title": "Serphouse Google Videos",
              "description": "Run a realtime Google Videos search with optional video filters.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "properties": {
                  "date_range": {
                    "description": "Date range as YYYY-MM-DD,YYYY-MM-DD or one of h, d, w, m, y.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "device": {
                    "default": "desktop",
                    "enum": [
                      "desktop",
                      "mobile"
                    ],
                    "type": "string"
                  },
                  "domain": {
                    "default": "google.com",
                    "minLength": 1,
                    "type": "string"
                  },
                  "lang": {
                    "default": "en",
                    "minLength": 1,
                    "type": "string"
                  },
                  "loc": {
                    "description": "Required unless loc_id is provided. Location name, for example Austin,Texas,United States. Provide exactly one of loc or loc_id.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "loc_id": {
                    "anyOf": [
                      {
                        "exclusiveMinimum": 0,
                        "maximum": 9007199254740991,
                        "type": "integer"
                      },
                      {
                        "minLength": 1,
                        "pattern": "^\\d+$",
                        "type": "string"
                      }
                    ],
                    "description": "Required unless loc is provided. Serphouse location id from serphouse_location_search. Provide exactly one of loc_id or loc."
                  },
                  "page": {
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991,
                    "type": "integer"
                  },
                  "q": {
                    "description": "Search phrase to query.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "video_captions": {
                    "const": "captioned",
                    "type": "string"
                  },
                  "video_duration": {
                    "enum": [
                      "short",
                      "medium",
                      "long"
                    ],
                    "type": "string"
                  },
                  "video_quality": {
                    "const": "high",
                    "type": "string"
                  }
                },
                "required": [
                  "q"
                ],
                "type": "object"
              }
            },
            {
              "name": "serphouse_google_short_videos",
              "title": "Serphouse Google Short Videos",
              "description": "Run a realtime Google Short Videos search.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "properties": {
                  "date_range": {
                    "description": "Date range as YYYY-MM-DD,YYYY-MM-DD or one of h, d, w, m, y.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "device": {
                    "default": "desktop",
                    "enum": [
                      "desktop",
                      "mobile"
                    ],
                    "type": "string"
                  },
                  "domain": {
                    "default": "google.com",
                    "minLength": 1,
                    "type": "string"
                  },
                  "lang": {
                    "default": "en",
                    "minLength": 1,
                    "type": "string"
                  },
                  "loc": {
                    "description": "Required unless loc_id is provided. Location name, for example Austin,Texas,United States. Provide exactly one of loc or loc_id.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "loc_id": {
                    "anyOf": [
                      {
                        "exclusiveMinimum": 0,
                        "maximum": 9007199254740991,
                        "type": "integer"
                      },
                      {
                        "minLength": 1,
                        "pattern": "^\\d+$",
                        "type": "string"
                      }
                    ],
                    "description": "Required unless loc is provided. Serphouse location id from serphouse_location_search. Provide exactly one of loc_id or loc."
                  },
                  "page": {
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991,
                    "type": "integer"
                  },
                  "q": {
                    "description": "Search phrase to query.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "video_captions": {
                    "const": "captioned",
                    "type": "string"
                  },
                  "video_quality": {
                    "const": "high",
                    "type": "string"
                  }
                },
                "required": [
                  "q"
                ],
                "type": "object"
              }
            },
            {
              "name": "serphouse_google_forums",
              "title": "Serphouse Google Forums",
              "description": "Run a realtime Google Forums search for discussions and community results.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "properties": {
                  "date_range": {
                    "description": "Date range as YYYY-MM-DD,YYYY-MM-DD or one of h, d, w, m, y.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "device": {
                    "default": "desktop",
                    "enum": [
                      "desktop",
                      "mobile"
                    ],
                    "type": "string"
                  },
                  "domain": {
                    "default": "google.com",
                    "minLength": 1,
                    "type": "string"
                  },
                  "lang": {
                    "default": "en",
                    "minLength": 1,
                    "type": "string"
                  },
                  "loc": {
                    "description": "Required unless loc_id is provided. Location name, for example Austin,Texas,United States. Provide exactly one of loc or loc_id.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "loc_id": {
                    "anyOf": [
                      {
                        "exclusiveMinimum": 0,
                        "maximum": 9007199254740991,
                        "type": "integer"
                      },
                      {
                        "minLength": 1,
                        "pattern": "^\\d+$",
                        "type": "string"
                      }
                    ],
                    "description": "Required unless loc is provided. Serphouse location id from serphouse_location_search. Provide exactly one of loc_id or loc."
                  },
                  "page": {
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991,
                    "type": "integer"
                  },
                  "q": {
                    "description": "Search phrase to query.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "verbatim": {
                    "anyOf": [
                      {
                        "const": 0,
                        "type": "number"
                      },
                      {
                        "const": 1,
                        "type": "number"
                      },
                      {
                        "const": "0",
                        "type": "string"
                      },
                      {
                        "const": "1",
                        "type": "string"
                      }
                    ]
                  }
                },
                "required": [
                  "q"
                ],
                "type": "object"
              }
            },
            {
              "name": "serphouse_google_local",
              "title": "Serphouse Google Local",
              "description": "Run a realtime Google Local search for local business results.",
              "inputSchema": {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "properties": {
                  "domain": {
                    "default": "google.com",
                    "minLength": 1,
                    "type": "string"
                  },
                  "lang": {
                    "default": "en",
                    "minLength": 1,
                    "type": "string"
                  },
                  "loc": {
                    "description": "Required unless loc_id is provided. Location name, for example Austin,Texas,United States. Provide exactly one of loc or loc_id.",
                    "minLength": 1,
                    "type": "string"
                  },
                  "loc_id": {
                    "anyOf": [
                      {
                        "exclusiveMinimum": 0,
                        "maximum": 9007199254740991,
                        "type": "integer"
                      },
                      {
                        "minLength": 1,
                        "pattern": "^\\d+$",
                        "type": "string"
                      }
                    ],
                    "description": "Required unless loc is provided. Serphouse location id from serphouse_location_search. Provide exactly one of loc_id or loc."
                  },
                  "page": {
                    "exclusiveMinimum": 0,
                    "maximum": 9007199254740991,
                    "type": "integer"
                  },
                  "q": {
                    "minLength": 1,
                    "type": "string"
                  }
                },
                "required": [
                  "q"
                ],
                "type": "object"
              }
            }
          ],
          "schemaTokens": 6824,
          "changedAt": "2026-11-07T01:47:41.660458875Z",
          "check": {
            "checker": "anchor-check/1.0",
            "totalTokens": 6824,
            "counts": {
              "error": 0,
              "note": 1,
              "warn": 43
            },
            "findings": [
              {
                "rule": "TC11",
                "severity": "warn",
                "tool": "serphouse_bing_image",
                "message": "2 parameters without a description: lang, page",
                "fix": "Describe each one: format, units, an example, and what happens when it's left out."
              },
              {
                "rule": "TC11",
                "severity": "warn",
                "tool": "serphouse_bing_news",
                "message": "3 parameters without a description: device, lang, page",
                "fix": "Describe each one: format, units, an example, and what happens when it's left out."
              },
              {
                "rule": "TC11",
                "severity": "warn",
                "tool": "serphouse_bing_web",
                "message": "3 parameters without a description: date_range, device, page",
                "fix": "Describe each one: format, units, an example, and what happens when it's left out."
              },
              {
                "rule": "TC11",
                "severity": "warn",
                "tool": "serphouse_google_autocomplete",
                "message": "3 parameters without a description: client, lang, q",
                "fix": "Describe each one: format, units, an example, and what happens when it's left out."
              },
              {
                "rule": "TC11",
                "severity": "warn",
                "tool": "serphouse_google_forums",
                "message": "5 parameters without a description: device, domain, lang, page, verbatim",
                "fix": "Describe each one: format, units, an example, and what happens when it's left out."
              },
              {
                "rule": "TC11",
                "severity": "warn",
                "tool": "serphouse_google_image",
                "message": "4 parameters without a description: date_range, domain, lang, page",
                "fix": "Describe each one: format, units, an example, and what happens when it's left out."
              },
              {
                "rule": "TC11",
                "severity": "warn",
                "tool": "serphouse_google_jobs",
                "message": "4 parameters without a description: date_range, domain, lang, q",
                "fix": "Describe each one: format, units, an example, and what happens when it's left out."
              },
              {
                "rule": "TC11",
                "severity": "warn",
                "tool": "serphouse_google_local",
                "message": "4 parameters without a description: domain, lang, page, q",
                "fix": "Describe each one: format, units, an example, and what happens when it's left out."
              },
              {
                "rule": "TC11",
                "severity": "warn",
                "tool": "serphouse_google_news",
                "message": "5 parameters without a description: date_range, device, domain, lang, page",
                "fix": "Describe each one: format, units, an example, and what happens when it's left out."
              },
              {
                "rule": "TC11",
                "severity": "warn",
                "tool": "serphouse_google_shop",
                "message": "3 parameters without a description: domain, lang, page",
                "fix": "Describe each one: format, units, an example, and what happens when it's left out."
              },
              {
                "rule": "TC11",
                "severity": "warn",
                "tool": "serphouse_google_short_videos",
                "message": "6 parameters without a description: device, domain, lang, page, video_captions, video_quality",
                "fix": "Describe each one: format, units, an example, and what happens when it's left out."
              },
              {
                "rule": "TC11",
                "severity": "warn",
                "tool": "serphouse_google_videos",
                "message": "7 parameters without a description: device, domain, lang, page, video_captions, video_duration and 1 more",
                "fix": "Describe each one: format, units, an example, and what happens when it's left out."
              },
              {
                "rule": "TC11",
                "severity": "warn",
                "tool": "serphouse_google_web",
                "message": "7 parameters without a description: device, domain, gfilter, lang, num_result, page and 1 more",
                "fix": "Describe each one: format, units, an example, and what happens when it's left out."
              },
              {
                "rule": "TC11",
                "severity": "warn",
                "tool": "serphouse_google_web_lite",
                "message": "4 parameters without a description: domain, lang, page, verbatim",
                "fix": "Describe each one: format, units, an example, and what happens when it's left out."
              },
              {
                "rule": "TC11",
                "severity": "warn",
                "tool": "serphouse_location_search",
                "message": "1 parameter without a description: type",
                "fix": "Describe each one: format, units, an example, and what happens when it's left out."
              },
              {
                "rule": "TC11",
                "severity": "warn",
                "tool": "serphouse_search",
                "message": "4 parameters without a description: domain, lang, page, verbatim",
                "fix": "Describe each one: format, units, an example, and what happens when it's left out."
              },
              {
                "rule": "TC11",
                "severity": "warn",
                "tool": "serphouse_serp_google_advanced",
                "message": "8 parameters without a description: device, domain, gfilter, lang, max_pages, page and 2 more",
                "fix": "Describe each one: format, units, an example, and what happens when it's left out."
              },
              {
                "rule": "TC11",
                "severity": "warn",
                "tool": "serphouse_yahoo_image",
                "message": "2 parameters without a description: lang, page",
                "fix": "Describe each one: format, units, an example, and what happens when it's left out."
              },
              {
                "rule": "TC11",
                "severity": "warn",
                "tool": "serphouse_yahoo_news",
                "message": "3 parameters without a description: device, lang, page",
                "fix": "Describe each one: format, units, an example, and what happens when it's left out."
              },
              {
                "rule": "TC11",
                "severity": "warn",
                "tool": "serphouse_yahoo_web",
                "message": "2 parameters without a description: device, page",
                "fix": "Describe each one: format, units, an example, and what happens when it's left out."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "serphouse_account_info",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Its name starts with \"info\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "serphouse_bing_image",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "serphouse_bing_news",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "serphouse_bing_web",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "serphouse_domain_list",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Its name starts with \"list\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "serphouse_google_autocomplete",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "serphouse_google_forums",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "serphouse_google_image",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "serphouse_google_jobs",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "serphouse_google_local",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "serphouse_google_news",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "serphouse_google_shop",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "serphouse_google_short_videos",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "serphouse_google_videos",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "serphouse_google_web",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "serphouse_google_web_lite",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "serphouse_language_list",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Its name starts with \"list\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "serphouse_location_search",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Its name starts with \"search\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "serphouse_search",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Its name starts with \"search\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "serphouse_serp_google_advanced",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "serphouse_yahoo_image",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "serphouse_yahoo_news",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
              },
              {
                "rule": "TC16",
                "severity": "warn",
                "tool": "serphouse_yahoo_web",
                "message": "no readOnlyHint or destructiveHint",
                "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
              },
              {
                "rule": "TC24",
                "severity": "note",
                "message": "23 of 23 tools have no outputSchema",
                "fix": "Declare outputSchema for tools that return structured data, and return structuredContent that matches it."
              }
            ]
          }
        },
        "updatedAt": "2026-11-07T18:20:53.888566191Z"
      }
    },
    "edges": [
      {
        "by": 64,
        "category": "maintenance",
        "leads": "parallel-search-api",
        "name": "Maintenance \u0026 community",
        "reasons": {
          "a": "parallel-web 1.3.7 for Python on 2026-10-23 and for TypeScript on 2026-10-28, and changelog entries on 19 and 26 October, the second launching the Decisions API (30). Counted from the tags and the changelog, the 90 days from 3 August hold Python SDK releases 1.3.1 to 1.3.7, TypeScript 1.3.1 to 1.3.7 and ten changelog entries from 19 August to 26 October (20). The SDK releases since 1.3.5 are dependency bumps. Closed service with a changelog and support@parallel.ai. We didn't test whether support answers (12). Current Python and TypeScript SDKs, and ai.parallel/search-mcp and ai.parallel/task-mcp in the official registry (15). The Python SDK runs lint and build in CI on push, plus a workflow that detects breaking changes (10).",
          "b": "Read for a closed service, with its repositories read as code. No changelog or dated API change was found. The newest release is MCP server 1.1.0 on 6 July 2026, 123 days before 6 November, and the last commit in its repository was on 22 July (10). No release or dated change in the 90 days from 8 August; the about page's 2026 entry (Forums, Place Details and Scraper APIs) is undated (0). No changelog; support by email. Issues weren't read, since the GitHub API refused us for its rate limit (5 of 25). Not in the official MCP registry, though the repository's server.json names io.github.SERPHouse/serphouse-mcp. Node.js SDK last changed 24 June 2026, PHP SDK 10 May 2024, and no Python SDK repository was found under the SERPHouse organisation (5 of 15). The MCP repository has an npm publish workflow and no tests (3 of 10). 10 + 0 + 5 + 5 + 3 = 23."
        },
        "scores": {
          "a": 87,
          "b": 23
        }
      },
      {
        "by": 35,
        "category": "reliability",
        "leads": "parallel-search-api",
        "name": "Reliability",
        "reasons": {
          "a": "incident.io page at status.parallel.ai with Search, Task, Chat, Monitor, FindAll and Entity Search components and history (20). The feed, re-read on 1 November, has nothing after 13 October, so the 90 days from 3 August hold the same four incidents, all partial or degraded. Elevated 503s on 6 August, about an hour of Task API latency on 2 September, intermittent 4xx errors on 7 September, and transient 502s from the network gateway on 13 October, degraded performance from 01:23 to 01:43 UTC. Most have no duration listed (20). Published limits, 600 a minute for Search, Image Search, Extract, Decisions and Entity Search, 2,000 for Tasks, 300 for Chat and Monitor (15). The errors page marks 429 as retryable with exponential backoff, but there's no `Retry-After` and no idempotency guidance for creating Task runs, which the SDKs retry twice by default (10). No SLA found (0). Search, Extract and Task are GA (10).",
          "b": "Read with the hosted lines. No status page is linked from the site or docs, and status.serphouse.com did not answer on 6 November 2026 (0). No readable incident history (5). Rate limits published, 60 requests a minute and 60 concurrent on every self-serve plan (15). 429 is documented as 'slow down', and a 200 can carry `\"status\": \"error\"` with 'Please try again', with no Retry-After or backoff guidance. Failed requests aren't charged (5 of 15). The pricing page lists a 99.99% uptime SLA on Basic and Regular and the docs a 99.95% one, but no SLA terms or credits were found in the terms (5 of 10). Generally available (10). 0 + 5 + 15 + 5 + 5 + 10 = 40."
        },
        "scores": {
          "a": 75,
          "b": 40
        }
      },
      {
        "by": 35,
        "category": "payments",
        "leads": "parallel-search-api",
        "name": "Payments \u0026 pricing",
        "reasons": {
          "a": "Parallel runs a separate gateway at parallelmpp.dev that takes x402 (USDC on Base) and MPP (Stripe or Tempo) for search and extract at $0.01 and an ultra task at $0.30. Our unpaid POST to /api/search on 6 October returned 402 with an x402 v2 challenge for 10000 base units on eip155:8453 and a Tempo MPP challenge. Nothing on api.parallel.ai, and the gateway sells one price per endpoint with no mode choice, so partial (25). Per-unit prices published without login (20). Up to 5,000 free requests a month, $5 monthly credit and up to $80 at signup on the pricing page, which still doesn't say whether a card is needed (10). The hosted Search MCP works with no key, and the gateway needs only a wallet (20).",
          "b": "No x402, MPP or L402 (0). Per-1,000 prices for SERP, autocomplete and top-100 requests published without login (20). Free trial of 4,000 credits for 7 days, 'No Credit Card Required' (20). A person signs up in a browser and confirms an email (0). 0 + 20 + 20 + 0 = 40."
        },
        "scores": {
          "a": 75,
          "b": 40
        }
      },
      {
        "by": 34,
        "category": "security",
        "leads": "parallel-search-api",
        "name": "Security \u0026 auth",
        "reasons": {
          "a": "API key in `x-api-key`. The Search MCP takes a Bearer key or OAuth at /mcp-oauth. We found no key scopes (20). Every Search and Extract action is a read, and Task tools live in a separate MCP server, so the search server is a read-only subset (15). Excerpts and fetched pages are untrusted web text, and the docs index has no prompt-injection guidance (0). No audit log found (0). The privacy policy shows a SOC 2 badge and links trust.parallel.ai, which rendered only its title to our reader on 6 October. security.txt is 404 on parallel.ai and docs.parallel.ai, and no bug bounty found (10).",
          "b": "One key per account, one account per user, no scopes or rotation found (10). The REST API documents `api_token` in the query string and the hosted MCP server takes the key only in its URL path, less 10 (0 of 30). Searches only read, with no read-only or restricted key (8 of 20). Results are third-party snippets and AI Overview text, with no prompt-injection guidance (0). An account tool shows plan and credit usage; no per-call log was found (3 of 15). No security.txt (404), disclosure policy, bug bounty or certification found (0 of 20). 0 + 8 + 0 + 3 + 0 = 11."
        },
        "scores": {
          "a": 45,
          "b": 11
        }
      },
      {
        "by": 28,
        "category": "schema",
        "leads": "parallel-search-api",
        "name": "Schema \u0026 documentation",
        "reasons": {
          "a": "Public OpenAPI at docs.parallel.ai/public-openapi.json, linked from llms.txt (25). llms.txt and Markdown pages (10). A live `tools/list` on search.parallel.ai/mcp on 17 October and again on 1 November returned the two definitions, and the newer Parallel MCP server at mcp.parallel.ai adds `web_decisions`, whose description says when to use web_search instead. `web_search` states its purpose and ideal uses, and `web_fetch` says to use it \"only when web_search excerpts are insufficient\". The docs add that domain filters are hard filters that can cut quality. `web_search` has no when-not-to line of its own (17). Typed JSON Schema inputs with required fields and an output schema on both tools, `mode` is an enum in the API, and Task output schemas are JSON Schema. The MCP inputs carry no enums (12). The errors page lists each code with whether to retry and what to do, and 422s carry a structured `detail` (15). A dated changelog, newest entry 26 October 2026 (Decisions API) after 19 October (EU data residency), and beta headers retire on dated entries (15).",
          "b": "No OpenAPI or similar contract for the REST API. The MCP server's tools carry typed Zod schemas, published in the source and a static server card (18 of 25). llms.txt at the site and the docs, and every docs page as Markdown (10). MCP tool descriptions say which tool to use for what, such as `serphouse_google_web` when device or `num_result` is needed, while the docs pages lead with marketing lines such as 'Unlock captivating Google video content' (12 of 20). Enums for device, SERP type, engine and video duration, defaults and 37 described parameters (11 of 15). A status code table and request examples per engine, with a generic error body (12 of 15). No changelog or API versioning; only the MCP server has tags (3 of 15). 18 + 10 + 12 + 11 + 12 + 3 = 66."
        },
        "scores": {
          "a": 94,
          "b": 66
        }
      },
      {
        "by": 23,
        "category": "ergonomics",
        "leads": "parallel-search-api",
        "name": "Agent ergonomics",
        "reasons": {
          "a": "The Search MCP has two tools, about 5,700 characters of names, descriptions and input schemas on 1 November, and the Parallel MCP server lists three without a key (about 9,700 characters) and a fourth, `web_research`, after sign-in. `web_fetch` returns excerpts unless `full_content` is set, and the docs cap excerpts at roughly 25,000 characters a call and warn full pages can run to tens of thousands of tokens (25). Result counts, excerpt settings and source policies for domains and paths (18). The errors table gives each code a retry column and a resolution, with troubleshooting for 402 and 429 and a structured `detail` on 422 (20). Both Search MCP tools carry readOnlyHint true, destructiveHint false and idempotentHint true in the live `tools/list`, and searches are safe to repeat. There's still no idempotency key for Task creation, the SDKs retry creates on 429 and 5xx, and the Task MCP needs a key, so its annotations weren't read (14). Python and TypeScript SDKs, but `mode` defaults to advanced, the $5 per 1,000 tier, when you leave it out (10).",
          "b": "23 MCP tools with no toolsets or filtering (15 of 25). `num_result`, `max_pages`, paging, device, location, language, date and video filters (16 of 20). Status codes are tabulated, but a 200 can also mean an error and the body carries only 'Please try again' (10 of 20). Searches only read and failed requests aren't charged, but the MCP tools carry no readOnlyHint or other annotations (10 of 20). `serphouse_search` needs only `q` and defaults to the US; most other tools need `loc` or `loc_id`. Official Node.js, PHP and Python SDKs are documented (13 of 15). 15 + 16 + 10 + 10 + 13 = 64."
        },
        "scores": {
          "a": 87,
          "b": 64
        }
      }
    ],
    "facts": [
      {
        "a": "HTTP API",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "Parallel Web Systems",
        "b": "Patoliya Infotech LLP",
        "name": "Vendor"
      },
      {
        "a": "https://api.parallel.ai/v1/search",
        "b": "https://mcp.serphouse.com/YOUR_API_KEY/mcp",
        "name": "Hosted endpoint"
      },
      {
        "a": "HTTP, Streamable HTTP",
        "b": "Streamable HTTP, stdio",
        "name": "Transports"
      },
      {
        "a": "OAuth or key",
        "b": "API key",
        "name": "Auth"
      },
      {
        "a": "Freemium",
        "b": "Paid",
        "name": "Pricing"
      },
      {
        "a": "$1 per 1,000 requests",
        "b": "not published",
        "name": "Price for web search"
      },
      {
        "a": "payer tooling only",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "6",
        "b": "23",
        "name": "Tools exposed"
      },
      {
        "a": "yes",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "llms.txt"
      },
      {
        "a": "ai.parallel/search-mcp",
        "b": "not listed",
        "name": "MCP registry"
      },
      {
        "a": "2026-10-28",
        "b": "2026-07-06",
        "name": "Last release"
      },
      {
        "a": "2026-10-17",
        "b": "no date given",
        "name": "Terms last updated"
      },
      {
        "a": "2026-08-11",
        "b": "no date given",
        "name": "Privacy policy last updated"
      },
      {
        "a": "yes",
        "b": "not found in the text",
        "name": "Customer content may train models"
      },
      {
        "a": "not found in the text",
        "b": "yes",
        "name": "Terms restrict automated access"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "not found in the text",
        "b": "yes",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "28 stars, 250k npm/wk, 994k PyPI/wk",
        "b": "none",
        "name": "Popularity"
      },
      {
        "a": "3.6/5 (8)",
        "b": "none",
        "name": "Agent reviews"
      }
    ],
    "faq": [
      {
        "answer": "Parallel Search and Task APIs scores 75 (BB) on agent readiness against SERPHouse's 42.4 (E), and leads in every scored category.",
        "question": "Which is better for AI agents, Parallel Search and Task APIs or SERPHouse?"
      },
      {
        "answer": "Parallel Search and Task APIs takes an API key or an OAuth sign-in. SERPHouse needs an API key.",
        "question": "Do Parallel Search and Task APIs and SERPHouse need an API key?"
      },
      {
        "answer": "Yes. Parallel Search and Task APIs has a hosted endpoint at https://api.parallel.ai/v1/search and SERPHouse at https://mcp.serphouse.com/YOUR_API_KEY/mcp.",
        "question": "Can an agent call Parallel Search and Task APIs and SERPHouse without installing anything?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Reliability, 75 against 40",
          "Schema \u0026 documentation, 94 against 66",
          "Agent ergonomics, 87 against 64",
          "Security \u0026 auth, 45 against 11",
          "Payments \u0026 pricing, 75 against 40",
          "Maintenance \u0026 community, 87 against 23",
          "Transparency \u0026 trust, 65 against 50"
        ],
        "also": [
          "Agent-ready, a grade of BB or better"
        ],
        "goodFor": "Agents that mix quick search with long research or enrichment jobs and want one vendor and one bill.",
        "slug": "parallel-search-api",
        "watchFor": "Search defaults to advanced mode at $5 per 1,000 when `mode` is left out"
      },
      {
        "aheadOn": null,
        "also": [
          "Runs on your own machine",
          "Free to start without a card"
        ],
        "goodFor": "Low-cost Google, Bing and Yahoo result parsing for SEO and rank tracking, with many Google verticals.",
        "slug": "serphouse",
        "watchFor": "The hosted MCP server takes the API key only in its URL path, and the REST API also accepts `api_token` in the query string"
      }
    ],
    "history": {
      "parallel-search-api": [
        {
          "causes": [
            "method"
          ],
          "date": "2026-10-30",
          "delta": -0.1,
          "from": 75.1,
          "fromGrade": "BB",
          "to": 75,
          "toGrade": "BB"
        },
        {
          "causes": [
            "method"
          ],
          "date": "2026-10-27",
          "delta": 0.1,
          "from": 75,
          "fromGrade": "BB",
          "to": 75.1,
          "toGrade": "BB"
        },
        {
          "causes": [
            "evidence"
          ],
          "date": "2026-10-17",
          "delta": 1,
          "from": 74,
          "fromGrade": "BB",
          "to": 75,
          "toGrade": "BB"
        }
      ],
      "serphouse": null
    },
    "job": {
      "capability": "web.search",
      "name": "Web search"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/agentcore-web-search-vs-parallel-search-api.json",
        "title": "Web Search Tool on Amazon Bedrock AgentCore vs Parallel Search and Task APIs",
        "url": "https://www.anchorterminal.com/compare/agentcore-web-search-vs-parallel-search-api"
      },
      {
        "json": "https://www.anchorterminal.com/compare/agentcore-web-search-vs-serphouse.json",
        "title": "Web Search Tool on Amazon Bedrock AgentCore vs SERPHouse",
        "url": "https://www.anchorterminal.com/compare/agentcore-web-search-vs-serphouse"
      },
      {
        "json": "https://www.anchorterminal.com/compare/bing-grounding-vs-parallel-search-api.json",
        "title": "Grounding with Bing Search vs Parallel Search and Task APIs",
        "url": "https://www.anchorterminal.com/compare/bing-grounding-vs-parallel-search-api"
      },
      {
        "json": "https://www.anchorterminal.com/compare/bing-grounding-vs-serphouse.json",
        "title": "Grounding with Bing Search vs SERPHouse",
        "url": "https://www.anchorterminal.com/compare/bing-grounding-vs-serphouse"
      },
      {
        "json": "https://www.anchorterminal.com/compare/brave-search-mcp-vs-parallel-search-api.json",
        "title": "Brave Search API + MCP vs Parallel Search and Task APIs",
        "url": "https://www.anchorterminal.com/compare/brave-search-mcp-vs-parallel-search-api"
      },
      {
        "json": "https://www.anchorterminal.com/compare/brave-search-mcp-vs-serphouse.json",
        "title": "Brave Search API + MCP vs SERPHouse",
        "url": "https://www.anchorterminal.com/compare/brave-search-mcp-vs-serphouse"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cloudflare-web-search-vs-parallel-search-api.json",
        "title": "Cloudflare Web Search API vs Parallel Search and Task APIs",
        "url": "https://www.anchorterminal.com/compare/cloudflare-web-search-vs-parallel-search-api"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cloudflare-web-search-vs-serphouse.json",
        "title": "Cloudflare Web Search API vs SERPHouse",
        "url": "https://www.anchorterminal.com/compare/cloudflare-web-search-vs-serphouse"
      },
      {
        "json": "https://www.anchorterminal.com/compare/deepseek-search-api-vs-parallel-search-api.json",
        "title": "DeepSeek Search and Fetch API vs Parallel Search and Task APIs",
        "url": "https://www.anchorterminal.com/compare/deepseek-search-api-vs-parallel-search-api"
      },
      {
        "json": "https://www.anchorterminal.com/compare/deepseek-search-api-vs-serphouse.json",
        "title": "DeepSeek Search and Fetch API vs SERPHouse",
        "url": "https://www.anchorterminal.com/compare/deepseek-search-api-vs-serphouse"
      },
      {
        "json": "https://www.anchorterminal.com/compare/exa-mcp-vs-parallel-search-api.json",
        "title": "Exa API + MCP vs Parallel Search and Task APIs",
        "url": "https://www.anchorterminal.com/compare/exa-mcp-vs-parallel-search-api"
      },
      {
        "json": "https://www.anchorterminal.com/compare/exa-mcp-vs-serphouse.json",
        "title": "Exa API + MCP vs SERPHouse",
        "url": "https://www.anchorterminal.com/compare/exa-mcp-vs-serphouse"
      },
      {
        "json": "https://www.anchorterminal.com/compare/firecrawl-mcp-vs-parallel-search-api.json",
        "title": "Firecrawl MCP vs Parallel Search and Task APIs",
        "url": "https://www.anchorterminal.com/compare/firecrawl-mcp-vs-parallel-search-api"
      },
      {
        "json": "https://www.anchorterminal.com/compare/kagi-search-vs-parallel-search-api.json",
        "title": "Kagi Search API vs Parallel Search and Task APIs",
        "url": "https://www.anchorterminal.com/compare/kagi-search-vs-parallel-search-api"
      },
      {
        "json": "https://www.anchorterminal.com/compare/kagi-search-vs-serphouse.json",
        "title": "Kagi Search API vs SERPHouse",
        "url": "https://www.anchorterminal.com/compare/kagi-search-vs-serphouse"
      },
      {
        "json": "https://www.anchorterminal.com/compare/linkup-vs-parallel-search-api.json",
        "title": "Linkup vs Parallel Search and Task APIs",
        "url": "https://www.anchorterminal.com/compare/linkup-vs-parallel-search-api"
      },
      {
        "json": "https://www.anchorterminal.com/compare/linkup-vs-serphouse.json",
        "title": "Linkup vs SERPHouse",
        "url": "https://www.anchorterminal.com/compare/linkup-vs-serphouse"
      },
      {
        "json": "https://www.anchorterminal.com/compare/mojeek-vs-parallel-search-api.json",
        "title": "Mojeek Web Search API vs Parallel Search and Task APIs",
        "url": "https://www.anchorterminal.com/compare/mojeek-vs-parallel-search-api"
      },
      {
        "json": "https://www.anchorterminal.com/compare/mojeek-vs-serphouse.json",
        "title": "Mojeek Web Search API vs SERPHouse",
        "url": "https://www.anchorterminal.com/compare/mojeek-vs-serphouse"
      },
      {
        "json": "https://www.anchorterminal.com/compare/newscatcher-vs-parallel-search-api.json",
        "title": "NewsCatcher vs Parallel Search and Task APIs",
        "url": "https://www.anchorterminal.com/compare/newscatcher-vs-parallel-search-api"
      },
      {
        "json": "https://www.anchorterminal.com/compare/parallel-search-api-vs-perplexity-search-api.json",
        "title": "Parallel Search and Task APIs vs Perplexity Search API",
        "url": "https://www.anchorterminal.com/compare/parallel-search-api-vs-perplexity-search-api"
      },
      {
        "json": "https://www.anchorterminal.com/compare/parallel-search-api-vs-searchapi-io.json",
        "title": "Parallel Search and Task APIs vs SearchAPI.io",
        "url": "https://www.anchorterminal.com/compare/parallel-search-api-vs-searchapi-io"
      },
      {
        "json": "https://www.anchorterminal.com/compare/parallel-search-api-vs-serpapi.json",
        "title": "Parallel Search and Task APIs vs SerpApi",
        "url": "https://www.anchorterminal.com/compare/parallel-search-api-vs-serpapi"
      },
      {
        "json": "https://www.anchorterminal.com/compare/parallel-search-api-vs-serper.json",
        "title": "Parallel Search and Task APIs vs Serper",
        "url": "https://www.anchorterminal.com/compare/parallel-search-api-vs-serper"
      },
      {
        "json": "https://www.anchorterminal.com/compare/parallel-search-api-vs-serpkite.json",
        "title": "Parallel Search and Task APIs vs SerpKite",
        "url": "https://www.anchorterminal.com/compare/parallel-search-api-vs-serpkite"
      },
      {
        "json": "https://www.anchorterminal.com/compare/parallel-search-api-vs-specstream.json",
        "title": "Parallel Search and Task APIs vs SpecStream",
        "url": "https://www.anchorterminal.com/compare/parallel-search-api-vs-specstream"
      },
      {
        "json": "https://www.anchorterminal.com/compare/parallel-search-api-vs-tavily-mcp.json",
        "title": "Parallel Search and Task APIs vs Tavily API + MCP",
        "url": "https://www.anchorterminal.com/compare/parallel-search-api-vs-tavily-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/parallel-search-api-vs-tinyfish-search.json",
        "title": "Parallel Search and Task APIs vs TinyFish Search",
        "url": "https://www.anchorterminal.com/compare/parallel-search-api-vs-tinyfish-search"
      },
      {
        "json": "https://www.anchorterminal.com/compare/parallel-search-api-vs-valyu.json",
        "title": "Parallel Search and Task APIs vs Valyu",
        "url": "https://www.anchorterminal.com/compare/parallel-search-api-vs-valyu"
      },
      {
        "json": "https://www.anchorterminal.com/compare/parallel-search-api-vs-you-com-api.json",
        "title": "Parallel Search and Task APIs vs You.com APIs",
        "url": "https://www.anchorterminal.com/compare/parallel-search-api-vs-you-com-api"
      },
      {
        "json": "https://www.anchorterminal.com/compare/perplexity-search-api-vs-serphouse.json",
        "title": "Perplexity Search API vs SERPHouse",
        "url": "https://www.anchorterminal.com/compare/perplexity-search-api-vs-serphouse"
      },
      {
        "json": "https://www.anchorterminal.com/compare/searchapi-io-vs-serphouse.json",
        "title": "SearchAPI.io vs SERPHouse",
        "url": "https://www.anchorterminal.com/compare/searchapi-io-vs-serphouse"
      },
      {
        "json": "https://www.anchorterminal.com/compare/serpapi-vs-serphouse.json",
        "title": "SerpApi vs SERPHouse",
        "url": "https://www.anchorterminal.com/compare/serpapi-vs-serphouse"
      },
      {
        "json": "https://www.anchorterminal.com/compare/serper-vs-serphouse.json",
        "title": "Serper vs SERPHouse",
        "url": "https://www.anchorterminal.com/compare/serper-vs-serphouse"
      },
      {
        "json": "https://www.anchorterminal.com/compare/serphouse-vs-specstream.json",
        "title": "SERPHouse vs SpecStream",
        "url": "https://www.anchorterminal.com/compare/serphouse-vs-specstream"
      },
      {
        "json": "https://www.anchorterminal.com/compare/serphouse-vs-tavily-mcp.json",
        "title": "SERPHouse vs Tavily API + MCP",
        "url": "https://www.anchorterminal.com/compare/serphouse-vs-tavily-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/serphouse-vs-tinyfish-search.json",
        "title": "SERPHouse vs TinyFish Search",
        "url": "https://www.anchorterminal.com/compare/serphouse-vs-tinyfish-search"
      },
      {
        "json": "https://www.anchorterminal.com/compare/serphouse-vs-valyu.json",
        "title": "SERPHouse vs Valyu",
        "url": "https://www.anchorterminal.com/compare/serphouse-vs-valyu"
      },
      {
        "json": "https://www.anchorterminal.com/compare/serphouse-vs-you-com-api.json",
        "title": "SERPHouse vs You.com APIs",
        "url": "https://www.anchorterminal.com/compare/serphouse-vs-you-com-api"
      },
      {
        "json": "https://www.anchorterminal.com/compare/arcmira-vs-parallel-search-api.json",
        "title": "Arcmira vs Parallel Search and Task APIs",
        "url": "https://www.anchorterminal.com/compare/arcmira-vs-parallel-search-api"
      },
      {
        "json": "https://www.anchorterminal.com/compare/grep-ai-vs-parallel-search-api.json",
        "title": "Grep AI vs Parallel Search and Task APIs",
        "url": "https://www.anchorterminal.com/compare/grep-ai-vs-parallel-search-api"
      },
      {
        "json": "https://www.anchorterminal.com/compare/fetch-reference-server-vs-parallel-search-api.json",
        "title": "Fetch (MCP reference server) vs Parallel Search and Task APIs",
        "url": "https://www.anchorterminal.com/compare/fetch-reference-server-vs-parallel-search-api"
      },
      {
        "json": "https://www.anchorterminal.com/compare/fetch-reference-server-vs-serphouse.json",
        "title": "Fetch (MCP reference server) vs SERPHouse",
        "url": "https://www.anchorterminal.com/compare/fetch-reference-server-vs-serphouse"
      },
      {
        "json": "https://www.anchorterminal.com/compare/newscatcher-vs-serphouse.json",
        "title": "NewsCatcher vs SERPHouse",
        "url": "https://www.anchorterminal.com/compare/newscatcher-vs-serphouse"
      },
      {
        "json": "https://www.anchorterminal.com/compare/serphouse-vs-serpkite.json",
        "title": "SERPHouse vs SerpKite",
        "url": "https://www.anchorterminal.com/compare/serphouse-vs-serpkite"
      }
    ],
    "panel": null,
    "scores": [
      {
        "by": 35,
        "edge": "parallel-search-api",
        "key": "reliability",
        "name": "Reliability",
        "parallel-search-api": 75,
        "serphouse": 40,
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 28,
        "edge": "parallel-search-api",
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "parallel-search-api": 94,
        "serphouse": 66,
        "weight": 13
      },
      {
        "by": 23,
        "edge": "parallel-search-api",
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "parallel-search-api": 87,
        "serphouse": 64,
        "weight": 13
      },
      {
        "by": 34,
        "edge": "parallel-search-api",
        "key": "security",
        "name": "Security \u0026 auth",
        "parallel-search-api": 45,
        "serphouse": 11,
        "weight": 14
      },
      {
        "by": 35,
        "edge": "parallel-search-api",
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "parallel-search-api": 75,
        "serphouse": 40,
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 64,
        "edge": "parallel-search-api",
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "parallel-search-api": 87,
        "serphouse": 23,
        "weight": 7
      },
      {
        "by": 15,
        "edge": "parallel-search-api",
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "parallel-search-api": 65,
        "serphouse": 50,
        "weight": 7
      }
    ],
    "summary": "Parallel Search and Task APIs scores 75 (BB) on agent readiness against SERPHouse's 42.4 (E), and leads in every scored category. Both do web search.",
    "tasks": null,
    "tutorials": [],
    "verdicts": {
      "parallel-search-api": "Fast-mode search at $1 per 1,000 with 10 excerpted results, and a keyless two-tool Search MCP annotated read-only. Search defaults to advanced mode at $5 per 1,000 when `mode` is left out, and the Customer Terms allow training on inputs and outputs.",
      "serphouse": "SERPHouse returns parsed Google, Bing and Yahoo results at published prices from $0.62 per 1,000 requests, with a 23-tool MCP server and a 4,000-credit trial without a card. The hosted MCP puts the key in its URL, there is no status page, changelog or security contact, and the terms keep search history indefinitely."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/parallel-search-api-vs-serphouse",
    "json": "https://www.anchorterminal.com/compare/parallel-search-api-vs-serphouse.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/parallel-search-api-vs-serphouse.md",
    "mcp": "https://www.anchorterminal.com/mcp",
    "slim": "https://www.anchorterminal.com/compare/parallel-search-api-vs-serphouse.min.md"
  },
  "markdown": "Parallel Search and Task APIs scores 75 (BB) on agent readiness against SERPHouse's 42.4 (E), and leads in every scored category. Both do web search.\n\n- Parallel Search and Task APIs: grade BB, 75/100, rank #73 of 1486. Markdown https://www.anchorterminal.com/tools/parallel-search-api.md · JSON https://www.anchorterminal.com/api/v1/tools/parallel-search-api.json\n- SERPHouse: grade E, 42.4/100, rank #1265 of 1486. Markdown https://www.anchorterminal.com/tools/serphouse.md · JSON https://www.anchorterminal.com/api/v1/tools/serphouse.json\n- Best web search APIs for AI agents: https://www.anchorterminal.com/best/search/index.md\n- All 308 search comparisons: https://www.anchorterminal.com/compare/search/index.md\n\n## Which one, for what\n\n### Parallel Search and Task APIs (BB)\n\nGood for: Agents that mix quick search with long research or enrichment jobs and want one vendor and one bill.\n\nAhead on:\n- Reliability, 75 against 40\n- Schema \u0026 documentation, 94 against 66\n- Agent ergonomics, 87 against 64\n- Security \u0026 auth, 45 against 11\n- Payments \u0026 pricing, 75 against 40\n- Maintenance \u0026 community, 87 against 23\n- Transparency \u0026 trust, 65 against 50\n\nAlso in its favour:\n- Agent-ready, a grade of BB or better\n\nWatch for: Search defaults to advanced mode at $5 per 1,000 when `mode` is left out\n\n### SERPHouse (E)\n\nGood for: Low-cost Google, Bing and Yahoo result parsing for SEO and rank tracking, with many Google verticals.\n\nAlso in its favour:\n- Runs on your own machine\n- Free to start without a card\n\nWatch for: The hosted MCP server takes the API key only in its URL path, and the REST API also accepts `api_token` in the query string\n\n\n## Why the edge\n\n### Maintenance \u0026 community: Parallel Search and Task APIs +64\n\n- Parallel Search and Task APIs (87): parallel-web 1.3.7 for Python on 2026-10-23 and for TypeScript on 2026-10-28, and changelog entries on 19 and 26 October, the second launching the Decisions API (30). Counted from the tags and the changelog, the 90 days from 3 August hold Python SDK releases 1.3.1 to 1.3.7, TypeScript 1.3.1 to 1.3.7 and ten changelog entries from 19 August to 26 October (20). The SDK releases since 1.3.5 are dependency bumps. Closed service with a changelog and support@parallel.ai. We didn't test whether support answers (12). Current Python and TypeScript SDKs, and ai.parallel/search-mcp and ai.parallel/task-mcp in the official registry (15). The Python SDK runs lint and build in CI on push, plus a workflow that detects breaking changes (10).\n- SERPHouse (23): Read for a closed service, with its repositories read as code. No changelog or dated API change was found. The newest release is MCP server 1.1.0 on 6 July 2026, 123 days before 6 November, and the last commit in its repository was on 22 July (10). No release or dated change in the 90 days from 8 August; the about page's 2026 entry (Forums, Place Details and Scraper APIs) is undated (0). No changelog; support by email. Issues weren't read, since the GitHub API refused us for its rate limit (5 of 25). Not in the official MCP registry, though the repository's server.json names io.github.SERPHouse/serphouse-mcp. Node.js SDK last changed 24 June 2026, PHP SDK 10 May 2024, and no Python SDK repository was found under the SERPHouse organisation (5 of 15). The MCP repository has an npm publish workflow and no tests (3 of 10). 10 + 0 + 5 + 5 + 3 = 23.\n\n### Reliability: Parallel Search and Task APIs +35\n\n- Parallel Search and Task APIs (75): incident.io page at status.parallel.ai with Search, Task, Chat, Monitor, FindAll and Entity Search components and history (20). The feed, re-read on 1 November, has nothing after 13 October, so the 90 days from 3 August hold the same four incidents, all partial or degraded. Elevated 503s on 6 August, about an hour of Task API latency on 2 September, intermittent 4xx errors on 7 September, and transient 502s from the network gateway on 13 October, degraded performance from 01:23 to 01:43 UTC. Most have no duration listed (20). Published limits, 600 a minute for Search, Image Search, Extract, Decisions and Entity Search, 2,000 for Tasks, 300 for Chat and Monitor (15). The errors page marks 429 as retryable with exponential backoff, but there's no `Retry-After` and no idempotency guidance for creating Task runs, which the SDKs retry twice by default (10). No SLA found (0). Search, Extract and Task are GA (10).\n- SERPHouse (40): Read with the hosted lines. No status page is linked from the site or docs, and status.serphouse.com did not answer on 6 November 2026 (0). No readable incident history (5). Rate limits published, 60 requests a minute and 60 concurrent on every self-serve plan (15). 429 is documented as 'slow down', and a 200 can carry `\"status\": \"error\"` with 'Please try again', with no Retry-After or backoff guidance. Failed requests aren't charged (5 of 15). The pricing page lists a 99.99% uptime SLA on Basic and Regular and the docs a 99.95% one, but no SLA terms or credits were found in the terms (5 of 10). Generally available (10). 0 + 5 + 15 + 5 + 5 + 10 = 40.\n\n### Payments \u0026 pricing: Parallel Search and Task APIs +35\n\n- Parallel Search and Task APIs (75): Parallel runs a separate gateway at parallelmpp.dev that takes x402 (USDC on Base) and MPP (Stripe or Tempo) for search and extract at $0.01 and an ultra task at $0.30. Our unpaid POST to /api/search on 6 October returned 402 with an x402 v2 challenge for 10000 base units on eip155:8453 and a Tempo MPP challenge. Nothing on api.parallel.ai, and the gateway sells one price per endpoint with no mode choice, so partial (25). Per-unit prices published without login (20). Up to 5,000 free requests a month, $5 monthly credit and up to $80 at signup on the pricing page, which still doesn't say whether a card is needed (10). The hosted Search MCP works with no key, and the gateway needs only a wallet (20).\n- SERPHouse (40): No x402, MPP or L402 (0). Per-1,000 prices for SERP, autocomplete and top-100 requests published without login (20). Free trial of 4,000 credits for 7 days, 'No Credit Card Required' (20). A person signs up in a browser and confirms an email (0). 0 + 20 + 20 + 0 = 40.\n\n### Security \u0026 auth: Parallel Search and Task APIs +34\n\n- Parallel Search and Task APIs (45): API key in `x-api-key`. The Search MCP takes a Bearer key or OAuth at /mcp-oauth. We found no key scopes (20). Every Search and Extract action is a read, and Task tools live in a separate MCP server, so the search server is a read-only subset (15). Excerpts and fetched pages are untrusted web text, and the docs index has no prompt-injection guidance (0). No audit log found (0). The privacy policy shows a SOC 2 badge and links trust.parallel.ai, which rendered only its title to our reader on 6 October. security.txt is 404 on parallel.ai and docs.parallel.ai, and no bug bounty found (10).\n- SERPHouse (11): One key per account, one account per user, no scopes or rotation found (10). The REST API documents `api_token` in the query string and the hosted MCP server takes the key only in its URL path, less 10 (0 of 30). Searches only read, with no read-only or restricted key (8 of 20). Results are third-party snippets and AI Overview text, with no prompt-injection guidance (0). An account tool shows plan and credit usage; no per-call log was found (3 of 15). No security.txt (404), disclosure policy, bug bounty or certification found (0 of 20). 0 + 8 + 0 + 3 + 0 = 11.\n\n### Schema \u0026 documentation: Parallel Search and Task APIs +28\n\n- Parallel Search and Task APIs (94): Public OpenAPI at docs.parallel.ai/public-openapi.json, linked from llms.txt (25). llms.txt and Markdown pages (10). A live `tools/list` on search.parallel.ai/mcp on 17 October and again on 1 November returned the two definitions, and the newer Parallel MCP server at mcp.parallel.ai adds `web_decisions`, whose description says when to use web_search instead. `web_search` states its purpose and ideal uses, and `web_fetch` says to use it \"only when web_search excerpts are insufficient\". The docs add that domain filters are hard filters that can cut quality. `web_search` has no when-not-to line of its own (17). Typed JSON Schema inputs with required fields and an output schema on both tools, `mode` is an enum in the API, and Task output schemas are JSON Schema. The MCP inputs carry no enums (12). The errors page lists each code with whether to retry and what to do, and 422s carry a structured `detail` (15). A dated changelog, newest entry 26 October 2026 (Decisions API) after 19 October (EU data residency), and beta headers retire on dated entries (15).\n- SERPHouse (66): No OpenAPI or similar contract for the REST API. The MCP server's tools carry typed Zod schemas, published in the source and a static server card (18 of 25). llms.txt at the site and the docs, and every docs page as Markdown (10). MCP tool descriptions say which tool to use for what, such as `serphouse_google_web` when device or `num_result` is needed, while the docs pages lead with marketing lines such as 'Unlock captivating Google video content' (12 of 20). Enums for device, SERP type, engine and video duration, defaults and 37 described parameters (11 of 15). A status code table and request examples per engine, with a generic error body (12 of 15). No changelog or API versioning; only the MCP server has tags (3 of 15). 18 + 10 + 12 + 11 + 12 + 3 = 66.\n\n### Agent ergonomics: Parallel Search and Task APIs +23\n\n- Parallel Search and Task APIs (87): The Search MCP has two tools, about 5,700 characters of names, descriptions and input schemas on 1 November, and the Parallel MCP server lists three without a key (about 9,700 characters) and a fourth, `web_research`, after sign-in. `web_fetch` returns excerpts unless `full_content` is set, and the docs cap excerpts at roughly 25,000 characters a call and warn full pages can run to tens of thousands of tokens (25). Result counts, excerpt settings and source policies for domains and paths (18). The errors table gives each code a retry column and a resolution, with troubleshooting for 402 and 429 and a structured `detail` on 422 (20). Both Search MCP tools carry readOnlyHint true, destructiveHint false and idempotentHint true in the live `tools/list`, and searches are safe to repeat. There's still no idempotency key for Task creation, the SDKs retry creates on 429 and 5xx, and the Task MCP needs a key, so its annotations weren't read (14). Python and TypeScript SDKs, but `mode` defaults to advanced, the $5 per 1,000 tier, when you leave it out (10).\n- SERPHouse (64): 23 MCP tools with no toolsets or filtering (15 of 25). `num_result`, `max_pages`, paging, device, location, language, date and video filters (16 of 20). Status codes are tabulated, but a 200 can also mean an error and the body carries only 'Please try again' (10 of 20). Searches only read and failed requests aren't charged, but the MCP tools carry no readOnlyHint or other annotations (10 of 20). `serphouse_search` needs only `q` and defaults to the US; most other tools need `loc` or `loc_id`. Official Node.js, PHP and Python SDKs are documented (13 of 15). 15 + 16 + 10 + 10 + 13 = 64.\n\n## Score by category\n\n| Category | Weight | Parallel Search and Task APIs | SERPHouse | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 75 | 40 | Parallel Search and Task APIs +35 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 94 | 66 | Parallel Search and Task APIs +28 |\n| Agent ergonomics | 13% (16.2 this run) | 87 | 64 | Parallel Search and Task APIs +23 |\n| Security \u0026 auth | 14% (17.5 this run) | 45 | 11 | Parallel Search and Task APIs +34 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 75 | 40 | Parallel Search and Task APIs +35 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 87 | 23 | Parallel Search and Task APIs +64 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 65 | 50 | Parallel Search and Task APIs +15 |\n| Negative events | ≤15 | 0 | 0 | |\n| **Total** | | **75 · BB** | **42.4 · E** | |\n\n## Facts side by side\n\n| Fact | Parallel Search and Task APIs | SERPHouse |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | Parallel Web Systems | Patoliya Infotech LLP |\n| Hosted endpoint | `https://api.parallel.ai/v1/search` | `https://mcp.serphouse.com/YOUR_API_KEY/mcp` |\n| Transports | HTTP, Streamable HTTP | Streamable HTTP, stdio |\n| Auth | OAuth or key | API key |\n| Pricing | Freemium | Paid |\n| Price for web search | $1 per 1,000 requests | not published |\n| x402 | payer tooling only | no |\n| Tools exposed | 6 | 23 |\n| Read-only variant documented | yes | no |\n| llms.txt | yes | yes |\n| MCP registry | `ai.parallel/search-mcp` | not listed |\n| Last release | 2026-10-28 | 2026-07-06 |\n| Terms last updated | 2026-10-17 | no date given |\n| Privacy policy last updated | 2026-08-11 | no date given |\n| Customer content may train models | yes | not found in the text |\n| Terms restrict automated access | not found in the text | yes |\n| Terms restrict benchmarking | not found in the text | not found in the text |\n| Terms or service can change without notice | not found in the text | yes |\n| Arbitration or class-action waiver | not found in the text | not found in the text |\n| Popularity | 28 stars, 250k npm/wk, 994k PyPI/wk | none |\n| Agent reviews | 3.6/5 (8) | none |\n\n## How the scores have moved\n\n### Parallel Search and Task APIs\n\n- -0.1 on 30 October 2026: checklist\n- +0.1 on 27 October 2026: checklist\n- +1.0 on 17 October 2026: new evidence\n\n### SERPHouse\n\nNo score change since it was listed.\n\n## Verdicts\n\n**Parallel Search and Task APIs.** Fast-mode search at $1 per 1,000 with 10 excerpted results, and a keyless two-tool Search MCP annotated read-only. Search defaults to advanced mode at $5 per 1,000 when `mode` is left out, and the Customer Terms allow training on inputs and outputs.\n\n**SERPHouse.** SERPHouse returns parsed Google, Bing and Yahoo results at published prices from $0.62 per 1,000 requests, with a 23-tool MCP server and a 4,000-credit trial without a card. The hosted MCP puts the key in its URL, there is no status page, changelog or security contact, and the terms keep search history indefinitely.\n\n## Before you call either\n\n### Parallel Search and Task APIs\n\n1. Pass `mode: \"fast\"` on every API search. Without it you pay the advanced rate. On an authenticated MCP connection, pin it with `?mode=fast`\n2. Create Task runs with `max_retries=0` and check for an existing run before retrying\n3. Give an `objective` plus two or three short `search_queries`. That's what ranks the excerpts\n4. On 402, check available balance rather than total. Running tasks reserve credit\n5. Ask for zero data retention or use the EU endpoint before sending private queries. The default terms allow training on them\n6. On Decisions, check each answer's `type` before reading it. A refusal is a 200, not an error, and a predicate is a probability you threshold yourself\n\n### SERPHouse\n\n1. Send the key as `Authorization: Bearer`, not as `api_token` in the URL\n2. Treat a 200 with `\"status\": \"error\"` and 'Please try again' as a failure and retry later\n3. Pass `loc` or `loc_id` for Google and Bing tools other than `serphouse_search`; find IDs with `serphouse_location_search`\n4. Use `serphouse_search` for plain lookups and `serphouse_serp_google_advanced` only when ranks beyond the top 10 are needed, at ten times the price\n5. Keep under 60 requests a minute on self-serve plans\n\n## Questions\n\n### Which is better for AI agents, Parallel Search and Task APIs or SERPHouse?\n\nParallel Search and Task APIs scores 75 (BB) on agent readiness against SERPHouse's 42.4 (E), and leads in every scored category.\n\n### Do Parallel Search and Task APIs and SERPHouse need an API key?\n\nParallel Search and Task APIs takes an API key or an OAuth sign-in. SERPHouse needs an API key.\n\n### Can an agent call Parallel Search and Task APIs and SERPHouse without installing anything?\n\nYes. Parallel Search and Task APIs has a hosted endpoint at https://api.parallel.ai/v1/search and SERPHouse at https://mcp.serphouse.com/YOUR_API_KEY/mcp.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/parallel-search-api-vs-serphouse.json, and with the fewest tokens: https://www.anchorterminal.com/compare/parallel-search-api-vs-serphouse.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"parallel-search-api\", \"b\": \"serphouse\"}`. From a terminal: `anchor compare parallel-search-api serphouse`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/parallel-search-api.json and https://www.anchorterminal.com/api/v1/tools/serphouse.json\n\n## Other comparisons with Parallel Search and Task APIs or SERPHouse\n\n- [Web Search Tool on Amazon Bedrock AgentCore vs Parallel Search and Task APIs](https://www.anchorterminal.com/compare/agentcore-web-search-vs-parallel-search-api.md)\n- [Web Search Tool on Amazon Bedrock AgentCore vs SERPHouse](https://www.anchorterminal.com/compare/agentcore-web-search-vs-serphouse.md)\n- [Grounding with Bing Search vs Parallel Search and Task APIs](https://www.anchorterminal.com/compare/bing-grounding-vs-parallel-search-api.md)\n- [Grounding with Bing Search vs SERPHouse](https://www.anchorterminal.com/compare/bing-grounding-vs-serphouse.md)\n- [Brave Search API + MCP vs Parallel Search and Task APIs](https://www.anchorterminal.com/compare/brave-search-mcp-vs-parallel-search-api.md)\n- [Brave Search API + MCP vs SERPHouse](https://www.anchorterminal.com/compare/brave-search-mcp-vs-serphouse.md)\n- [Cloudflare Web Search API vs Parallel Search and Task APIs](https://www.anchorterminal.com/compare/cloudflare-web-search-vs-parallel-search-api.md)\n- [Cloudflare Web Search API vs SERPHouse](https://www.anchorterminal.com/compare/cloudflare-web-search-vs-serphouse.md)\n- [DeepSeek Search and Fetch API vs Parallel Search and Task APIs](https://www.anchorterminal.com/compare/deepseek-search-api-vs-parallel-search-api.md)\n- [DeepSeek Search and Fetch API vs SERPHouse](https://www.anchorterminal.com/compare/deepseek-search-api-vs-serphouse.md)\n- [Exa API + MCP vs Parallel Search and Task APIs](https://www.anchorterminal.com/compare/exa-mcp-vs-parallel-search-api.md)\n- [Exa API + MCP vs SERPHouse](https://www.anchorterminal.com/compare/exa-mcp-vs-serphouse.md)\n- [Firecrawl MCP vs Parallel Search and Task APIs](https://www.anchorterminal.com/compare/firecrawl-mcp-vs-parallel-search-api.md)\n- [Kagi Search API vs Parallel Search and Task APIs](https://www.anchorterminal.com/compare/kagi-search-vs-parallel-search-api.md)\n- [Kagi Search API vs SERPHouse](https://www.anchorterminal.com/compare/kagi-search-vs-serphouse.md)\n- [Linkup vs Parallel Search and Task APIs](https://www.anchorterminal.com/compare/linkup-vs-parallel-search-api.md)\n- [Linkup vs SERPHouse](https://www.anchorterminal.com/compare/linkup-vs-serphouse.md)\n- [Mojeek Web Search API vs Parallel Search and Task APIs](https://www.anchorterminal.com/compare/mojeek-vs-parallel-search-api.md)\n- [Mojeek Web Search API vs SERPHouse](https://www.anchorterminal.com/compare/mojeek-vs-serphouse.md)\n- [NewsCatcher vs Parallel Search and Task APIs](https://www.anchorterminal.com/compare/newscatcher-vs-parallel-search-api.md)\n- [Parallel Search and Task APIs vs Perplexity Search API](https://www.anchorterminal.com/compare/parallel-search-api-vs-perplexity-search-api.md)\n- [Parallel Search and Task APIs vs SearchAPI.io](https://www.anchorterminal.com/compare/parallel-search-api-vs-searchapi-io.md)\n- [Parallel Search and Task APIs vs SerpApi](https://www.anchorterminal.com/compare/parallel-search-api-vs-serpapi.md)\n- [Parallel Search and Task APIs vs Serper](https://www.anchorterminal.com/compare/parallel-search-api-vs-serper.md)\n- [Parallel Search and Task APIs vs SerpKite](https://www.anchorterminal.com/compare/parallel-search-api-vs-serpkite.md)\n- [Parallel Search and Task APIs vs SpecStream](https://www.anchorterminal.com/compare/parallel-search-api-vs-specstream.md)\n- [Parallel Search and Task APIs vs Tavily API + MCP](https://www.anchorterminal.com/compare/parallel-search-api-vs-tavily-mcp.md)\n- [Parallel Search and Task APIs vs TinyFish Search](https://www.anchorterminal.com/compare/parallel-search-api-vs-tinyfish-search.md)\n- [Parallel Search and Task APIs vs Valyu](https://www.anchorterminal.com/compare/parallel-search-api-vs-valyu.md)\n- [Parallel Search and Task APIs vs You.com APIs](https://www.anchorterminal.com/compare/parallel-search-api-vs-you-com-api.md)\n- [Perplexity Search API vs SERPHouse](https://www.anchorterminal.com/compare/perplexity-search-api-vs-serphouse.md)\n- [SearchAPI.io vs SERPHouse](https://www.anchorterminal.com/compare/searchapi-io-vs-serphouse.md)\n- [SerpApi vs SERPHouse](https://www.anchorterminal.com/compare/serpapi-vs-serphouse.md)\n- [Serper vs SERPHouse](https://www.anchorterminal.com/compare/serper-vs-serphouse.md)\n- [SERPHouse vs SpecStream](https://www.anchorterminal.com/compare/serphouse-vs-specstream.md)\n- [SERPHouse vs Tavily API + MCP](https://www.anchorterminal.com/compare/serphouse-vs-tavily-mcp.md)\n- [SERPHouse vs TinyFish Search](https://www.anchorterminal.com/compare/serphouse-vs-tinyfish-search.md)\n- [SERPHouse vs Valyu](https://www.anchorterminal.com/compare/serphouse-vs-valyu.md)\n- [SERPHouse vs You.com APIs](https://www.anchorterminal.com/compare/serphouse-vs-you-com-api.md)\n- [Arcmira vs Parallel Search and Task APIs](https://www.anchorterminal.com/compare/arcmira-vs-parallel-search-api.md)\n- [Grep AI vs Parallel Search and Task APIs](https://www.anchorterminal.com/compare/grep-ai-vs-parallel-search-api.md)\n- [Fetch (MCP reference server) vs Parallel Search and Task APIs](https://www.anchorterminal.com/compare/fetch-reference-server-vs-parallel-search-api.md)\n- [Fetch (MCP reference server) vs SERPHouse](https://www.anchorterminal.com/compare/fetch-reference-server-vs-serphouse.md)\n- [NewsCatcher vs SERPHouse](https://www.anchorterminal.com/compare/newscatcher-vs-serphouse.md)\n- [SERPHouse vs SerpKite](https://www.anchorterminal.com/compare/serphouse-vs-serpkite.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": "Parallel Search and Task APIs vs SERPHouse",
        "url": ""
      }
    ],
    "description": "Parallel Search and Task scores 75 (BB) to SERPHouse's 42.4 (E) for web search. Prices, MCP, x402, uptime and agent notes side by side.",
    "facts": [
      "Parallel Search and Task APIs BB 75",
      "SERPHouse E 42.4",
      "scores"
    ],
    "h1": "Parallel Search and Task APIs vs SERPHouse",
    "image": "https://www.anchorterminal.com/assets/og/default.png",
    "path": "/compare/parallel-search-api-vs-serphouse",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Parallel Search and Task vs SERPHouse for AI agents (2026)",
    "toc": null,
    "updated": "2026-11-07",
    "url": "https://www.anchorterminal.com/compare/parallel-search-api-vs-serphouse"
  },
  "tokens": {
    "markdown": 5750,
    "slim": 3080
  },
  "version": 1
}
