# Google Shopping Scraper (`solidcode/google-shopping-scraper`) Actor

\[💰 $2.5 / 1K] Extract product listings from Google Shopping — titles, prices, merchants, ratings, images, and delivery info. Optionally enrich each product with specs, description, full seller-offer list, and top reviews. Batch search queries and URLs across 45+ countries and 19+ languages.

- **URL**: https://apify.com/solidcode/google-shopping-scraper.md
- **Developed by:** [SolidCode](https://apify.com/solidcode) (community)
- **Categories:** E-commerce, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Google Shopping Scraper

Extract product listings from Google Shopping at scale. Get titles, prices, merchants, ratings, review counts, delivery info, discounts, and product IDs for any keyword or Google Shopping URL — with country, language, and currency targeting across 45+ markets.

### Why This Scraper?

- **Keyword or URL input** — feed search terms like `"wireless earbuds"` or paste Google Shopping result URLs directly
- **45 countries, 19 languages, 21 currencies** — run the same query in the US, Germany, Japan, or Brazil and get locally priced results
- **Automatic pagination** — walks result pages until Google runs out of products or you hit your cap
- **Rich product fields** — title, merchant, numeric price, price string, currency, original price, discount percent, rating, review count, delivery info, and more
- **Legacy URL support** — old-style `tbm=shop` URLs are accepted and redirect automatically
- **No configuration overhead** — sensible defaults out of the box, no proxy setup to fiddle with
- **Honest output** — both the raw price string and a parsed numeric price are returned, so you can always see what Google actually displayed
- **Competitive pricing** — comparable to or below other Google Shopping actors on Apify

### Use Cases

**Price Monitoring & Competitive Intelligence**
- Track competitor pricing across merchants for a given product
- Watch for discounts and promotional activity on your SKUs
- Benchmark your own store against the Shopping tab for key search terms

**Market Research**
- Map product availability and pricing across countries
- Identify which merchants dominate results for a category
- Measure discount depth and frequency by product segment

**E-commerce & Catalog Enrichment**
- Populate product databases with merchant and pricing data
- Enrich existing SKUs with rating and review-count signals
- Discover new merchants carrying products in your category

**SEO & Digital Marketing**
- See which products rank on Shopping for target keywords
- Analyze Shopping SERP composition by country and language
- Track visibility of brands or merchants for commercial queries

**Lead Generation**
- Build merchant lists by category and country
- Surface niche sellers that rank on Google Shopping in your vertical

### Getting Started

#### Simple Keyword Search

The fastest way to get started — just provide a search term:

```json
{
    "searchQueries": ["wireless earbuds"],
    "maxResults": 50
}
````

#### Multi-Country with Currency

Run the same query in another market with local language and currency:

```json
{
    "searchQueries": ["kabellose kopfhörer"],
    "country": "de",
    "language": "de",
    "currency": "EUR",
    "maxResults": 100
}
```

#### Filtered Search with Sort

Narrow to a price range and sort by rating:

```json
{
    "searchQueries": ["coffee maker"],
    "country": "us",
    "minPrice": 50,
    "maxPrice": 200,
    "sortBy": "rating",
    "condition": "new",
    "maxResults": 60
}
```

#### Direct URL Input

Paste any Google Shopping result URL — filtered, sorted, or plain:

```json
{
    "startUrls": [
        "https://www.google.com/search?tbm=shop&q=running+shoes",
        "https://www.google.com/search?udm=28&q=bluetooth+speaker&gl=gb"
    ],
    "maxResults": 40
}
```

#### Multiple Queries, Max Coverage

Fan out across several queries and pull every available product (up to Google's own ~200-product ceiling per query):

```json
{
    "searchQueries": [
        "nike running shoes",
        "adidas running shoes",
        "hoka running shoes"
    ],
    "country": "us",
    "maxResults": 0
}
```

`"maxResults": 0` means "fetch every available product per query, up to Google's own pagination ceiling (~200 per query)" — see **Good to Know** below.

### Input Reference

#### What to Scrape

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `searchQueries` | string\[] | `["wireless earbuds"]` | Keywords to search on Google Shopping. Each query runs independently. |
| `startUrls` | string\[] | `[]` | Google Shopping result URLs to process directly. Legacy `tbm=shop` links are accepted. |

#### Results

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `maxResults` | integer | `50` | Maximum products per query or URL. The actor may return a few extra rows from the final page — it stops fetching new pages once this number is reached, but returns the whole last page rather than trimming it. `0` means "fetch up to Google's own ~200-product ceiling per query". Max accepted value: `300`. |

#### Localization

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `country` | string | `"us"` | Country for localized results. 45 markets supported (US, UK, DE, FR, JP, BR, and many more). |
| `language` | string | `"en"` | Interface language for result text. 19 languages supported. |
| `currency` | string | `"USD"` | Currency for prices. 21 currencies supported. Google honors this where inventory exists. |

#### Filters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `sortBy` | string | `"relevance"` | Sort order: `relevance`, `priceLowToHigh`, `priceHighToLow`, or `rating`. Best-effort — Google honors it loosely. |
| `minPrice` | integer | (unset) | Only include products priced at or above this amount, in the selected currency. |
| `maxPrice` | integer | (unset) | Only include products priced at or below this amount, in the selected currency. |
| `condition` | string | `"any"` | `any` or `new`. Google Shopping's search page only offers "New" as a top-level filter. |

### Output

Each run emits a dataset of **product** rows — one per listing.

#### Product row example

```json
{
    "recordType": "product",
    "query": "wireless earbuds",
    "sourceUrl": null,
    "rank": 1,
    "page": 1,
    "productId": "tsuid_7bXoae6tGrPv7_UPgtGTEQ_57",
    "title": "Anker Soundcore Liberty 4 NC Wireless Earbuds",
    "url": null,
    "merchant": "soundcore US",
    "price": 69.99,
    "priceRaw": "$69.99",
    "currency": "USD",
    "originalPrice": 100.0,
    "discountPercent": 30,
    "delivery": "Free delivery",
    "imageUrl": null,
    "rating": 4.7,
    "ratingCount": 8400,
    "condition": null
}
```

#### Product fields

| Field | Type | Description |
|-------|------|-------------|
| `recordType` | string | Always `"product"` for listing rows |
| `query` | string | The search query that produced this row (when keyword input) |
| `sourceUrl` | string | The start URL that produced this row (when URL input) |
| `rank` | number | Position in the result list (1 = first) |
| `page` | number | Pagination page number the row was found on |
| `productId` | string | Google's per-session product identifier. Not stable across runs. |
| `title` | string | Product title |
| `url` | string | Link to the product (when available) |
| `merchant` | string | Merchant / seller name as shown on the card |
| `price` | number | Numeric price parsed from the card |
| `priceRaw` | string | Original price string exactly as Google displayed it |
| `currency` | string | ISO 4217 currency code parsed from the price |
| `originalPrice` | number | Strike-through "was" price, when shown |
| `discountPercent` | number | Discount percentage, when shown |
| `delivery` | string | Delivery / shipping text (e.g. "Free delivery") |
| `imageUrl` | string | Product image URL, when available (typically empty on result-grid rows) |
| `rating` | number | Star rating (1.0–5.0) |
| `ratingCount` | number | Total number of ratings |
| `condition` | string | Product condition, when shown |

### Tips for Best Results

- **Be specific with queries.** "bluetooth speaker under $50 waterproof" returns cleaner results than "speaker".
- **Match country, language, and currency.** Running a German query with `country: "de"`, `language: "de"`, and `currency: "EUR"` gives the most accurate local market snapshot.
- **Use `priceRaw` alongside `price`.** `priceRaw` preserves the exact string Google showed — useful when you want to audit currency symbols or spot multi-seller "from" pricing.
- **Batch related queries.** Running `["nike running shoes", "adidas running shoes", "hoka running shoes"]` in a single run is cheaper and faster than three separate runs.
- **Set `maxResults` realistically.** Google Shopping caps pagination at roughly 200 products per query. The actor accepts up to `300` per query, but you won't get more than Google itself serves — `0` is a good value when you want "everything Google has for this query".
- **Leave filters at defaults if you're unsure.** Google's own filter UI is loose — applying filters narrows results but doesn't strictly guarantee every row matches.

### Good to Know

A few honest caveats so you know what to expect:

- **Google Shopping caps results at ~200–300 per query.** Requesting `maxResults: 0` or a large number won't go beyond Google's own ceiling, which tends to be a few hundred rows per query.
- **Result counts may slightly exceed `maxResults`.** Google's first result page alone typically contains 30–55 products. The actor stops fetching new pages once the cap is reached, but returns the full last page instead of trimming mid-page — so a run with `maxResults: 20` often produces ~30+ rows.
- **Product IDs are session-scoped, not stable.** The `productId` field (`tsuid_...`) is a per-run identifier. Running the same query tomorrow will produce different IDs for the same products. Use `title` + `merchant` for cross-run matching.
- **Sort and price filters are best-effort.** Google's own Shopping UI applies these as soft hints, not strict constraints — most results will honor the filter, but outliers appear. If you need hard filtering, apply it on the output dataset.
- **Product detail enrichment coming soon.** Deep per-product data (full seller-offer list, specs, and editorial review quotes) is in development and temporarily disabled while we update to Google Shopping's latest page layout. The core product listing (title, merchant, price, rating, review count, delivery, discount) is fully supported today.
- **`imageUrl` on product rows is usually empty.** Google Shopping lazy-loads product images on its result cards, so image URLs from the result grid are typically unavailable. Image support will return alongside product detail enrichment.
- **Currency honoring varies.** Setting `currency: "EUR"` with `country: "us"` may still return USD prices if Google has no EUR inventory for that market — `priceRaw` always shows the truth.
- **`startUrls` must be Google domains.** URLs from other sites are skipped with a warning.

### Pricing

Flat **$2.50 per 1,000 products** (pay-per-result). **No compute charges — you only pay per product returned**, so the cost is predictable no matter how long a run takes or how much proxy bandwidth it uses.

| Results | Cost |
|---------|------|
| 100 | $0.25 |
| 1,000 | $2.50 |
| 10,000 | $25.00 |

Google Shopping caps pagination at roughly 200 products per query, so a single-query run is billed for at most ~200 rows — see **Good to Know** above for details on what counts as a billable row.

### Integrations

Export data in JSON, CSV, Excel, XML, or RSS. Connect your results to the tools you already use:

- **Apify API** — Full programmatic access to runs and datasets
- **Webhooks** — Get notified when a run completes
- **Google Sheets** — Direct spreadsheet export of the dataset
- **Zapier / Make / n8n** — Automate workflows across 1,500+ apps
- **Slack / Email** — Notifications on run completion or new results
- **Datasets** — Download as JSON, CSV, XML, or Excel

### Legal & Ethical Use

This actor is intended for legitimate market research, price monitoring, competitive analysis, and catalog enrichment. You are responsible for using the data in compliance with applicable laws and with Google's Terms of Service. Do not use the output for spam, harassment, deceptive pricing, or any illegal purpose. The actor collects only publicly visible product listings — no login, no personal data, and no private content.

# Actor input Schema

## `searchQueries` (type: `array`):

Keywords to search on Google Shopping (e.g., 'wireless earbuds' or 'running shoes'). Each query runs independently. Leave empty if you only want to scrape specific Google Shopping URLs.

## `startUrls` (type: `array`):

Google Shopping result URLs to scrape directly (e.g., 'https://www.google.com/search?tbm=shop\&q=laptop'). Useful when you already have filtered or sorted links and want the results without re-specifying the query.

## `maxResults` (type: `integer`):

Maximum number of products per search query or URL. The actor may return a few extra from the final page — it won't fetch additional pages once this number is reached. Google Shopping itself caps pagination at roughly 200 products per query. Set to 0 to fetch every available product up to Google's cap (~200).

## `country` (type: `string`):

Country code (gl) for localizing results. Use ISO 3166-1 alpha-2 (e.g., 'us', 'uk', 'fr').

## `language` (type: `string`):

Interface language (hl) for result text. Use ISO 639-1 (e.g., 'en', 'fr', 'de').

## `currency` (type: `string`):

Currency for prices (ISO 4217). Google honors this where supported for the chosen country.

## `sortBy` (type: `string`):

How to order results.

## `minPrice` (type: `integer`):

Only include products priced at or above this amount, in the selected currency. Leave empty for no lower bound.

## `maxPrice` (type: `integer`):

Only include products priced at or below this amount, in the selected currency. Leave empty for no upper bound.

## `condition` (type: `string`):

Filter products by condition. Google Shopping's search page only offers 'New' as a top-level condition filter.

## Actor input object example

```json
{
  "searchQueries": [
    "wireless earbuds"
  ],
  "startUrls": [],
  "maxResults": 50,
  "country": "us",
  "language": "en",
  "currency": "USD",
  "sortBy": "relevance",
  "condition": "any"
}
```

# Actor output Schema

## `products` (type: `string`):

Table of product results with title, merchant, price, rating, and link.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchQueries": [
        "wireless earbuds"
    ],
    "startUrls": [],
    "maxResults": 50,
    "country": "us",
    "language": "en",
    "currency": "USD",
    "sortBy": "relevance",
    "condition": "any"
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/google-shopping-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchQueries": ["wireless earbuds"],
    "startUrls": [],
    "maxResults": 50,
    "country": "us",
    "language": "en",
    "currency": "USD",
    "sortBy": "relevance",
    "condition": "any",
}

# Run the Actor and wait for it to finish
run = client.actor("solidcode/google-shopping-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQueries": [
    "wireless earbuds"
  ],
  "startUrls": [],
  "maxResults": 50,
  "country": "us",
  "language": "en",
  "currency": "USD",
  "sortBy": "relevance",
  "condition": "any"
}' |
apify call solidcode/google-shopping-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=solidcode/google-shopping-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Google Shopping Scraper",
        "description": "[💰 $2.5 / 1K] Extract product listings from Google Shopping — titles, prices, merchants, ratings, images, and delivery info. Optionally enrich each product with specs, description, full seller-offer list, and top reviews. Batch search queries and URLs across 45+ countries and 19+ languages.",
        "version": "1.0",
        "x-build-id": "S8jpwgfKyIE5o5ETW"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/solidcode~google-shopping-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-solidcode-google-shopping-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/solidcode~google-shopping-scraper/runs": {
            "post": {
                "operationId": "runs-sync-solidcode-google-shopping-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/solidcode~google-shopping-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-solidcode-google-shopping-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchQueries": {
                        "title": "Search Queries",
                        "type": "array",
                        "description": "Keywords to search on Google Shopping (e.g., 'wireless earbuds' or 'running shoes'). Each query runs independently. Leave empty if you only want to scrape specific Google Shopping URLs.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Google Shopping URLs",
                        "type": "array",
                        "description": "Google Shopping result URLs to scrape directly (e.g., 'https://www.google.com/search?tbm=shop&q=laptop'). Useful when you already have filtered or sorted links and want the results without re-specifying the query.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxResults": {
                        "title": "Maximum Results per Query",
                        "minimum": 0,
                        "maximum": 300,
                        "type": "integer",
                        "description": "Maximum number of products per search query or URL. The actor may return a few extra from the final page — it won't fetch additional pages once this number is reached. Google Shopping itself caps pagination at roughly 200 products per query. Set to 0 to fetch every available product up to Google's cap (~200).",
                        "default": 50
                    },
                    "country": {
                        "title": "Country",
                        "enum": [
                            "us",
                            "uk",
                            "ca",
                            "au",
                            "nz",
                            "ie",
                            "fr",
                            "de",
                            "es",
                            "it",
                            "nl",
                            "be",
                            "pt",
                            "ch",
                            "at",
                            "se",
                            "no",
                            "dk",
                            "fi",
                            "pl",
                            "jp",
                            "kr",
                            "cn",
                            "hk",
                            "tw",
                            "sg",
                            "my",
                            "th",
                            "id",
                            "ph",
                            "vn",
                            "in",
                            "br",
                            "mx",
                            "ar",
                            "cl",
                            "co",
                            "ae",
                            "sa",
                            "tr",
                            "il",
                            "za",
                            "eg"
                        ],
                        "type": "string",
                        "description": "Country code (gl) for localizing results. Use ISO 3166-1 alpha-2 (e.g., 'us', 'uk', 'fr').",
                        "default": "us"
                    },
                    "language": {
                        "title": "Language",
                        "enum": [
                            "en",
                            "fr",
                            "de",
                            "es",
                            "it",
                            "pt",
                            "nl",
                            "pl",
                            "tr",
                            "ru",
                            "ja",
                            "ko",
                            "zh-CN",
                            "zh-TW",
                            "ar",
                            "he",
                            "th",
                            "vi",
                            "id"
                        ],
                        "type": "string",
                        "description": "Interface language (hl) for result text. Use ISO 639-1 (e.g., 'en', 'fr', 'de').",
                        "default": "en"
                    },
                    "currency": {
                        "title": "Currency",
                        "enum": [
                            "USD",
                            "EUR",
                            "GBP",
                            "CAD",
                            "AUD",
                            "NZD",
                            "JPY",
                            "CNY",
                            "HKD",
                            "SGD",
                            "INR",
                            "BRL",
                            "MXN",
                            "CHF",
                            "SEK",
                            "NOK",
                            "DKK",
                            "PLN",
                            "TRY",
                            "AED",
                            "ZAR"
                        ],
                        "type": "string",
                        "description": "Currency for prices (ISO 4217). Google honors this where supported for the chosen country.",
                        "default": "USD"
                    },
                    "sortBy": {
                        "title": "Sort By",
                        "enum": [
                            "relevance",
                            "priceLowToHigh",
                            "priceHighToLow",
                            "rating"
                        ],
                        "type": "string",
                        "description": "How to order results.",
                        "default": "relevance"
                    },
                    "minPrice": {
                        "title": "Minimum Price",
                        "minimum": 0,
                        "maximum": 1000000,
                        "type": "integer",
                        "description": "Only include products priced at or above this amount, in the selected currency. Leave empty for no lower bound."
                    },
                    "maxPrice": {
                        "title": "Maximum Price",
                        "minimum": 0,
                        "maximum": 1000000,
                        "type": "integer",
                        "description": "Only include products priced at or below this amount, in the selected currency. Leave empty for no upper bound."
                    },
                    "condition": {
                        "title": "Condition",
                        "enum": [
                            "any",
                            "new"
                        ],
                        "type": "string",
                        "description": "Filter products by condition. Google Shopping's search page only offers 'New' as a top-level condition filter.",
                        "default": "any"
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
