# Orthogonal Search (x402) – Google SERP with Geotargeting

> Orthogonal Search (x402) – Google SERP with Geotargeting is a paid API for AI agents from x402.orthogonal.com, paid per call via x402, $0.0125/call, status unknown (last checked 2026-10-20).

Retrieve structured Google search results (SERP data) with geotargeting by country, subdivision, and city, supporting sync/async modes and cost-free pagination continuation.

## Facts

- Endpoint: GET https://x402.orthogonal.com/joinmassive/search?utm_source=zero.xyz
- Price: $0.0125/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-20
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/orthogonal-search-x402-google-serp-with-geotargeting-b111c00c
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_1wfMDGHnNoPb9VlqGhAvL

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability orthogonal-search-x402-google-serp-with-geotargeting-b111c00c
```

Example prompt: Search Google for 'best CRM software for startups' targeting the US, return 10 results per page in JSON format — and if I need more pages later, I'll pass the same parameters so we don't get charged again.

## When to prefer this

Choose this endpoint when you need structured Google SERP data with precise geographic targeting (country, subdivision, city), support for both sync and async retrieval, and cost-efficient pagination via parentRequestId. It is ideal for SEO research, competitive intelligence, local search analysis, and any workflow requiring machine-readable search results rather than raw HTML scraping.

## Known failure modes

- Invalid or missing 'terms' parameter returns an error
- Unsupported engine name (only 'google' is supported) causes failure
- Invalid country code or subdivision code returns geotargeting error
- Exceeding size limit (>100 results per page) causes validation error
- Async mode without a callback URL may result in undelivered results
- Changing non-pagination parameters while passing parentRequestId starts a new billable request
- URL parameter exceeding 2047 characters is rejected
- Payment failure via x402 protocol blocks the request

## How this service works

Retrieve search results or queue a search for later retrieval. Supports Google engine with geotargeting by country, subdivision, and city. Returns structured SERP data. Pagination billing: call the first page normally and save billing.requestId from the Orthogonal /v1/run response. For later page, offset, or cursor calls on the same logical search, pass parentRequestId with unchanged non-pagination parameters. Valid continuation calls still get their own request IDs and quoted price, but are charged 0. Changing filters starts a new billable request.

## Output

Returns structured SERP data including organic search listings, ads, AI-generated answers, and other page elements in either HTML or JSON format. Each response includes a requestId that can be used as parentRequestId for free pagination continuation calls on the same logical search.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "$schema": "https://json-schema.org/draft/2020-12/schema",
 "required": [
  "input"
 ],
 "properties": {
  "input": {
   "type": "object",
   "required": [
    "type",
    "method"
   ],
   "properties": {
    "type": {
     "type": "string",
     "const": "http"
    },
    "method": {
     "enum": [
      "GET"
     ],
     "type": "string"
    },
    "queryParams": {
     "type": "object",
     "properties": {
      "url": {
       "type": "string",
       "description": "Encoded results page URL (up to 2047 chars); overrides other params"
      },
      "city": {
       "type": "string",
       "description": "City name"
      },
      "mode": {
       "type": "string",
       "description": "sync or async mode"
      },
      "size": {
       "type": "integer",
       "description": "Results per page (0-100)"
      },
      "uule": {
       "type": "string",
       "description": "Proprietary encoded string for emulating search location"
      },
      "serps": {
       "type": "integer",
       "description": "Number of results pages (1-10, default 1)"
      },
      "terms": {
       "type": "string",
       "description": "The broad or exact word or phrase to query"
      },
      "device": {
       "type": "string",
       "description": "Device name to emulate"
      },
      "engine": {
       "type": "string",
       "description": "Search engine (google)"
      },
      "format": {
       "type": "string",
       "default": "html",
       "example": "json",
       "description": "Output format accepted by Massive: html or json. Defaults to html when omitted."
      },
      "offset": {
       "type": "integer",
       "description": "Initial results to skip For later offset pages of the same logical search, keep non-pagination parameters unchanged and pass top-level parentRequestId from the first Orthogonal /v1/run response."
      },
      "country": {
       "type": "string",
       "description": "Two-letter ISO country code"
      },
      "display": {
       "type": "string",
       "description": "Display language for the search interface"
      },
      "awaiting": {
       "type": "string",
       "description": "Lazy features to wait for (ai, answers, ads); repeatable"
      },
      "callback": {
       "type": "string",
       "description": "Encoded callback URL or SQS queue URL/ARN for async notification"
      },
      "language": {
       "type": "string",
       "description": "Language name or ISO code"
  
… (truncated)
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/orthogonal-search-x402-google-serp-with-geotargeting-b111c00c/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from x402.orthogonal.com](https://www.zero.xyz/host/x402.orthogonal.com/llms.txt)
