> For the complete documentation index, see [llms.txt](https://developers.oxylabs.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developers.oxylabs.io/api-reference/dedicated-scrapers/search-engine-scrapers.md).

# Search Engine Scrapers

Reference for Web API's Google and Bing scraper endpoints: parameters and modes for every endpoint.

<table><thead><tr><th width="108">Scraper</th><th>Endpoints</th></tr></thead><tbody><tr><td><a href="#google">Google</a></td><td><code>/google/search</code>, <code>/google/ads</code>, <code>/google/aimode</code>, <code>/google/shopping/search</code>, <code>/google/shopping/product</code>, <code>/google/maps</code>, <code>/google/travel/hotels</code>, <code>/google/lens</code>, <code>/google/trends/explore</code>, <code>/google</code></td></tr><tr><td><a href="#bing">Bing</a></td><td><code>/bing/search</code>, <code>/bing</code></td></tr></tbody></table>

### Google

#### `POST /v1/scrape/google/search`

Returns organic results, ads, and the SERP features that appeared for a query.

**Modes:** sync · async · batch

<table><thead><tr><th width="157.5">Name</th><th width="98.5">Type</th><th width="89">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>query</code></td><td>string</td><td>yes</td><td>Search phrase, as a user would type it</td></tr><tr><td><code>aomd</code></td><td>string</td><td>no</td><td>Undocumented by Google. Forwarded as sent</td></tr><tr><td><code>cr</code></td><td>string</td><td>no</td><td>Country restriction. Forwarded verbatim</td></tr><tr><td><code>disable_scripts</code></td><td>boolean</td><td>no</td><td>Blocks page scripts</td></tr><tr><td><code>domain</code></td><td>string</td><td>no</td><td>Google TLD to search: <code>com</code>, <code>co.uk</code>, <code>de</code>. Selects the national index</td></tr><tr><td><code>expand_aio</code></td><td>boolean</td><td>no</td><td>Expands the AI Overview block instead of returning it collapsed</td></tr><tr><td><code>filter</code></td><td>integer</td><td>no</td><td>Google's duplicate-content filter. <code>0</code> turns it off and returns near-duplicate results</td></tr><tr><td><code>fpstate</code></td><td>string</td><td>no</td><td>Page state. Forwarded verbatim</td></tr><tr><td><code>limit_per_page</code></td><td>array of objects</td><td>no</td><td>Per-page result counts, e.g. <code>[{"page": 1, "limit": 20}]</code>. Use instead of <code>pages</code> when only page 1 matters</td></tr><tr><td><code>locale</code></td><td>string</td><td>no</td><td>Interface language, e.g. <code>en_US</code>. Affects wording of SERP features, not ranking</td></tr><tr><td><code>nfpr</code></td><td>string</td><td>no</td><td>Suppresses Google's spelling auto-correction</td></tr><tr><td><code>pages</code></td><td>integer</td><td>no</td><td>Consecutive pages to fetch from <code>start_page</code>. Each page is a separate fetch and charge</td></tr><tr><td><code>results_language</code></td><td>string</td><td>no</td><td>Restricts results to one language, e.g. <code>lt</code>. Filters, does not translate</td></tr><tr><td><code>safe_search</code></td><td>boolean</td><td>no</td><td>Google's SafeSearch filter. A boolean here, a string on Bing</td></tr><tr><td><code>start_page</code></td><td>integer</td><td>no</td><td>First page to fetch. Default <code>1</code></td></tr><tr><td><code>tbm</code></td><td>string</td><td>no</td><td>Search vertical: images, shopping, video, books. Forwarded verbatim</td></tr><tr><td><code>tbs</code></td><td>string</td><td>no</td><td>Time and quality filters, e.g. past 24 hours. Forwarded verbatim</td></tr><tr><td><code>udm</code></td><td>string</td><td>no</td><td>Google's UI-mode selector. Forwarded verbatim</td></tr><tr><td><code>output</code></td><td>array of strings</td><td>no</td><td>Formats to return: <code>markdown</code>, <code>html</code>, <code>json</code>, <code>screenshot</code>. Default <code>["html"]</code>. <code>json</code> returns parsed fields. <code>screenshot</code> requires <code>run_js: true</code></td></tr><tr><td><code>json</code></td><td>object</td><td>no</td><td>Custom extraction: <code>{"prompt": string}</code> or <code>{"schema": object}</code>, never both. Overrides the built-in parser</td></tr><tr><td><code>location</code></td><td>string</td><td>no</td><td>Two-letter country code of the request origin. Independent of <code>domain</code></td></tr><tr><td><code>device</code></td><td>string</td><td>no</td><td><code>desktop</code> (default) or <code>mobile</code></td></tr><tr><td><code>run_js</code></td><td>boolean</td><td>no</td><td>Executes page JavaScript before capture. Slower — use a client timeout of 120 seconds or more</td></tr><tr><td><code>callback_url</code></td><td>string</td><td>no</td><td>Webhook URL for the finished job. Async only. Malformed URLs are rejected with <code>400</code></td></tr><tr><td><code>storage</code></td><td>object</td><td>no</td><td>Delivers the result to a bucket instead of the response: <code>{"type": string, "url": string}</code>. <code>type</code> is <code>s3</code>, <code>s3_gzip</code>, <code>s3_compatible</code>, <code>gcs</code>, or <code>tos</code>. Async only. <code>url</code> is not validated</td></tr></tbody></table>

#### `POST /v1/scrape/google/ads`

Returns the paid block only: advertisers, order, and ad copy.

**Modes:** sync · async · batch

<table><thead><tr><th width="159">Name</th><th width="96.5">Type</th><th width="91.5">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>query</code></td><td>string</td><td>yes</td><td>Search phrase the ads are fetched for</td></tr><tr><td><code>adstest</code></td><td>boolean</td><td>no</td><td>Returns ads from Google's test ad network instead of live inventory</td></tr><tr><td><code>disable_scripts</code></td><td>boolean</td><td>no</td><td>Blocks page scripts</td></tr><tr><td><code>domain</code></td><td>string</td><td>no</td><td>Google TLD to search: <code>com</code>, <code>co.uk</code>, <code>de</code>. Selects the national index</td></tr><tr><td><code>expand_aio</code></td><td>boolean</td><td>no</td><td>Expands the AI Overview block instead of returning it collapsed</td></tr><tr><td><code>locale</code></td><td>string</td><td>no</td><td>Interface language, e.g. <code>en_US</code>. Affects wording of SERP features, not ranking</td></tr><tr><td><code>pages</code></td><td>integer</td><td>no</td><td>Consecutive pages to fetch from <code>start_page</code>. Each page is a separate fetch and charge</td></tr><tr><td><code>start_page</code></td><td>integer</td><td>no</td><td>First page to fetch. Default <code>1</code></td></tr><tr><td><code>output</code></td><td>array of strings</td><td>no</td><td>Formats to return: <code>markdown</code>, <code>html</code>, <code>json</code>, <code>screenshot</code>. Default <code>["html"]</code>. <code>json</code> returns parsed fields. <code>screenshot</code> requires <code>run_js: true</code></td></tr><tr><td><code>json</code></td><td>object</td><td>no</td><td>Custom extraction: <code>{"prompt": string}</code> or <code>{"schema": object}</code>, never both. Overrides the built-in parser</td></tr><tr><td><code>location</code></td><td>string</td><td>no</td><td>Two-letter country code of the request origin. Independent of <code>domain</code></td></tr><tr><td><code>device</code></td><td>string</td><td>no</td><td><code>desktop</code> (default) or <code>mobile</code></td></tr><tr><td><code>run_js</code></td><td>boolean</td><td>no</td><td>Executes page JavaScript before capture. Slower — use a client timeout of 120 seconds or more</td></tr><tr><td><code>callback_url</code></td><td>string</td><td>no</td><td>Webhook URL for the finished job. Async only. Malformed URLs are rejected with <code>400</code></td></tr><tr><td><code>storage</code></td><td>object</td><td>no</td><td>Delivers the result to a bucket instead of the response: <code>{"type": string, "url": string}</code>. <code>type</code> is <code>s3</code>, <code>s3_gzip</code>, <code>s3_compatible</code>, <code>gcs</code>, or <code>tos</code>. Async only. <code>url</code> is not validated</td></tr></tbody></table>

#### `POST /v1/scrape/google/aimode`

Returns Google's AI Mode answer, separate from the AI Overview returned by `/google/search`.

**Modes:** sync · async · batch

<table><thead><tr><th width="134.5">Name</th><th width="96">Type</th><th width="94">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>query</code></td><td>string</td><td>yes</td><td>The question to ask Google AI Mode</td></tr><tr><td><code>output</code></td><td>array of strings</td><td>no</td><td>Formats to return: <code>markdown</code>, <code>html</code>, <code>json</code>, <code>screenshot</code>. Default <code>["html"]</code>. <code>json</code> returns parsed fields. <code>screenshot</code> requires <code>run_js: true</code></td></tr><tr><td><code>json</code></td><td>object</td><td>no</td><td>Custom extraction: <code>{"prompt": string}</code> or <code>{"schema": object}</code>, never both. Overrides the built-in parser</td></tr><tr><td><code>location</code></td><td>string</td><td>no</td><td>Two-letter country code of the request origin. Independent of <code>domain</code></td></tr><tr><td><code>device</code></td><td>string</td><td>no</td><td><code>desktop</code> (default) or <code>mobile</code></td></tr><tr><td><code>run_js</code></td><td>boolean</td><td>yes</td><td>Required: <code>true</code></td></tr><tr><td><code>callback_url</code></td><td>string</td><td>no</td><td>Webhook URL for the finished job. Async only. Malformed URLs are rejected with <code>400</code></td></tr><tr><td><code>storage</code></td><td>object</td><td>no</td><td>Delivers the result to a bucket instead of the response: <code>{"type": string, "url": string}</code>. <code>type</code> is <code>s3</code>, <code>s3_gzip</code>, <code>s3_compatible</code>, <code>gcs</code>, or <code>tos</code>. Async only. <code>url</code> is not validated</td></tr></tbody></table>

Responses may differ between identical requests.

#### `POST /v1/scrape/google/shopping/search`

Returns Google Shopping listings with prices.

**Modes:** sync · async · batch

<table><thead><tr><th width="132">Name</th><th width="104.5">Type</th><th width="93">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>query</code></td><td>string</td><td>yes</td><td>Search phrase</td></tr><tr><td><code>domain</code></td><td>string</td><td>no</td><td>Google TLD to search: <code>com</code>, <code>co.uk</code>, <code>de</code>. Selects the national index</td></tr><tr><td><code>limit</code></td><td>integer</td><td>no</td><td>Number of results to return</td></tr><tr><td><code>locale</code></td><td>string</td><td>no</td><td>Interface language, e.g. <code>en_US</code>. Affects wording of SERP features, not ranking</td></tr><tr><td><code>max_price</code></td><td>integer</td><td>no</td><td>Highest price to include, in the storefront's currency</td></tr><tr><td><code>min_price</code></td><td>integer</td><td>no</td><td>Lowest price to include, in the storefront's currency</td></tr><tr><td><code>pages</code></td><td>integer</td><td>no</td><td>Consecutive pages to fetch from <code>start_page</code>. Each page is a separate fetch and charge</td></tr><tr><td><code>sort_by</code></td><td>string</td><td>no</td><td><code>r</code> relevance (default), <code>rv</code> rating high to low, <code>p</code> price low to high, <code>pd</code> price high to low</td></tr><tr><td><code>start_page</code></td><td>integer</td><td>no</td><td>First page to fetch. Default <code>1</code></td></tr><tr><td><code>tbs</code></td><td>string</td><td>no</td><td>Time and quality filters, e.g. past 24 hours. Forwarded verbatim</td></tr><tr><td><code>output</code></td><td>array of strings</td><td>no</td><td>Formats to return: <code>markdown</code>, <code>html</code>, <code>json</code>, <code>screenshot</code>. Default <code>["html"]</code>. <code>json</code> returns parsed fields. <code>screenshot</code> requires <code>run_js: true</code></td></tr><tr><td><code>json</code></td><td>object</td><td>no</td><td>Custom extraction: <code>{"prompt": string}</code> or <code>{"schema": object}</code>, never both. Overrides the built-in parser</td></tr><tr><td><code>location</code></td><td>string</td><td>no</td><td>Two-letter country code of the request origin. Independent of <code>domain</code></td></tr><tr><td><code>device</code></td><td>string</td><td>no</td><td><code>desktop</code> (default) or <code>mobile</code></td></tr><tr><td><code>run_js</code></td><td>boolean</td><td>no</td><td>Executes page JavaScript before capture. Slower — use a client timeout of 120 seconds or more</td></tr><tr><td><code>callback_url</code></td><td>string</td><td>no</td><td>Webhook URL for the finished job. Async only. Malformed URLs are rejected with <code>400</code></td></tr><tr><td><code>storage</code></td><td>object</td><td>no</td><td>Delivers the result to a bucket instead of the response: <code>{"type": string, "url": string}</code>. <code>type</code> is <code>s3</code>, <code>s3_gzip</code>, <code>s3_compatible</code>, <code>gcs</code>, or <code>tos</code>. Async only. <code>url</code> is not validated</td></tr></tbody></table>

#### `POST /v1/scrape/google/shopping/product`

Returns one Google Shopping product.

**Modes:** sync · async · batch

<table><thead><tr><th width="134.5">Name</th><th width="94">Type</th><th width="93.5">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>query</code></td><td>string</td><td>yes</td><td>Shopping product ID</td></tr><tr><td><code>domain</code></td><td>string</td><td>no</td><td>Google TLD to search: <code>com</code>, <code>co.uk</code>, <code>de</code>. Selects the national index</td></tr><tr><td><code>locale</code></td><td>string</td><td>no</td><td>Interface language, e.g. <code>en_US</code>. Affects wording of SERP features, not ranking</td></tr><tr><td><code>output</code></td><td>array of strings</td><td>no</td><td>Formats to return: <code>markdown</code>, <code>html</code>, <code>json</code>, <code>screenshot</code>. Default <code>["html"]</code>. <code>json</code> returns parsed fields. <code>screenshot</code> requires <code>run_js: true</code></td></tr><tr><td><code>json</code></td><td>object</td><td>no</td><td>Custom extraction: <code>{"prompt": string}</code> or <code>{"schema": object}</code>, never both. Overrides the built-in parser</td></tr><tr><td><code>location</code></td><td>string</td><td>no</td><td>Two-letter country code of the request origin. Independent of <code>domain</code></td></tr><tr><td><code>device</code></td><td>string</td><td>no</td><td><code>desktop</code> (default) or <code>mobile</code></td></tr><tr><td><code>run_js</code></td><td>boolean</td><td>no</td><td>Executes page JavaScript before capture. Slower — use a client timeout of 120 seconds or more</td></tr><tr><td><code>callback_url</code></td><td>string</td><td>no</td><td>Webhook URL for the finished job. Async only. Malformed URLs are rejected with <code>400</code></td></tr><tr><td><code>storage</code></td><td>object</td><td>no</td><td>Delivers the result to a bucket instead of the response: <code>{"type": string, "url": string}</code>. <code>type</code> is <code>s3</code>, <code>s3_gzip</code>, <code>s3_compatible</code>, <code>gcs</code>, or <code>tos</code>. Async only. <code>url</code> is not validated</td></tr></tbody></table>

#### `POST /v1/scrape/google/maps`

Returns Google Maps local listings.

**Modes:** sync · async · batch

<table><thead><tr><th width="161">Name</th><th width="95">Type</th><th width="93.5">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>query</code></td><td>string</td><td>yes</td><td>Place or category search phrase, e.g. <code>dentist vilnius</code></td></tr><tr><td><code>domain</code></td><td>string</td><td>no</td><td>Google TLD to search: <code>com</code>, <code>co.uk</code>, <code>de</code>. Selects the national index</td></tr><tr><td><code>hotel_dates</code></td><td>string</td><td>no</td><td>Stay dates. Without it, Google's default stay window is used</td></tr><tr><td><code>hotel_occupancy</code></td><td>integer</td><td>no</td><td>Guests in the room</td></tr><tr><td><code>locale</code></td><td>string</td><td>no</td><td>Interface language, e.g. <code>en_US</code>. Affects wording of SERP features, not ranking</td></tr><tr><td><code>pages</code></td><td>integer</td><td>no</td><td>Consecutive pages to fetch from <code>start_page</code>. Each page is a separate fetch and charge</td></tr><tr><td><code>start_page</code></td><td>integer</td><td>no</td><td>First page to fetch. Default <code>1</code></td></tr><tr><td><code>output</code></td><td>array of strings</td><td>no</td><td>Formats to return: <code>markdown</code>, <code>html</code>, <code>json</code>, <code>screenshot</code>. Default <code>["html"]</code>. <code>json</code> returns parsed fields. <code>screenshot</code> requires <code>run_js: true</code></td></tr><tr><td><code>json</code></td><td>object</td><td>no</td><td>Required with <code>output: ["json"]</code> — this endpoint has no built-in parser. <code>{"prompt": string}</code> or <code>{"schema": object}</code>, never both</td></tr><tr><td><code>location</code></td><td>string</td><td>no</td><td>Two-letter country code of the request origin. Independent of <code>domain</code></td></tr><tr><td><code>device</code></td><td>string</td><td>no</td><td><code>desktop</code> (default) or <code>mobile</code></td></tr><tr><td><code>run_js</code></td><td>boolean</td><td>no</td><td>Executes page JavaScript before capture. Slower — use a client timeout of 120 seconds or more</td></tr><tr><td><code>callback_url</code></td><td>string</td><td>no</td><td>Webhook URL for the finished job. Async only. Malformed URLs are rejected with <code>400</code></td></tr><tr><td><code>storage</code></td><td>object</td><td>no</td><td>Delivers the result to a bucket instead of the response: <code>{"type": string, "url": string}</code>. <code>type</code> is <code>s3</code>, <code>s3_gzip</code>, <code>s3_compatible</code>, <code>gcs</code>, or <code>tos</code>. Async only. <code>url</code> is not validated</td></tr></tbody></table>

#### `POST /v1/scrape/google/travel/hotels`

Returns hotel listings priced for the given dates and occupancy.

**Modes:** sync · async · batch

<table><thead><tr><th width="146.5">Name</th><th width="104">Type</th><th width="95">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>query</code></td><td>string</td><td>yes</td><td>Hotel name or destination</td></tr><tr><td><code>adults</code></td><td>integer</td><td>no</td><td>Adult guests</td></tr><tr><td><code>children</code></td><td>integer</td><td>no</td><td>Child guests</td></tr><tr><td><code>domain</code></td><td>string</td><td>no</td><td>Google TLD to search: <code>com</code>, <code>co.uk</code>, <code>de</code>. Selects the national index</td></tr><tr><td><code>hotel_classes</code></td><td>array of integers</td><td>no</td><td>Star ratings to include, e.g. <code>[4, 5]</code></td></tr><tr><td><code>hotel_dates</code></td><td>string</td><td>no</td><td>Stay dates. Without it, Google's default stay window is used</td></tr><tr><td><code>hotel_occupancy</code></td><td>integer</td><td>no</td><td>Guests in the room</td></tr><tr><td><code>locale</code></td><td>string</td><td>no</td><td>Interface language, e.g. <code>en_US</code>. Affects wording of SERP features, not ranking</td></tr><tr><td><code>pages</code></td><td>integer</td><td>no</td><td>Consecutive pages to fetch from <code>start_page</code>. Each page is a separate fetch and charge</td></tr><tr><td><code>start_page</code></td><td>integer</td><td>no</td><td>First page to fetch. Default <code>1</code></td></tr><tr><td><code>output</code></td><td>array of strings</td><td>no</td><td>Formats to return: <code>markdown</code>, <code>html</code>, <code>json</code>, <code>screenshot</code>. Default <code>["html"]</code>. <code>json</code> returns parsed fields. <code>screenshot</code> requires <code>run_js: true</code></td></tr><tr><td><code>json</code></td><td>object</td><td>no</td><td>Custom extraction: <code>{"prompt": string}</code> or <code>{"schema": object}</code>, never both. Overrides the built-in parser</td></tr><tr><td><code>location</code></td><td>string</td><td>no</td><td>Two-letter country code of the request origin. Independent of <code>domain</code></td></tr><tr><td><code>device</code></td><td>string</td><td>no</td><td><code>desktop</code> (default) or <code>mobile</code></td></tr><tr><td><code>run_js</code></td><td>boolean</td><td>no</td><td>Executes page JavaScript before capture. Slower — use a client timeout of 120 seconds or more</td></tr><tr><td><code>callback_url</code></td><td>string</td><td>no</td><td>Webhook URL for the finished job. Async only. Malformed URLs are rejected with <code>400</code></td></tr><tr><td><code>storage</code></td><td>object</td><td>no</td><td>Delivers the result to a bucket instead of the response: <code>{"type": string, "url": string}</code>. <code>type</code> is <code>s3</code>, <code>s3_gzip</code>, <code>s3_compatible</code>, <code>gcs</code>, or <code>tos</code>. Async only. <code>url</code> is not validated</td></tr></tbody></table>

#### `POST /v1/scrape/google/lens`

Returns visual-match results for an image URL.

**Modes:** sync · async · batch

<table><thead><tr><th width="132">Name</th><th width="98">Type</th><th width="99">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>query</code></td><td>string</td><td>yes</td><td>Image URL to match. Not search text</td></tr><tr><td><code>keywords</code></td><td>string</td><td>no</td><td>Text hint to narrow the visual matches</td></tr><tr><td><code>output</code></td><td>array of strings</td><td>no</td><td>Formats to return: <code>markdown</code>, <code>html</code>, <code>json</code>, <code>screenshot</code>. Default <code>["html"]</code>. <code>json</code> returns parsed fields. <code>screenshot</code> requires <code>run_js: true</code></td></tr><tr><td><code>json</code></td><td>object</td><td>no</td><td>Custom extraction: <code>{"prompt": string}</code> or <code>{"schema": object}</code>, never both. Overrides the built-in parser</td></tr><tr><td><code>location</code></td><td>string</td><td>no</td><td>Two-letter country code of the request origin. Independent of <code>domain</code></td></tr><tr><td><code>device</code></td><td>string</td><td>no</td><td><code>desktop</code> (default) or <code>mobile</code></td></tr><tr><td><code>run_js</code></td><td>boolean</td><td>no</td><td>Executes page JavaScript before capture. Slower — use a client timeout of 120 seconds or more</td></tr><tr><td><code>callback_url</code></td><td>string</td><td>no</td><td>Webhook URL for the finished job. Async only. Malformed URLs are rejected with <code>400</code></td></tr><tr><td><code>storage</code></td><td>object</td><td>no</td><td>Delivers the result to a bucket instead of the response: <code>{"type": string, "url": string}</code>. <code>type</code> is <code>s3</code>, <code>s3_gzip</code>, <code>s3_compatible</code>, <code>gcs</code>, or <code>tos</code>. Async only. <code>url</code> is not validated</td></tr></tbody></table>

#### `POST /v1/scrape/google/trends/explore`

Returns relative search interest over time for a term.

**Modes:** sync · async · batch

<table><thead><tr><th width="135">Name</th><th width="93">Type</th><th width="97.5">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>query</code></td><td>string</td><td>yes</td><td>Term to chart</td></tr><tr><td><code>category_id</code></td><td>string</td><td>no</td><td>Google Trends category ID</td></tr><tr><td><code>date_from</code></td><td>string</td><td>no</td><td>Start of the window, e.g. <code>2026-01-01</code></td></tr><tr><td><code>date_to</code></td><td>string</td><td>no</td><td>End of the window, e.g. <code>2026-06-30</code></td></tr><tr><td><code>search_type</code></td><td>string</td><td>no</td><td>Trends vertical, e.g. web, image, news, YouTube, or shopping</td></tr><tr><td><code>output</code></td><td>array of strings</td><td>no</td><td>Formats to return: <code>markdown</code>, <code>html</code>, <code>json</code>, <code>screenshot</code>. Default <code>["html"]</code>. <code>json</code> returns parsed fields. <code>screenshot</code> requires <code>run_js: true</code></td></tr><tr><td><code>json</code></td><td>object</td><td>no</td><td>Required with <code>output: ["json"]</code> — this endpoint has no built-in parser. <code>{"prompt": string}</code> or <code>{"schema": object}</code>, never both</td></tr><tr><td><code>location</code></td><td>string</td><td>no</td><td>Two-letter country code of the request origin. Independent of <code>domain</code></td></tr><tr><td><code>device</code></td><td>string</td><td>no</td><td><code>desktop</code> (default) or <code>mobile</code></td></tr><tr><td><code>run_js</code></td><td>boolean</td><td>no</td><td>Executes page JavaScript before capture. Slower — use a client timeout of 120 seconds or more</td></tr><tr><td><code>callback_url</code></td><td>string</td><td>no</td><td>Webhook URL for the finished job. Async only. Malformed URLs are rejected with <code>400</code></td></tr><tr><td><code>storage</code></td><td>object</td><td>no</td><td>Delivers the result to a bucket instead of the response: <code>{"type": string, "url": string}</code>. <code>type</code> is <code>s3</code>, <code>s3_gzip</code>, <code>s3_compatible</code>, <code>gcs</code>, or <code>tos</code>. Async only. <code>url</code> is not validated</td></tr></tbody></table>

Interest values are relative, normalized within the requested window: widening `date_from` rescales every point.

#### `POST /v1/scrape/google`

Returns parsed fields for a Google page from a URL you provide.

**Modes:** sync · async · batch

<table><thead><tr><th width="156.5">Name</th><th width="100.5">Type</th><th width="99.5">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>url</code></td><td>string</td><td>yes</td><td>A Google URL</td></tr><tr><td><code>adstest</code></td><td>boolean</td><td>no</td><td>Returns ads from Google's test ad network instead of live inventory</td></tr><tr><td><code>adults</code></td><td>integer</td><td>no</td><td>Adult guests</td></tr><tr><td><code>aomd</code></td><td>string</td><td>no</td><td>Undocumented by Google. Forwarded as sent</td></tr><tr><td><code>category_id</code></td><td>string</td><td>no</td><td>Google Trends category ID</td></tr><tr><td><code>children</code></td><td>integer</td><td>no</td><td>Child guests</td></tr><tr><td><code>cr</code></td><td>string</td><td>no</td><td>Country restriction. Forwarded verbatim</td></tr><tr><td><code>date_from</code></td><td>string</td><td>no</td><td>Start of the window, e.g. <code>2026-01-01</code></td></tr><tr><td><code>date_to</code></td><td>string</td><td>no</td><td>End of the window, e.g. <code>2026-06-30</code></td></tr><tr><td><code>disable_scripts</code></td><td>boolean</td><td>no</td><td>Blocks page scripts</td></tr><tr><td><code>expand_aio</code></td><td>boolean</td><td>no</td><td>Expands the AI Overview block instead of returning it collapsed</td></tr><tr><td><code>filter</code></td><td>integer</td><td>no</td><td>Google's duplicate-content filter. <code>0</code> turns it off and returns near-duplicate results</td></tr><tr><td><code>fpstate</code></td><td>string</td><td>no</td><td>Page state. Forwarded verbatim</td></tr><tr><td><code>hotel_classes</code></td><td>array of integers</td><td>no</td><td>Star ratings to include, e.g. <code>[4, 5]</code></td></tr><tr><td><code>hotel_dates</code></td><td>string</td><td>no</td><td>Stay dates. Without it, Google's default stay window is used</td></tr><tr><td><code>hotel_occupancy</code></td><td>integer</td><td>no</td><td>Guests in the room</td></tr><tr><td><code>limit</code></td><td>integer</td><td>no</td><td>Number of results to return</td></tr><tr><td><code>limit_per_page</code></td><td>array of objects</td><td>no</td><td>Per-page result counts, e.g. <code>[{"page": 1, "limit": 20}]</code>. Use instead of <code>pages</code> when only page 1 matters</td></tr><tr><td><code>locale</code></td><td>string</td><td>no</td><td>Interface language, e.g. <code>en_US</code>. Affects wording of SERP features, not ranking</td></tr><tr><td><code>max_price</code></td><td>integer</td><td>no</td><td>Highest price to include, in the storefront's currency</td></tr><tr><td><code>min_price</code></td><td>integer</td><td>no</td><td>Lowest price to include, in the storefront's currency</td></tr><tr><td><code>nfpr</code></td><td>string</td><td>no</td><td>Suppresses Google's spelling auto-correction</td></tr><tr><td><code>pages</code></td><td>integer</td><td>no</td><td>Consecutive pages to fetch from <code>start_page</code>. Each page is a separate fetch and charge</td></tr><tr><td><code>results_language</code></td><td>string</td><td>no</td><td>Restricts results to one language, e.g. <code>lt</code>. Filters, does not translate</td></tr><tr><td><code>safe_search</code></td><td>boolean</td><td>no</td><td>Google's SafeSearch filter. A boolean here, a string on Bing</td></tr><tr><td><code>search_type</code></td><td>string</td><td>no</td><td>Trends vertical, e.g. web, image, news, YouTube, or shopping</td></tr><tr><td><code>sort_by</code></td><td>string</td><td>no</td><td><code>r</code> relevance (default), <code>rv</code> rating high to low, <code>p</code> price low to high, <code>pd</code> price high to low</td></tr><tr><td><code>start_page</code></td><td>integer</td><td>no</td><td>First page to fetch. Default <code>1</code></td></tr><tr><td><code>tbm</code></td><td>string</td><td>no</td><td>Search vertical: images, shopping, video, books. Forwarded verbatim</td></tr><tr><td><code>tbs</code></td><td>string</td><td>no</td><td>Time and quality filters, e.g. past 24 hours. Forwarded verbatim</td></tr><tr><td><code>udm</code></td><td>string</td><td>no</td><td>Google's UI-mode selector. Forwarded verbatim</td></tr><tr><td><code>output</code></td><td>array of strings</td><td>no</td><td>Formats to return: <code>markdown</code>, <code>html</code>, <code>json</code>, <code>screenshot</code>. Default <code>["html"]</code>. <code>json</code> returns parsed fields. <code>screenshot</code> requires <code>run_js: true</code></td></tr><tr><td><code>json</code></td><td>object</td><td>no</td><td>Custom extraction: <code>{"prompt": string}</code> or <code>{"schema": object}</code>, never both. Overrides the built-in parser</td></tr><tr><td><code>location</code></td><td>string</td><td>no</td><td>Two-letter country code of the request origin. Independent of <code>domain</code></td></tr><tr><td><code>device</code></td><td>string</td><td>no</td><td><code>desktop</code> (default) or <code>mobile</code></td></tr><tr><td><code>run_js</code></td><td>boolean</td><td>no</td><td>Executes page JavaScript before capture. Slower — use a client timeout of 120 seconds or more</td></tr><tr><td><code>callback_url</code></td><td>string</td><td>no</td><td>Webhook URL for the finished job. Async only. Malformed URLs are rejected with <code>400</code></td></tr><tr><td><code>storage</code></td><td>object</td><td>no</td><td>Delivers the result to a bucket instead of the response: <code>{"type": string, "url": string}</code>. <code>type</code> is <code>s3</code>, <code>s3_gzip</code>, <code>s3_compatible</code>, <code>gcs</code>, or <code>tos</code>. Async only. <code>url</code> is not validated</td></tr></tbody></table>

Set a parameter in the body or in the URL's query string, not both.

### Bing

#### `POST /v1/scrape/bing/search`

Returns Bing organic results for a query.

**Modes:** sync · async · batch

<table><thead><tr><th width="139.5">Name</th><th width="93.5">Type</th><th width="97">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>query</code></td><td>string</td><td>yes</td><td>Search phrase</td></tr><tr><td><code>domain</code></td><td>string</td><td>no</td><td>Bing TLD</td></tr><tr><td><code>locale</code></td><td>string</td><td>no</td><td>Interface language, e.g. <code>en_US</code></td></tr><tr><td><code>pages</code></td><td>integer</td><td>no</td><td>Consecutive pages to fetch from <code>start_page</code>. Each page is a separate fetch and charge</td></tr><tr><td><code>safe_search</code></td><td>string</td><td>no</td><td>Safe-search level. A string here, a boolean on Google</td></tr><tr><td><code>start_page</code></td><td>integer</td><td>no</td><td>First page to fetch. Default <code>1</code></td></tr><tr><td><code>output</code></td><td>array of strings</td><td>no</td><td>Formats to return: <code>markdown</code>, <code>html</code>, <code>json</code>, <code>screenshot</code>. Default <code>["html"]</code>. <code>json</code> returns parsed fields. <code>screenshot</code> requires <code>run_js: true</code></td></tr><tr><td><code>json</code></td><td>object</td><td>no</td><td>Custom extraction: <code>{"prompt": string}</code> or <code>{"schema": object}</code>, never both. Overrides the built-in parser</td></tr><tr><td><code>location</code></td><td>string</td><td>no</td><td>Two-letter country code to fetch from, e.g. <code>DE</code></td></tr><tr><td><code>device</code></td><td>string</td><td>no</td><td><code>desktop</code> (default) or <code>mobile</code></td></tr><tr><td><code>run_js</code></td><td>boolean</td><td>no</td><td>Executes page JavaScript before capture. Slower — use a client timeout of 120 seconds or more</td></tr><tr><td><code>callback_url</code></td><td>string</td><td>no</td><td>Webhook URL for the finished job. Async only. Malformed URLs are rejected with <code>400</code></td></tr><tr><td><code>storage</code></td><td>object</td><td>no</td><td>Delivers the result to a bucket instead of the response: <code>{"type": string, "url": string}</code>. <code>type</code> is <code>s3</code>, <code>s3_gzip</code>, <code>s3_compatible</code>, <code>gcs</code>, or <code>tos</code>. Async only. <code>url</code> is not validated</td></tr></tbody></table>

#### `POST /v1/scrape/bing`

Returns parsed fields for a Bing page from a URL you provide.

**Modes:** sync · async · batch

<table><thead><tr><th width="134">Name</th><th width="97.5">Type</th><th width="92.5">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>url</code></td><td>string</td><td>yes</td><td>A Bing URL</td></tr><tr><td><code>locale</code></td><td>string</td><td>no</td><td>Interface language, e.g. <code>en_US</code></td></tr><tr><td><code>output</code></td><td>array of strings</td><td>no</td><td>Formats to return: <code>markdown</code>, <code>html</code>, <code>json</code>, <code>screenshot</code>. Default <code>["html"]</code>. <code>json</code> returns parsed fields. <code>screenshot</code> requires <code>run_js: true</code></td></tr><tr><td><code>json</code></td><td>object</td><td>no</td><td>Custom extraction: <code>{"prompt": string}</code> or <code>{"schema": object}</code>, never both. Overrides the built-in parser</td></tr><tr><td><code>location</code></td><td>string</td><td>no</td><td>Two-letter country code to fetch from, e.g. <code>DE</code></td></tr><tr><td><code>device</code></td><td>string</td><td>no</td><td><code>desktop</code> (default) or <code>mobile</code></td></tr><tr><td><code>run_js</code></td><td>boolean</td><td>no</td><td>Executes page JavaScript before capture. Slower — use a client timeout of 120 seconds or more</td></tr><tr><td><code>callback_url</code></td><td>string</td><td>no</td><td>Webhook URL for the finished job. Async only. Malformed URLs are rejected with <code>400</code></td></tr><tr><td><code>storage</code></td><td>object</td><td>no</td><td>Delivers the result to a bucket instead of the response: <code>{"type": string, "url": string}</code>. <code>type</code> is <code>s3</code>, <code>s3_gzip</code>, <code>s3_compatible</code>, <code>gcs</code>, or <code>tos</code>. Async only. <code>url</code> is not validated</td></tr></tbody></table>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://developers.oxylabs.io/api-reference/dedicated-scrapers/search-engine-scrapers.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `build a script that syncs our docs to a CMS` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
