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

Scrape Google Shopping results for any product: title, price and currency, old price and discount, store, rating and reviews count, delivery and returns, thumbnail and product IDs. Any country. A product price tracker and Google Shopping API for competitor price tracking.

- **URL**: https://apify.com/piotrv1001/google-shopping-scraper.md
- **Developed by:** [FalconScrape](https://apify.com/piotrv1001) (community)
- **Categories:** E-commerce, SEO tools, Lead generation
- **Security:** Limited permissions
- **Stats:** 3 total users, 2 monthly users, 80.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 products

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/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

Scrape **Google Shopping** results for any product and export them as JSON, CSV or Excel. For each query the **Google Shopping Scraper** saves every product listing with its **title, price and currency, old price and discount, store (merchant), rating and reviews count**, delivery and returns notes, thumbnail and Google product IDs. Pick the country to shop in and get local stores and prices. Use it as a **product price tracker**, for **competitor price tracking** and price monitoring, or market research, like a **Google Shopping API**. No Google account or API key needed.

### ✨ Features

- 🔎 **Many queries per run**: one product, brand, model or category per line.
- 💲 **Prices as numbers**: `price` and `oldPrice` parsed into numbers with an ISO `currency`, plus the price text as shown.
- 🏷️ **Deals**: old price and discount ("24% OFF") when the store has a sale.
- 🏪 **Store and reviews**: merchant name, whether more stores sell it, rating and number of reviews.
- 🚚 **Delivery and returns**: "Free delivery", "Free 90-day returns" and similar notes.
- 🌍 **Any country**: stores, prices and currency of the country you choose (`us`, `gb`, `de`, `au`...).
- 🧹 **No duplicates**: a product Google repeats is saved and charged once per query.

### 🛠️ How It Works

1. **Enter search queries**, one per line.
2. **Pick the country, the language and the number of products per query.**
3. **Run the Scraper**, or schedule it as a price tracker, and download the products as JSON, CSV or Excel.

### ⚙️ Input

| Field                      | What it does                                                                     |
| -------------------------- | -------------------------------------------------------------------------------- |
| **Search queries**         | Products to search, one per line. Default `coffee maker`.                        |
| **Max products per query** | Products saved per query. Default 50.                                            |
| **Country**                | Two-letter country code to shop in. Default `us`.                                |
| **Language**               | Google interface language, e.g. `en`, `de`, `pt-BR`. Default `en`.              |

```json
{
    "queries": ["coffee maker", "iphone 16 pro case", "nike air max 90"],
    "maxItems": 100,
    "countryCode": "us",
    "languageCode": "en"
}
```

#### How many products per query?

Google Shopping lists roughly **150–300 unique products per query** (in our tests "coffee maker" 266 and "air fryer" 278); the first page has about 55 and each next page about 40. The Actor pages until Google stops listing new products, and the run's status message says how many a query had when it ends before your limit.

### 🔍 Use cases

- **Product price tracker**: schedule a daily run for your products and track prices and discounts across stores.
- **Competitor price tracking**: see which stores sell a product, at what price, with what delivery and returns.
- **Price monitoring for brands**: watch resellers' prices and sales for your catalogue.
- **Market research**: which products, brands and stores dominate a category, with ratings and review counts.
- **Lead lists**: online stores selling in a niche, per country.

### 💰 Pricing

Pay only for the products you get. No monthly rental.

| Event           | Price                                  | What you get                                  |
| --------------- | -------------------------------------- | --------------------------------------------- |
| **Product**     | $0.002 per product ($2 per 1,000)      | One unique product with all fields below      |
| **Actor start** | $0.00005 per run                       | Charged once when the run starts.             |

Examples: 50 products ≈ $0.10 · 1,000 products = $2.00 · a daily tracker for 20 queries × 50 products ≈ $60 per month.

### 📊 Sample Output Data

```json
{
    "query": "coffee maker",
    "position": 12,
    "productId": "11232830095310954374",
    "title": "Mr. Coffee 5-Cup Programmable Coffee Maker",
    "price": 18.99,
    "currency": "USD",
    "priceText": "$18.99",
    "oldPrice": 25,
    "oldPriceText": "$25",
    "discount": "24% OFF",
    "merchant": "Target",
    "moreMerchants": true,
    "rating": 5,
    "reviewsCount": 4000,
    "delivery": "Free delivery on $35+",
    "returns": "90-day returns",
    "thumbnailUrl": "https://encrypted-tbn2.gstatic.com/shopping?q=tbn:ANd9GcTwJyicAsKeiLhxC-6Q7k_S5lzwm5dRBEg6KPsKpms-w1xPR6SZyGnDovmwSiP4Q_IjNRVLnWJ3UFVYV5xzTmaMGLJFgGl5",
    "catalogId": "15685901338654182355",
    "offerId": "9800786374582178829",
    "googleShoppingUrl": "https://www.google.com/search?q=Mr.+Coffee+5-Cup+Programmable+Coffee+Maker&udm=28&gl=us&hl=en",
    "countryCode": "us",
    "languageCode": "en"
}
```

- `merchant` is the store with the listed price; `moreMerchants` = Google shows other stores for the same product.
- `oldPrice` is the former or usual price Google shows ("Was $25", "Usually $300").
- `googleShoppingUrl` opens Google Shopping for the product; the store's own product link is not on the results page.

### ❓ FAQ

**Is there a Google Shopping API?** Google's Content API is for merchants' own products, not for search results. This Actor works like a Google Shopping results API: send queries through the Apify API and get structured JSON back.

**Can I track prices over time?** Yes. Save the input as a Task and schedule it; compare `price` per `productId` between runs.

**Can I scrape another country?** Yes. Set "Country" (e.g. `gb`, `de`, `au`); prices come in that country's currency.

**Does it return the store's product URL?** No. The results page has the store name but not its link; each row has the product IDs and a Google Shopping link instead.

**Why do some products have no rating?** Google shows a rating only when the product has reviews.

# Actor input Schema

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

Products to search on Google Shopping, one query per line (a product name, brand, model or category).

## `maxItems` (type: `integer`):

How many products to save for each query. Google Shopping lists roughly 100-300 unique products per query; the run says when a query has no more.

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

Two-letter country code to shop in, e.g. us, gb, de, fr, au. Sets the stores, prices and currency.

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

Language of the Google interface, e.g. en, de, es, pt-BR.

## Actor input object example

```json
{
  "queries": [
    "coffee maker",
    "iphone 16 pro case",
    "nike air max 90"
  ],
  "maxItems": 50,
  "countryCode": "us",
  "languageCode": "en"
}
```

# Actor output Schema

## `results` (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": [
        "coffee maker"
    ],
    "maxItems": 50,
    "countryCode": "us",
    "languageCode": "en"
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/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 = {
    "queries": ["coffee maker"],
    "maxItems": 50,
    "countryCode": "us",
    "languageCode": "en",
}

# Run the Actor and wait for it to finish
run = client.actor("piotrv1001/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 '{
  "queries": [
    "coffee maker"
  ],
  "maxItems": 50,
  "countryCode": "us",
  "languageCode": "en"
}' |
apify call piotrv1001/google-shopping-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,piotrv1001/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/cVFH7OxI5yHPHc3Nl/builds/JflfqGkYiNbBakg6m/openapi.json
