# Google Shopping Scraper — Prices & Products (`muhammadafzal/google-shopping-scraper`) Actor

Scrape Google Shopping products, prices, merchants, ratings, delivery details, and links for ecommerce monitoring and comparison research.

- **URL**: https://apify.com/muhammadafzal/google-shopping-scraper.md
- **Developed by:** [Muhammad Afzal](https://apify.com/muhammadafzal) (community)
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Google Shopping Scraper — Prices & Products

Google Shopping Scraper returns product listings for any keyword: title, price, old price, merchant, rating, review count, delivery note, image and product link, from 20 Google Shopping countries. It is built for price monitoring, competitor research and catalog building, and costs about USD 5 per 1,000 products on the FREE tier (USD 4 per 1,000 on GOLD).

### What data does it return?

| Field | What it contains |
|---|---|
| `title` | Product name |
| `price`, `priceValue`, `currency` | Price as shown, as a number, and the ISO currency code |
| `oldPrice`, `oldPriceValue` | Previous price when the listing shows a discount, else `null` |
| `source` | Merchant selling the product |
| `productUrl` | Google Shopping product page with all offers |
| `productId` | Google Shopping product ID |
| `imageUrl` | Product thumbnail |
| `rating`, `ratingCount` | Star rating and number of reviews, or `null` |
| `delivery` | Delivery note, for example `Free delivery` |
| `position` | Rank in the results (1 = first) |
| `scrapedAt`, `searchQuery` | Collection time and the keyword |

Products that Google repeats on the page are delivered once. `currency` is always an ISO code, even in markets that display a symbol such as `￥` or `₹`.

### How do I scrape Google Shopping?

1. **Search Queries:** one or more product keywords.
2. **Max Results Per Query:** 1–100. Google Shopping usually lists about 60 distinct products per query.
3. **Country** and **Language:** the Google Shopping market and interface language.
4. Optional **Location:** a city such as `New York,New York,United States` for local prices and stores.
5. Optional **Sort By**, or a **Min Price** / **Max Price** filter (Google ignores sorting when a price filter is set, so use one or the other).

```json
{
  "searchQueries": ["laptops", "coffee maker"],
  "maxResults": 20,
  "countryCode": "us",
  "maxPrice": 800
}
```

Output example (one row):

```json
{
  "title": "HP OmniBook 3 Laptop PC 16\" AMD Ryzen 5 Windows 11 Home",
  "price": "$549.99",
  "priceValue": 549.99,
  "currency": "USD",
  "oldPrice": "$850",
  "oldPriceValue": 850,
  "source": "Target",
  "productUrl": "https://www.google.com/search?ibp=oshop&q=laptops&prds=catalogid:3072903379801513406,produ…",
  "productId": "15220921323174454992",
  "imageUrl": "https://encrypted-tbn1.gstatic.com/shopping?q=tbn:ANd9GcTVDw…",
  "rating": 4.4,
  "ratingCount": 23,
  "delivery": "Free delivery",
  "position": 1,
  "scrapedAt": "2026-11-04T02:00:00.000Z",
  "searchQuery": "laptops"
}
```

### How much does it cost?

Pay per event, with platform usage included:

| Event | FREE | BRONZE | SILVER | GOLD |
|---|---:|---:|---:|---:|
| Result (one product in the dataset) | USD 0.005001 | USD 0.004875 | USD 0.00475 | USD 0.004 |
| Actor start (per started GB of allocated memory) | USD 0.006251 | USD 0.006094 | USD 0.005938 | USD 0.005 |

At the default 256 MB, 2 queries × 20 products cost 40 × USD 0.005001 + USD 0.006251 ≈ **USD 0.21** on the FREE tier.

### When should I use something else?

- You need every seller's offer for one product: this Actor returns the main listing per product.
- You need Amazon or Walmart catalog data with full specifications: use a store-specific scraper.

### FAQ

#### Which countries are supported?

United States, United Kingdom, Germany, France, Canada, Australia, Japan, India, Brazil, Mexico, Spain, Italy, Netherlands, Sweden, Norway, Denmark, Finland, Poland, Singapore and the United Arab Emirates.

#### Is `productUrl` the merchant's page?

It is Google's product page, which lists the merchant offers. The merchant name is in `source`.

#### What happened to the uule location code?

It is no longer used. Put a city in **Location** instead; an old `locationCode` value is ignored with a warning.

#### Use it from an AI assistant

Add `https://mcp.apify.com/?tools=muhammadafzal/google-shopping-scraper` to Claude, ChatGPT or any MCP client and ask, for example, "Find 20 running shoes under USD 100 on Google Shopping."

Last verified: 2026-11-04

# Actor input Schema

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

One or more product keywords, for example 'running shoes', 'laptops' or 'coffee maker'. Up to 50 per run.

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

Maximum products per search query (1–100). Google Shopping usually lists about 60 distinct products per query; products repeated on the page are delivered once.

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

Google Shopping market. Prices, merchants and availability differ by country.

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

Language for search results. Use 'en' for English, 'de' for German, 'fr' for French, etc.

## `location` (type: `string`):

Optional city for local results, as 'City,State,Country' (for example 'New York,New York,United States') or a ZIP code. Leave empty to search the whole country.

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

Result order. Cannot be combined with Min Price or Max Price, because Google drops the sort when a price filter is set.

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

Optional lowest price, in the country's currency.

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

Optional highest price, in the country's currency.

## Actor input object example

```json
{
  "searchQueries": [
    "coffee maker"
  ],
  "maxResults": 3,
  "countryCode": "us",
  "languageCode": "en",
  "sortBy": "relevance"
}
```

# Actor output Schema

## `results` (type: `string`):

Dataset of Google Shopping products.

# 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": [
        "coffee maker"
    ],
    "maxResults": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("muhammadafzal/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": ["coffee maker"],
    "maxResults": 3,
}

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

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).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": [
    "coffee maker"
  ],
  "maxResults": 3
}' |
apify call muhammadafzal/google-shopping-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,muhammadafzal/google-shopping-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/7l8jNXWwVDo5ykgt4/builds/ieh4HqRYLtEPJf5St/openapi.json
