# Search Google Shopping

Returns Google Shopping products for a query, with seller, price and rating. Use it to compare prices or check product rankings.

Tool `google.serp.shopping` on Google. Contract version 1, released 2026-10-27.

## Example call

Over REST, send the input in the body. Over MCP, pass the same input to `call_tool`.

cURL:

```bash
curl https://api.voxoria.ai/v1/tools/google.serp.shopping/calls \
  -H "Authorization: Bearer $VOXORIA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"input":{"query":"standing desk","country":"us"}}'
```

Python:

```python
import os

import httpx

response = httpx.post(
    "https://api.voxoria.ai/v1/tools/google.serp.shopping/calls",
    headers={"Authorization": f"Bearer {os.environ['VOXORIA_API_KEY']}"},
    json={"input": {"query": "standing desk", "country": "us"}},
    timeout=60,
)
print(response.json())
```

TypeScript:

```ts
const response = await fetch("https://api.voxoria.ai/v1/tools/google.serp.shopping/calls", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.VOXORIA_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"input": {"query": "standing desk", "country": "us"}}),
});
console.log(await response.json());
```

MCP (`tools/call` params):

```json
{
  "name": "call_tool",
  "arguments": {
    "tool": "google.serp.shopping",
    "input": {
      "query": "standing desk",
      "country": "us"
    }
  }
}
```

Both return [the full response](/docs/call-response.md): the call's ID, status and cost, with this tool's result in `output`.

## Input

| Input | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `query` | string | Yes |  | The product search query. |
| `country` | string | No | `us` | Two-letter ISO 3166-1 country code. Case-insensitive. One of the 249 values of the `countries` list: ISO 3166-1 alpha-2 country codes, lowercase. |
| `language` | string | No | `en` | Two-letter ISO 639-1 language code. Case-insensitive. One of the 184 values of the `languages` list: ISO 639-1 two-letter language codes, lowercase. |
| `location` | string | No |  | Place to search from, by name, such as "Austin, Texas". |
| `page` | integer | No | `1` | Page of results, 40 per page. At least 1. |
| `min_price` | number | No |  | Lowest price to include, in the currency of the country's storefront. At least 0. |
| `max_price` | number | No |  | Highest price to include, in the currency of the country's storefront. Must not be below min_price. At least 0. Not less than `min_price` when both are sent. |
| `autocorrect` | boolean | No |  | Whether Google may correct the spelling of the query. |

## Output

A successful call returns these blocks in its `output`. A field not marked required can be `null`.

### results

A list of rows. Always present, possibly empty.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `position` | integer | Yes | Rank among shopping results, starting at 1. |
| `title` | string | Yes |  |
| `url` | string | No | Address of the product's page on Google Shopping. |
| `seller` | string | No | Name of the store selling the product. |
| `price` | string | No | The price as Google shows it, with its currency symbol, such as "$19.99". Not parsed. |
| `price_amount` | number | No | The price as a number, in the currency that price shows. |
| `rating` | number | No | Average review rating, out of 5. |
| `review_count` | integer | No |  |
| `image_url` | string | No | Address of the product's thumbnail image. |
| `product_id` | string | No | Google's product cluster identifier. google.shopping.product takes it as product_id. |
| `catalog_id` | string | No | Google's catalog identifier of the product. Not the product_id that google.shopping.product takes. |
| `delivery` | string | No | Delivery terms as Google shows them, such as "Free delivery". |

## Example output

The `output` of a real call, each list cut to 3 items.

```json
{
  "results": [
    {
      "position": 1,
      "title": "FlexiSpot Electric Height Adjustable Standing Desk",
      "url": null,
      "seller": "FlexiSpot.com",
      "price": "$109.99",
      "price_amount": 109.99,
      "rating": 4.8,
      "review_count": 1700,
      "image_url": "https://encrypted-tbn0.gstatic.com/shopping?q=tbn:ANd9GcSNpcl5DVUBQ-1Y-fKLb3cYCajHyc7hXiykiSwPNAAg_IZa3JvRZNLnjyldcqWGQFS4JM7XFoVkCNfgfAlMuOjViFQFsWCP8w",
      "product_id": "12076690216614034454",
      "catalog_id": "12366406237090414672",
      "delivery": "Free delivery by Sat"
    },
    {
      "position": 2,
      "title": "Sweetcrispy Electric Adjustable Height Standing Desk 24 inch Sit to Stand Up Desk with Splice Board",
      "url": null,
      "seller": "Lowe's",
      "price": "$109.99",
      "price_amount": 109.99,
      "rating": 1,
      "review_count": 1,
      "image_url": "https://encrypted-tbn2.gstatic.com/shopping?q=tbn:ANd9GcSnYWoTeqhrcTGnW7rmeP4iAYbC74F-Dhrd7jmwN5MujIAMUhXbMhahC_XZpwu95hz6EJ5TiqJ1d9rf_IWSZD1AbjJuRjotTMNLX3BK6xehQM1tnlK1Xhdk",
      "product_id": "6537558550646730696",
      "catalog_id": "11660662186877421712",
      "delivery": "Free delivery"
    },
    {
      "position": 3,
      "title": "Mainstays Electric Standing Desk",
      "url": null,
      "seller": "Walmart",
      "price": "$149.00",
      "price_amount": 149,
      "rating": 4.4,
      "review_count": 213,
      "image_url": "https://encrypted-tbn0.gstatic.com/shopping?q=tbn:ANd9GcQxAU3FONrLl0oNMX0MleSTAMmZMVRlrWxw_2ipM8GLCEwYQ-OIPPSkjQ2bdlx9vHQy4Sij5ipi2teTBKTQfGZLABCn8ScPOUGIlDVnXojzT_hFdRa7M_Y6",
      "product_id": "13373890562389985590",
      "catalog_id": "18050164508007971186",
      "delivery": "Free delivery"
    }
  ]
}
```
