---
title: "Search Google"
method: POST
path: "/v1/google/search"
tags: ["Google"]
---

# Search Google

`POST /v1/google/search`

## Request

- Base URL: `https://api.prismcrawl.com`
- URL: `https://api.prismcrawl.com/v1/google/search`
- Auth: API key in header `x-api-key`

Returns normalized Google results, or encoded source HTML.

## Request body

- GoogleSearchRequest
  - `output` 'json' | 'html' | 'md' | 'null', nullable: Response content format. md returns Markdown in data.content with data.format=md; the JSON success/request envelope remains. Accept: text/markdown also selects Markdown unless output or html=true is explicit. html is an alias for html=true and retains the existing Brotli/Base64 source format.
  - `json_restrictor` string, nullable: Select fields within data.content for JSON or Markdown. Supports comma-separated paths, non-negative array indices, half-open slices [0:3] (either bound may be omitted), [] and .{nested,subqueries}. Up to128 selections and16 levels. Missing fields are omitted; selected declared fields retain their zero defaults. The request envelope and credit headers remain. Include next_page_token when pagination is needed. Incompatible with HTML output. This changes response presentation only; tracing-enabled history retains the complete JSON result.
  - `no_cache` boolean, nullable: Accepted for compatibility. Searches are always fetched without a result cache for either value; normal successful-request billing applies.
  - `query` string, required: The search query. The UTF-8 representation must not exceed 8,192 bytes; non-ASCII characters may use more than one byte. When query_encoded is true, supply a URL-encoded query value; the 8,192-byte limit applies after decoding.
  - `query_encoded` boolean, nullable: When true, query is already a URL-encoded query value and is sent without encoding it again. Use %HH escapes for reserved and non-ASCII characters; + or %20 represents a space and %2B a literal plus. Unreserved characters and !'()* may remain literal. Do not supply a URL or q= prefix. Malformed escapes, raw separators, and invalid UTF-8 are rejected. The decoded query must be nonempty and at most 8,192 UTF-8 bytes; the encoded value is limited to 24,576 characters. A query containing only unreserved characters is valid. Response search_parameters.q contains decoded text.
  - `uule` string, nullable: Raw Google-encoded location, forwarded unchanged. Accepts a w+/a+ prefix and a nonempty standard or URL-safe Base64 payload, with or without padding; existing values do not need to be converted. Mutually exclusive with location, coordinates, and radius. Google may ignore unsupported payloads; acceptance does not guarantee location targeting. Invalid types or formats return an uncharged HTTP 400 before a search is sent to Google. Normal search billing applies to accepted inputs.
  - `html` boolean, nullable: Return Brotli-compressed, Base64-encoded source HTML instead of normalized JSON.
  - `rewrite_links` boolean, nullable: Set rewrite_links to true to replace Google /goto and /url anchor links in returned and archived HTML, including HTML archived for JSON requests. Default: false. JSON results are unaffected and have always used resolved destination URLs when available.
  - `zero_trace` boolean, nullable: When true, PrismCrawl does not store the source HTML or parsed JSON. Audit and billing metadata is retained, but all other data is permanently discarded. Request history exposes only type `ZERO_TRACE`, the request HTTP status code, and whether the account was charged.
  - `device` 'mobile' | 'tablet' | 'desktop' | 'null', nullable: Search as a mobile, tablet, or desktop device.
  - `safe` 'active' | 'off' | 'null', nullable: Safe-search mode. `active` enables Google's filtering and Bing Strict SafeSearch; `off` requests unfiltered results. Search providers may still suppress content required by law or policy.
  - `color_scheme` 'light' | 'dark' | 'null', nullable: Request the provider's light or dark result-page theme. This affects source-page presentation, not ranking, and providers may ignore it.
  - `ludocid` string, nullable: Google place CID as a nonzero unsigned 64-bit decimal string. Keep it as a string to preserve precision.
  - `lsig` string, nullable: Google place signature from a local result, used to select its map or Knowledge Graph view.
  - `kgmid` string, nullable: Google Knowledge Graph entity ID beginning with /m/ or /g/. Google may use the entity’s original search context.
  - `si` string, nullable: Native Google token selecting a cached search or Knowledge Graph tab. Google may use the token’s original search context.
  - `ibp` string, nullable: Native Google layout selector, for example gwp;0,7 to expand a place Knowledge Graph.
  - `uds` string, nullable: Native Google search-filter token returned in Google’s filter links.
  - `pws` 0 | 1 | null, nullable: Requests Google personalization off (`0`) or permits it (`1`). Omit to leave Google’s default unchanged. This does not disable location, language, or device effects, and does not personalize results to a PrismCrawl account.
  - `nfpr` 0 | 1 | null, nullable: Controls Google query correction. `1` asks Google to search the submitted query without automatic spelling correction; `0` keeps normal correction behavior.
  - `filter` 0 | 1 | null, nullable: Requests Google duplicate-result filtering (`1`) or disables it (`0`). Google documents this behavior for Programmable Search, but does not guarantee it for the consumer HTML endpoint used here.
  - `lr` string, nullable: Restrict Google result documents by language using `lang_<code>` syntax. Join alternatives with `|`, for example `lang_fr|lang_de`.
  - `cr` string, nullable: Restrict Google result documents by country using `country<CC>` syntax. Join alternatives with `|`, for example `countryUS|countryCA`.
  - `start` integer, nullable: Zero-based result offset. Off-grid values are accepted.
  - `google_domain` 'google.com' | 'google.ad' | 'google.ae' | 'google.com.af' | 'google.com.ag' | 'google.al' | 'google.am' | 'google.co.ao' | 'google.com.ar' | 'google.as' | 'google.at' | 'google.com.au' | 'google.az' | 'google.ba' | 'google.com.bd' | 'google.be' | 'google.bf' | 'google.bg' | 'google.com.bh' | 'google.bi' | 'google.bj' | 'google.com.bn' | 'google.com.bo' | 'google.com.br' | 'google.bs' | 'google.bt' | 'google.co.bw' | 'google.by' | 'google.com.bz' | 'google.ca' | 'google.cd' | 'google.cf' | 'google.cg' | 'google.ch' | 'google.ci' | 'google.co.ck' | 'google.cl' | 'google.cm' | 'google.com.co' | 'google.co.cr' | 'google.com.cu' | 'google.cv' | 'google.com.cy' | 'google.cz' | 'google.de' | 'google.dj' | 'google.dk' | 'google.dm' | 'google.com.do' | 'google.dz' | 'google.com.ec' | 'google.ee' | 'google.com.eg' | 'google.es' | 'google.com.et' | 'google.fi' | 'google.com.fj' | 'google.fm' | 'google.fr' | 'google.ga' | 'google.ge' | 'google.gg' | 'google.com.gh' | 'google.com.gi' | 'google.gl' | 'google.gm' | 'google.gr' | 'google.com.gt' | 'google.gy' | 'google.com.hk' | 'google.hn' | 'google.hr' | 'google.ht' | 'google.hu' | 'google.co.id' | 'google.ie' | 'google.co.il' | 'google.im' | 'google.co.in' | 'google.iq' | 'google.is' | 'google.it' | 'google.je' | 'google.com.jm' | 'google.jo' | 'google.co.jp' | 'google.co.ke' | 'google.com.kh' | 'google.ki' | 'google.kg' | 'google.co.kr' | 'google.com.kw' | 'google.kz' | 'google.la' | 'google.com.lb' | 'google.li' | 'google.lk' | 'google.co.ls' | 'google.lt' | 'google.lu' | 'google.lv' | 'google.com.ly' | 'google.co.ma' | 'google.md' | 'google.me' | 'google.mg' | 'google.mk' | 'google.ml' | 'google.com.mm' | 'google.mn' | 'google.com.mt' | 'google.mu' | 'google.mv' | 'google.mw' | 'google.com.mx' | 'google.com.my' | 'google.co.mz' | 'google.com.na' | 'google.com.ng' | 'google.com.ni' | 'google.ne' | 'google.nl' | 'google.no' | 'google.com.np' | 'google.nr' | 'google.nu' | 'google.co.nz' | 'google.com.om' | 'google.com.pa' | 'google.com.pe' | 'google.com.pg' | 'google.com.ph' | 'google.com.pk' | 'google.pl' | 'google.pn' | 'google.com.pr' | 'google.ps' | 'google.pt' | 'google.com.py' | 'google.com.qa' | 'google.ro' | 'google.ru' | 'google.rw' | 'google.com.sa' | 'google.com.sb' | 'google.sc' | 'google.se' | 'google.com.sg' | 'google.sh' | 'google.si' | 'google.sk' | 'google.com.sl' | 'google.sn' | 'google.so' | 'google.sm' | 'google.sr' | 'google.st' | 'google.com.sv' | 'google.td' | 'google.tg' | 'google.co.th' | 'google.com.tj' | 'google.tl' | 'google.tm' | 'google.tn' | 'google.to' | 'google.com.tr' | 'google.tt' | 'google.com.tw' | 'google.co.tz' | 'google.com.ua' | 'google.co.ug' | 'google.co.uk' | 'google.com.uy' | 'google.co.uz' | 'google.com.vc' | 'google.co.ve' | 'google.co.vi' | 'google.com.vn' | 'google.vu' | 'google.ws' | 'google.rs' | 'google.co.za' | 'google.co.zm' | 'google.co.zw' | 'google.cat' | 'null', nullable: Google domain used for the search, written without a scheme or `www.` prefix. This is independent of `gl`, `hl`, `location`, and `coordinates`. Supported values follow the search-capable entries in [Google's current domain list](https://www.google.com/supported_domains); `google.cn` is excluded. Case-insensitive.
  - `gl` 'ad' | 'ae' | 'af' | 'ag' | 'ai' | 'al' | 'am' | 'an' | 'ao' | 'aq' | 'ar' | 'as' | 'at' | 'au' | 'aw' | 'ax' | 'az' | 'ba' | 'bb' | 'bd' | 'be' | 'bf' | 'bg' | 'bh' | 'bi' | 'bj' | 'bl' | 'bm' | 'bn' | 'bo' | 'bq' | 'br' | 'bs' | 'bt' | 'bv' | 'bw' | 'by' | 'bz' | 'ca' | 'cc' | 'cd' | 'cf' | 'cg' | 'ch' | 'ci' | 'ck' | 'cl' | 'cm' | 'cn' | 'co' | 'cr' | 'cs' | 'cu' | 'cv' | 'cw' | 'cx' | 'cy' | 'cz' | 'de' | 'dj' | 'dk' | 'dm' | 'do' | 'dz' | 'ec' | 'ee' | 'eg' | 'eh' | 'er' | 'es' | 'et' | 'fi' | 'fj' | 'fk' | 'fm' | 'fo' | 'fr' | 'ga' | 'gb' | 'gd' | 'ge' | 'gf' | 'gg' | 'gh' | 'gi' | 'gl' | 'gm' | 'gn' | 'gp' | 'gq' | 'gr' | 'gs' | 'gt' | 'gu' | 'gw' | 'gy' | 'hk' | 'hm' | 'hn' | 'hr' | 'ht' | 'hu' | 'id' | 'ie' | 'il' | 'im' | 'in' | 'io' | 'iq' | 'ir' | 'is' | 'it' | 'je' | 'jm' | 'jo' | 'jp' | 'ke' | 'kg' | 'kh' | 'ki' | 'km' | 'kn' | 'kp' | 'kr' | 'kw' | 'ky' | 'kz' | 'la' | 'lb' | 'lc' | 'li' | 'lk' | 'lr' | 'ls' | 'lt' | 'lu' | 'lv' | 'ly' | 'ma' | 'mc' | 'md' | 'me' | 'mf' | 'mg' | 'mh' | 'mk' | 'ml' | 'mm' | 'mn' | 'mo' | 'mp' | 'mq' | 'mr' | 'ms' | 'mt' | 'mu' | 'mv' | 'mw' | 'mx' | 'my' | 'mz' | 'na' | 'nc' | 'ne' | 'nf' | 'ng' | 'ni' | 'nl' | 'no' | 'np' | 'nr' | 'nu' | 'nz' | 'om' | 'pa' | 'pe' | 'pf' | 'pg' | 'ph' | 'pk' | 'pl' | 'pm' | 'pn' | 'pr' | 'ps' | 'pt' | 'pw' | 'py' | 'qa' | 're' | 'ro' | 'rs' | 'ru' | 'rw' | 'sa' | 'sb' | 'sc' | 'sd' | 'se' | 'sg' | 'sh' | 'si' | 'sj' | 'sk' | 'sl' | 'sm' | 'sn' | 'so' | 'sr' | 'ss' | 'st' | 'sv' | 'sx' | 'sy' | 'sz' | 'tc' | 'td' | 'tf' | 'tg' | 'th' | 'tj' | 'tk' | 'tl' | 'tm' | 'tn' | 'to' | 'tr' | 'tt' | 'tv' | 'tw' | 'tz' | 'ua' | 'ug' | 'uk' | 'um' | 'us' | 'uy' | 'uz' | 'va' | 'vc' | 've' | 'vg' | 'vi' | 'vn' | 'vu' | 'wf' | 'ws' | 'ye' | 'yt' | 'za' | 'zm' | 'zw' | 'null', nullable: Two-letter Google result-country code. Matching results are boosted rather than strictly filtered. Case-insensitive.
  - `hl` 'af' | 'sq' | 'am' | 'ar' | 'hy' | 'az' | 'bn' | 'bg' | 'my' | 'ca' | 'zh-CN' | 'zh-TW' | 'hr' | 'cs' | 'da' | 'nl' | 'en-GB' | 'en' | 'en-US' | 'et' | 'fil' | 'fi' | 'fr-CA' | 'fr' | 'ka' | 'de' | 'el' | 'gu' | 'iw' | 'he' | 'hi' | 'hu' | 'is' | 'id' | 'it' | 'ja' | 'kn' | 'kk' | 'km' | 'ko' | 'ky' | 'lo' | 'lv' | 'lt' | 'mk' | 'ms' | 'ml' | 'mr' | 'mn' | 'ne' | 'no' | 'fa' | 'pl' | 'pt-BR' | 'pt-PT' | 'pa' | 'ro' | 'ru' | 'sr-Latn' | 'sr' | 'si' | 'sk' | 'sl' | 'es-419' | 'es' | 'sw' | 'sv' | 'ta' | 'te' | 'th' | 'tr' | 'uk' | 'ur' | 'uz' | 'vi' | 'cy' | 'null', nullable: Google interface language. This can also influence result selection for international queries. Case-insensitive.
  - `location` string, nullable: An Active Google `Canonical Name` from the [pinned geo-target dataset](https://developers.google.com/static/google-ads/api/data/geo/geotargets-2026-07-16.csv.zip). Mutually exclusive with `coordinates` and `uule`.
  - `coordinates` Coordinates
    - `latitude` number, double, required
    - `longitude` number, double, required
  - `radius` integer, nullable: Radius in meters used to bias results around `coordinates`; results outside it may still appear. Requires `coordinates`. The maximum is 199 for desktop or an omitted device, and 1,000 for mobile or tablet.
  - `tbs` string, nullable: Google's native comma-separated `key:value` advanced-filter container, up to 512 characters. It supports time filters, sorting, and filters associated with a selected search tab. Relative time ranges use `qdr:<unit>[amount]`; custom inclusive ranges use `cdr:1,cd_min:M/D/YYYY,cd_max:M/D/YYYY`. Native filters may vary by search vertical and Google market. The unreliable `li` verbatim filter is not supported.
  - `tbm` 'nws' | 'vid' | 'isch' | 'shop' | 'lcl' | 'bks' | 'null', nullable: Select a supported Google search vertical using its native `tbm` code. Mutually exclusive with `udm`. News (`nws`) does not support the `site:` operator; use `/v1/google/news` for site-filtered news queries.
  - `udm` 1 | 2 | 6 | 7 | 12 | 14 | 28 | 36 | 50 | null, nullable: Select a supported Google search tab using its native numeric `udm` value: 1 (Local), 2 (Images), 6 (Forums), 7 (Videos), 12 (News), 14 (Web), 28 (Shopping), 36 (Books), or 50 (AI Mode). Availability may vary by market. Mutually exclusive with `tbm`. News (12) does not support the `site:` operator; use `/v1/google/news` for site-filtered news queries.

## Response `200`

Search completed.

- union
  - MarkdownSearchResponse
    - `success` union, required
      - unknown
      - true
    - `request_id` union, required
      - ''
      - string, uuid
    - `data` MarkdownSearchData, required
      - `format` union, required
        - ''
        - 'md'
      - `content` string, required: Markdown derived from the parsed result, after any json_restrictor selection.
  - ProjectedSearchResponse
    - `success` union, required
      - unknown
      - true
    - `request_id` union, required
      - ''
      - string, uuid
    - `data` ProjectedSearchData, required
      - `format` union, required
        - ''
        - 'json'
      - `content` object, required: Only fields selected by json_restrictor. Selected fields retain their declared types and zero defaults.
  - GoogleJsonSearchResponse
    - `success` union, required
      - unknown
      - true
    - `request_id` union, required
      - ''
      - string, uuid
    - `data` GoogleJsonSearchData, required
      - `format` union, required
        - ''
        - 'json'
      - `content` GoogleSearchContent, required
        - `ai_overview` object, required
          - `page_token` string, required
        - `has_next_page` boolean, required: Whether the returned provider HTML advertises another results page.
        - `results` object[], required
          - `classification` object, required
            - `content_type` string, required
            - `source_hint` string, required
          - `display_url` string, required
          - `domain` string, required
          - `domain_info` object, required
            - `category` string, required
            - `sld` string, required
            - `tld` string, required
          - `engine` string, required
          - `favicon` string, required
          - `id` string, required
          - `position` object, required
            - `absolute` integer, required
          - `rank` integer, required
          - `snippet` string, required
          - `source_name` string, required
          - `thumbnail` string, required
          - `title` string, required
          - `tracking_url` string, required
          - `type` string, required
          - `url` string, required
        - `search_parameters` object, required
          - `color_scheme` string, required
          - `coordinates` object, required
            - `latitude` number, required
            - `longitude` number, required
          - `cr` string, required
          - `device` string, required
          - `engine` string, required
          - `filter` integer, required
          - `gl` string, required
          - `google_domain` string, required
          - `hl` string, required
          - `ibp` string, required
          - `kgmid` string, required
          - `location` string, required
          - `lr` string, required
          - `lsig` string, required
          - `ludocid` string, required
          - `nfpr` integer, required
          - `pws` integer, required
          - `q` string, required
          - `query_encoded` boolean, required
          - `radius` integer, required
          - `safe` string, required
          - `si` string, required
          - `start` integer, required
          - `tbm` string, required
          - `tbs` string, required
          - `type` string, required
          - `udm` integer, required
          - `uds` string, required
          - `uule` string, required
        - `serp_features` object[], required
          - `confidence` number, required
          - `engine` string, required
          - `extracted_at` string, required
          - `id` string, required
          - `items` object[], required
            - `link` string, required
            - `product_id` string, required
            - `text` string, required
            - `thumbnail` string, required
            - `title` string, required
          - `links` object[], required
            - `title` string, required
            - `url` string, required
          - `position` object, required
            - `absolute` integer, required
          - `source_result_ids` string[], required
          - `text` string, required
          - `title` string, required
          - `type` string, required
  - GoogleHtmlSearchResponse
    - `success` union, required
      - unknown
      - true
    - `request_id` union, required
      - ''
      - string, uuid
    - `data` GoogleHtmlSearchData, required
      - `format` union, required
        - ''
        - 'html+br+base64'
      - `content` string, byte, required: Base64-encoded bytes. Decode Base64 first, then decompress the result with Brotli. Available deferred or lazy-loaded thumbnail sources are placed in image src attributes, within size limits; image and video files are not downloaded. When rewrite_links is true, already-resolved opaque Google anchor links use their destination URLs. Unresolved links are preserved.

## Other responses

- `400`: The JSON body, source selection, or continuation is invalid. Locally malformed, forged, expired, or mismatched tokens are rejected before source work and require restarting pagination. A source may also reject an otherwise well-formed selector after acquisition. These errors do not spend a search credit. Source inventory changes discovered during a valid request return a completed response instead.
- `401`: The API token is missing, invalid, expired, or revoked.
- `402`: The API token has no credits remaining.
- `405`: Only POST is supported for this endpoint.
- `413`: The JSON request body exceeds 64 KiB.
- `429`: Rate limit exceeded.
- `500`: The request could not be completed.

---

[API](https://skmtc.dev/prismcrawl/apis/prismcrawl-api.md) · [All operations](https://skmtc.dev/prismcrawl/apis/prismcrawl-api/llms.txt) · [OpenAPI document](https://skmtc.dev/prismcrawl/apis/prismcrawl-api/revisions/eef17f6c02a5?raw)
