# Google Shopping Scraper (`crawlerbros/google-shopping-insights`) Actor

Scrape Google Shopping search results. Extract product titles, prices, merchant names, ratings, reviews, images, and shipping info for any search query.

- **URL**: https://apify.com/crawlerbros/google-shopping-insights.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** E-commerce, Other, Developer tools
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 12 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 — Product Prices, Merchants & Reviews

Extract product data from Google Shopping search results. Get prices, merchant names, ratings, reviews, delivery info, and discount details for any search query across 39 countries.

### What does this scraper do?

This actor searches Google Shopping for your queries and extracts structured product data from the results. Each result includes the product title, current price, original price (if discounted), merchant name, rating, review count, and delivery information.

### Features

- Search Google Shopping for any product query
- Extract product prices with currency detection
- Get merchant/store names for each listing
- Collect ratings and review counts
- Detect discounted items with original prices
- Support for 39 countries with localized pricing
- Filter by condition (New, Used, Refurbished)
- Sort by relevance, review score, or price
- Price range filtering (min/max)
- Automatic retry with proxy rotation for reliability

### Input

| Field | Type | Required | Default | Description |
|-------|------|----------|---------|-------------|
| `queries` | Array | Yes | — | Product search queries (e.g., "iPhone 15 Pro Max") |
| `maxResultsPerQuery` | Integer | No | 20 | Maximum products per query (1-100) |
| `countryCode` | String | No | "us" | Country for localized results (39 countries) |
| `languageCode` | String | No | "en" | Language for results |
| `sortBy` | String | No | "" | Sort: relevance, review_score, price_low, price_high |
| `condition` | String | No | "" | Filter: new, used, refurbished |
| `minPrice` | Integer | No | — | Minimum price filter |
| `maxPrice` | Integer | No | — | Maximum price filter |
| `proxyConfiguration` | Object | No | GOOGLE_SERP proxy | Proxy config (GOOGLE_SERP proxy provides reliable Google access) |

#### Example Input

```json
{
    "queries": ["iPhone 15 Pro Max"],
    "maxResultsPerQuery": 10,
    "countryCode": "us",
    "languageCode": "en"
}
````

#### Multiple Queries

```json
{
    "queries": ["laptop", "wireless headphones", "running shoes"],
    "maxResultsPerQuery": 20
}
```

### Output

Each result represents one product from Google Shopping search results:

| Field | Type | Description |
|-------|------|-------------|
| `query` | String | Search query used |
| `position` | Integer | Position in results (1-based) |
| `title` | String | Product title |
| `price` | String | Current price with currency (e.g., "$999.00") |
| `originalPrice` | String | Original price if discounted (e.g., "$1,200") |
| `currency` | String | Currency code (USD, EUR, GBP, etc.) |
| `merchant` | String | Store or merchant name |
| `rating` | String | Average rating (e.g., "4.5") |
| `reviewCount` | String | Number of reviews (e.g., "1,234") |
| `imageUrl` | String | Product thumbnail image URL |
| `delivery` | String | Delivery info (e.g., "Free delivery") |
| `isSponsored` | Boolean | Whether this is a sponsored/ad result |
| `searchUrl` | String | Google Shopping search URL |
| `scrapedAt` | String | ISO timestamp when scraped |

#### Example Output

```json
{
    "query": "laptop",
    "position": 1,
    "title": "HP Victus 15.6 inch FHD 144Hz Gaming Laptop Intel Core i5-13420H",
    "price": "$736.00",
    "originalPrice": "$1,020",
    "currency": "USD",
    "merchant": "Best Buy",
    "rating": "4.6",
    "reviewCount": "1.4K",
    "imageUrl": "https://encrypted-tbn0.gstatic.com/shopping?q=tbn:ANd9GcSwhzmT1uDz...",
    "delivery": "Free delivery",
    "isSponsored": false,
    "searchUrl": "https://www.google.com/search?q=laptop&tbm=shop&hl=en&gl=us",
    "scrapedAt": "2026-04-08T12:09:58.291853+00:00"
}
```

### Use Cases

- **Price Monitoring**: Track product prices across merchants over time
- **Competitive Analysis**: Compare pricing strategies of different sellers
- **Market Research**: Discover product trends, pricing patterns, and merchant landscapes
- **Deal Detection**: Find discounted products by tracking original vs current prices
- **Product Catalog Building**: Build databases of products with pricing and reviews
- **Merchant Intelligence**: Analyze which merchants sell which products at what prices

### How much does it cost?

The scraper uses residential proxy for reliable access to Google Shopping. Cost depends on the number of queries and results requested.

| Scenario | Estimated Cost |
|----------|----------------|
| 1 query, 5 results | ~$0.10 |
| 5 queries, 20 results each | ~$0.50 |
| 10 queries, 50 results each | ~$1.50 |

Costs vary based on proxy usage and retry attempts needed.

### Tips for Best Results

1. **Use specific queries** for more relevant results (e.g., "iPhone 15 Pro Max 256GB" instead of just "iPhone")
2. **Set country code** to get localized prices and merchants
3. **Use filters** (condition, price range) to narrow results
4. **Keep maxResultsPerQuery reasonable** (20-50) for faster runs
5. **Proxy is required** — Google blocks datacenter IPs. GOOGLE\_SERP proxy is recommended

### Supported Countries

United States, United Kingdom, Canada, Australia, Germany, France, Spain, Italy, Brazil, Mexico, India, Japan, South Korea, Netherlands, Belgium, Austria, Switzerland, Sweden, Norway, Denmark, Finland, Poland, Czech Republic, Portugal, Ireland, New Zealand, South Africa, Singapore, Hong Kong, Taiwan, Philippines, Thailand, Indonesia, Malaysia, Vietnam, Argentina, Chile, Colombia, Peru, Turkey, Russia, Ukraine, Israel, UAE, Saudi Arabia, Egypt, Nigeria, Kenya.

### FAQ

#### Does this actor need cookies or login?

No. The scraper works with publicly available Google Shopping search results and does not require any authentication.

#### Why is proxy required?

Google blocks automated access from datacenter IPs. The GOOGLE\_SERP proxy is optimized for Google search and provides reliable access to Shopping results. Residential proxy also works as a fallback.

#### How many results can I get per query?

Google Shopping typically shows 40-100 products per search page. The scraper supports pagination and can extract up to 100 results per query.

#### What happens if Google blocks a request?

The scraper automatically retries with a fresh proxy session (different IP address). It makes up to 3 attempts per page, with increasing delays between retries.

#### Can I scrape product detail pages?

This actor focuses on search results, which provide the key data (title, price, merchant, rating, reviews). The `productUrl` field (when available) links to Google's product comparison page for additional details.

#### Does this support international pricing?

Yes. Set the `countryCode` parameter to get results in local currency. The `currency` field indicates the detected currency code (USD, EUR, GBP, etc.).

# Actor input Schema

## `queries` (type: `array`):

List of product search queries to look up on Google Shopping (e.g., "iPhone 15 Pro Max", "running shoes").

## `maxResultsPerQuery` (type: `integer`):

Maximum number of product results to extract per search query.

## `countryCode` (type: `string`):

Country for localized results and pricing. Determines the Google domain used.

## `languageCode` (type: `string`):

Language for results (hl parameter). E.g. 'en', 'de', 'fr'. Leave empty for default.

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

How to sort Google Shopping results.

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

Filter products by condition.

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

Minimum price filter (in local currency units). Leave empty for no minimum.

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

Maximum price filter (in local currency units). Leave empty for no maximum.

## `proxyConfiguration` (type: `object`):

Proxy configuration. GOOGLE\_SERP proxy provides the most reliable access to Google Shopping.

## Actor input object example

```json
{
  "queries": [
    "iPhone 15 Pro Max"
  ],
  "maxResultsPerQuery": 5,
  "countryCode": "us",
  "languageCode": "en",
  "sortBy": "",
  "condition": "",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "GOOGLE_SERP"
    ]
  }
}
```

# Actor output Schema

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

No description

# 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 = {
    "queries": [
        "iPhone 15 Pro Max"
    ],
    "maxResultsPerQuery": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/google-shopping-insights").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 = {
    "queries": ["iPhone 15 Pro Max"],
    "maxResultsPerQuery": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/google-shopping-insights").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 '{
  "queries": [
    "iPhone 15 Pro Max"
  ],
  "maxResultsPerQuery": 5
}' |
apify call crawlerbros/google-shopping-insights --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Google Shopping Scraper",
        "description": "Scrape Google Shopping search results. Extract product titles, prices, merchant names, ratings, reviews, images, and shipping info for any search query.",
        "version": "1.0",
        "x-build-id": "dRQuBGQzlmefpMBgL"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/crawlerbros~google-shopping-insights/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-crawlerbros-google-shopping-insights",
                "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/crawlerbros~google-shopping-insights/runs": {
            "post": {
                "operationId": "runs-sync-crawlerbros-google-shopping-insights",
                "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/crawlerbros~google-shopping-insights/run-sync": {
            "post": {
                "operationId": "run-sync-crawlerbros-google-shopping-insights",
                "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",
                "required": [
                    "queries"
                ],
                "properties": {
                    "queries": {
                        "title": "Search Queries",
                        "minItems": 1,
                        "type": "array",
                        "description": "List of product search queries to look up on Google Shopping (e.g., \"iPhone 15 Pro Max\", \"running shoes\").",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxResultsPerQuery": {
                        "title": "Max Results Per Query",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Maximum number of product results to extract per search query.",
                        "default": 20
                    },
                    "countryCode": {
                        "title": "Country",
                        "enum": [
                            "us",
                            "uk",
                            "ca",
                            "au",
                            "de",
                            "fr",
                            "es",
                            "it",
                            "br",
                            "mx",
                            "in",
                            "jp",
                            "kr",
                            "nl",
                            "be",
                            "at",
                            "ch",
                            "se",
                            "no",
                            "dk",
                            "fi",
                            "pl",
                            "cz",
                            "pt",
                            "ie",
                            "nz",
                            "za",
                            "sg",
                            "hk",
                            "tw",
                            "ph",
                            "th",
                            "id",
                            "my",
                            "vn",
                            "ar",
                            "cl",
                            "co",
                            "pe",
                            "tr",
                            "ru",
                            "ua",
                            "il",
                            "ae",
                            "sa",
                            "eg",
                            "ng",
                            "ke"
                        ],
                        "type": "string",
                        "description": "Country for localized results and pricing. Determines the Google domain used.",
                        "default": "us"
                    },
                    "languageCode": {
                        "title": "Language",
                        "type": "string",
                        "description": "Language for results (hl parameter). E.g. 'en', 'de', 'fr'. Leave empty for default.",
                        "default": "en"
                    },
                    "sortBy": {
                        "title": "Sort By",
                        "enum": [
                            "",
                            "review_score",
                            "price_low",
                            "price_high"
                        ],
                        "type": "string",
                        "description": "How to sort Google Shopping results.",
                        "default": ""
                    },
                    "condition": {
                        "title": "Condition",
                        "enum": [
                            "",
                            "new",
                            "used",
                            "refurbished"
                        ],
                        "type": "string",
                        "description": "Filter products by condition.",
                        "default": ""
                    },
                    "minPrice": {
                        "title": "Minimum Price",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum price filter (in local currency units). Leave empty for no minimum."
                    },
                    "maxPrice": {
                        "title": "Maximum Price",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum price filter (in local currency units). Leave empty for no maximum."
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy configuration. GOOGLE_SERP proxy provides the most reliable access to Google Shopping.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "GOOGLE_SERP"
                            ]
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
