# Google Shopping Scraper and Price Tracker (`cleanscrape/google-shopping-scraper`) Actor

Scrape Google Shopping prices by product name, model or barcode: price, original price, store, condition, delivery, rating and reviews. Compare each store's price and track only price changes on a schedule. No login. $1.50 per 1,000 products plus $6 per 1,000 searches. Maintained by CleanScrape.

- **URL**: https://apify.com/cleanscrape/google-shopping-scraper.md
- **Developed by:** [CleanScrape](https://apify.com/cleanscrape) (community)
- **Categories:** E-commerce, Automation, AI
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 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.
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 and Price Tracker

A Google Shopping scraper and price tracker: search any product by name, model number or barcode and export the results to a spreadsheet, with price, original price and discount, store, condition, delivery, returns, rating and review count. Turn on **Compare stores** to open Google's product page and get every store's price for the same product, with stock, delivery, returns and a direct link to the store. Schedule it with **Only new products and price changes** and each run gives you only what changed.

**$1.50 per 1,000 products, $6 per 1,000 searches, and $7 per 1,000 product pages for store comparison.** No login or API key is needed.

This Actor reads Google Shopping result pages. It is not affiliated with Google and is not an official API.

### Watch the walkthrough

The same Sony headphones go in, and five stores come out, from $199.99 to $349.99. This 68-second demo on real runs shows one search with 40 products, each store's price for a product, Google's typical price, four countries and price tracking.

https://youtu.be/MupcEQaofxY

### Start with a small run

The form opens with one product, **sony wh-1000xm5**, in the United States. Start it as it is, or replace it with your own products.

1. Enter **Products to search**, one per line: a name, a model number or a barcode (EAN/UPC).
2. Pick the **Country**. Prices come in that country's currency.
3. Start the run. Open **Products** for the listings and **Searches** for the lowest, median and highest price per product.
4. Download any table as CSV, Excel or JSON.

On 5 November 2026 this run saved 40 products in about 20 seconds.

### Choose a ready-to-run example

| Example | What you get |
| --- | --- |
| [Compare store prices for a product on Google Shopping](https://apify.com/cleanscrape/google-shopping-scraper/examples/compare-store-prices-google-shopping) | The Sony WH-1000XM5 in the US with each store's price, stock, returns and link for the top 5 products |
| [Track Google Shopping prices every day](https://apify.com/cleanscrape/google-shopping-scraper/examples/track-google-shopping-prices-daily) | Schedule it daily: three products, saving only price changes after the first run |
| [Google Shopping prices in the UK](https://apify.com/cleanscrape/google-shopping-scraper/examples/google-shopping-prices-uk) | Three products on Google Shopping UK, 40 listings each, prices in pounds |
| [Look up a product by barcode (UPC or EAN)](https://apify.com/cleanscrape/google-shopping-scraper/examples/google-shopping-barcode-lookup) | A UPC barcode to its listings, with each store's price for the matching product |
| [Used and refurbished prices on Google Shopping](https://apify.com/cleanscrape/google-shopping-scraper/examples/used-refurbished-prices-google-shopping) | Only pre-owned, used and refurbished iPhone 15 Pro listings |

### What you can search

| You enter | The Actor searches |
| --- | --- |
| `sony wh-1000xm5`, `lego 10316` | Google Shopping for those words |
| `027242923782` | A barcode (UPC or EAN), which usually finds the exact product |
| A Google Shopping results link | The same search, with the filters you set on Google (price range, brand, store and so on) |
| A Google Shopping product link | That product's page directly: every store's price goes to the **Stores** table |

Several products can go in one box, one per line. Repeated entries are searched once, and the run says so.

### Compare stores

Google Shopping shows one store per product in its results, and notes when more stores sell it. With **Compare stores** on, the Actor opens Google's product page for the top products of each search (**Products to compare stores for**, default 5) and saves each store listed there to the **Stores** table:

| Field | Example |
| --- | --- |
| `store`, `price`, `currency` | `Best Buy`, `199.99`, `USD` |
| `originalPrice`, `discountPercent` | `398`, `49` |
| `availability`, `delivery`, `returns` | `In stock online`, `Free delivery by Sat`, `15-day returns` |
| `storeRating`, `bestPrice` | `4.6`, `true` |
| `storeUrl` | The product on the store's own website |
| `typicalPriceLow`, `typicalPriceHigh` | Google's typical price range, such as `199` to `300`, when Google shows one |

Products that Google sells at several stores are compared first; a single marketplace listing has only one store to show.

### Price tracking

Turn on **Only new products and price changes**, give it a **Tracking name** (optional), and schedule the run, for example daily. Each run then saves a product only when:

- it wasn't seen before for that search (Google's listing ID, so each marketplace seller counts on its own), or
- its price changed since the last run (`previousPrice` and `priceChange` show by how much). Moves under 0.5%, and exchange-rate moves on sellers abroad whose own price stayed the same, don't count as changes.

Google rotates marketplace listings (eBay, Poshmark and similar sellers) between runs, so the first few tracking runs of a search still find listings they haven't seen. Turn on **Skip new listings** to save only price changes after the first run, which saves everything as the starting point.

The **Searches** table still gets a row for every search, with `lowestPrice`, `previousLowestPrice` and `lowestPriceChange`, so you can follow the trend even when nothing changed. With **Compare stores** on, a tracking run opens product pages only for products that are new or changed. The history is kept for 60 days in your own Apify account.

### Output

**Products** (one row per product listing):

| Field | Example |
| --- | --- |
| `title`, `position` | `Sony WH-1000XM5 Wireless Noise Canceling Headphones`, `1` |
| `price`, `currency` | `224.99`, `USD` |
| `originalPrice`, `originalPriceType`, `discountPercent` | `398`, `was`, `43` |
| `store`, `moreStores` | `Best Buy`, `true` |
| `condition` | `pre-owned`, `used` or `refurbished` when Google marks it; empty means no label (usually new) |
| `delivery`, `returns` | `Free delivery`, `Free 30-day returns` |
| `rating`, `reviewCount` | `4.6`, `13000` |
| `badges`, `foreignPrice` | `Low price`; the seller's own price when it sells from abroad, such as `€28` |
| `productId`, `offerId`, `productUrl` | Google's IDs and a link to the product on Google Shopping |
| `isNew`, `previousPrice`, `priceChange` | With tracking |

**Searches** (one row per search): `productsFound`, `rowsSaved`, `lowestPrice`, `medianPrice`, `highestPrice`, `currency`, `cheapestTitle`, `cheapestStore`, `status` and `note`. With tracking, also `previousLowestPrice` and `lowestPriceChange`.

The run report (`SUMMARY` in the key-value store) counts searches with products, without products and failed.

### Countries

United States, United Kingdom, Canada, Australia, New Zealand, Ireland, Germany, Austria, Switzerland, France, Belgium, Netherlands, Spain, Italy, Portugal, Sweden, Denmark, Norway, Finland, Poland, Czechia, India, Japan, Singapore, Malaysia, Philippines, Brazil, Mexico, South Africa, United Arab Emirates, Saudi Arabia and Turkey. Results come from that country's Google Shopping in its currency; product titles stay in the store's own language.

### Use it from the API

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cleanscrape/google-shopping-scraper").call(run_input={
    "queries": ["sony wh-1000xm5", "lego 10316"],
    "country": "us",
    "compareStores": True,
    "storesForTopProducts": 3,
})
for p in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(p["title"], p["price"], p["currency"], p["store"])
## The Stores and Searches tables are the run's other datasets:
stores = client.dataset(run["storageIds"]["datasets"]["stores"]).list_items().items
searches = client.dataset(run["storageIds"]["datasets"]["searches"]).list_items().items
```

### Pricing

**$1.50 per 1,000 products saved**, **$6 per 1,000 searches** and **$7 per 1,000 product pages** opened for store comparison. Bronze, Silver and Gold plans get 10%, 15% and 20% off. No start fee, and no charge for Apify platform usage.

- One product search with 40 results: about $0.066.
- The same with store prices for 5 products: about $0.10.
- Tracking 20 products once a day for a month, with a few price changes a day: about $3.80.

A search counts when Google Shopping answers it, including an answer with no products. Searches and product pages that fail are free, so are product pages where Google shows "Details aren't available", and an unchanged product on a tracking run isn't saved or charged.

### Speed and limits

- About 5 to 20 seconds per search, up to 6 searches at a time: 94 searches took about 6 minutes in tests.
- Google Shopping shows about 40 products per search. **Products per search** (default 40) can save fewer.
- Google's product pages list the stores Google shows there, usually 1 to 5. Store links are included when the page has them.
- Up to 1,000 searches per run.
- Now and then Google answers a search as if from another country (prices in another currency). The Actor notices, asks again, and never charges for such a page; a search that keeps coming back from abroad is marked failed and is free.

### Use it from an AI agent

This Actor works as a tool in Claude, Cursor and other AI assistants that support MCP, through Apify's MCP server. Add this server and sign in with your Apify account when asked:

```
https://mcp.apify.com?tools=cleanscrape/google-shopping-scraper
```

Then ask in plain words, for example: "Find the cheapest new Sony WH-1000XM5 on Google Shopping in the UK and list each store's price." The assistant runs the Actor in your Apify account and reads the results. The price per result is the same as in Console.

### Common questions

#### Is this the Google Shopping API?

No. Google's Content API is for merchants managing their own products and doesn't return other stores' prices. This Actor reads the same Google Shopping pages a browser shows.

#### Can I export to Excel or CSV?

Yes. Open the run's **Products**, **Stores** or **Searches** table and choose Export: CSV, Excel, JSON and more.

#### How much does it cost?

$1.50 per 1,000 products plus $6 per 1,000 searches; one search with 40 products costs about seven cents. See **Pricing** above.

#### Do I need a Google account or a proxy?

No. The Actor needs no login, cookies or API key, and you don't set up a proxy: Google pages are fetched through Apify Proxy, which is included in the price.

#### Why is a price different on the store's website?

Google Shopping shows the price the store sent to Google, which can lag behind the store's own page or depend on the visitor's location. Delivery costs are shown only when Google lists them.

#### Why are some products used or refurbished?

Google Shopping mixes new and second-hand listings. Use **Condition** to keep only new or only used items, or filter on the `condition` column.

#### Is it legal?

The Actor reads publicly available product listings, with no login. You're responsible for how you use the data and for following the laws and terms that apply to you. If unsure, ask a lawyer.

### Support

Questions or a problem? Open an issue on the Issues tab or write to contact.cleanscrape@gmail.com with the run ID and the search. Never include API tokens or private data.

If the Actor was useful, an honest review on its Store page helps other people find it.

CleanScrape is independent and not affiliated with, endorsed by, or sponsored by Google. Google and Google Shopping are trademarks of Google LLC. Product names, prices and listings belong to the stores and are shown as Google Shopping displays them.

### More tools from CleanScrape

- [Google Flights Scraper and Fare Tracker](https://apify.com/cleanscrape/google-flights-scraper): flight prices by route and date, with fare tracking
- [ATP and WTA Tennis Rankings Scraper](https://apify.com/cleanscrape/tennis-rankings-scraper): current ATP and WTA singles, doubles and race rankings with points and movement
- [Flashscore Tennis Scraper for Match History and Stats](https://apify.com/cleanscrape/tennis-match-data): tennis results, statistics, point-by-point and head-to-head
- [Kick Sponsor Tracker for Streamers, Brands and Promo Codes](https://apify.com/cleanscrape/kick-sponsor-tracker): which Kick streamers promote which brands, with codes and broadcast hours
- [Whatnot Scraper for Listings and Live Shows](https://apify.com/cleanscrape/whatnot-scraper): Whatnot listings with prices and seller stats, and live shows
- [Whatnot Seller Tracker for Top Sellers and Sales](https://apify.com/cleanscrape/whatnot-seller-tracker): top sellers per category, items sold, sales per day and followers over time
- [TikTok Shop Product Scraper](https://apify.com/cleanscrape/tiktok-shop-product-scraper): US TikTok Shop prices, sellers and ratings
- [Bilibili Scraper (哔哩哔哩) for Videos, Comments and Danmaku](https://apify.com/cleanscrape/bilibili-scraper): Bilibili videos, danmaku, comments and creators
- [App Store Reviews & Google Play Reviews Scraper (Play Store)](https://apify.com/cleanscrape/app-store-reviews-scraper): reviews from both app stores in one table
- [Google Trends Scraper API for Interest Over Time](https://apify.com/cleanscrape/google-trends-scraper): search interest over time, by region, related queries and trending searches
- [Map Your Show Exhibitor List Scraper for Trade Shows](https://apify.com/cleanscrape/event-exhibitor-monitor): trade show exhibitor lists and booth changes
- [Shopify Product Reviews Scraper for Judge.me and Okendo](https://apify.com/cleanscrape/shopify-reviews-scraper): Judge.me and Okendo reviews from Shopify product links
- [Google News Scraper and RSS Feed Reader](https://apify.com/cleanscrape/google-news-scraper): headlines from Google News and publisher feeds
- [Google Jobs Scraper for Job Search, Listings and Salaries](https://apify.com/cleanscrape/google-jobs-scraper): job listings with salaries and apply links
- [Pinterest Scraper API](https://apify.com/cleanscrape/pinterest-scraper): keyword search, public pin links and board previews; search results may lack a pin link
- [Google Hotels Scraper for Google Travel Hotel Prices](https://apify.com/cleanscrape/google-hotels-scraper): hotel prices and booking offers for your dates
- [Meta Threads Scraper for Posts and Replies](https://apify.com/cleanscrape/threads-scraper): public Threads posts from accounts or post links
- [Likee Scraper API](https://apify.com/cleanscrape/likee-scraper): Likee videos and comments
- [Casino Bonus Checker for Affiliate and Review Sites](https://apify.com/cleanscrape/casino-bonus-checker): the casino bonus each affiliate and review site shows, with promo codes, 18+ notices and affiliate IDs
- [Video Frame Extractor for Scene Changes and Thumbnails](https://apify.com/cleanscrape/video-frame-extractor): still images from video files at scene changes, intervals or timestamps, with contact sheets
- [Career Site Job Listings from Workday, Greenhouse and Lever](https://apify.com/cleanscrape/career-site-jobs-scraper): open jobs from company career pages, with salaries and new or closed jobs per company
- [Economic Calendar Scraper for Official Release Dates](https://apify.com/cleanscrape/economic-calendar-api): central bank decisions and economic releases with dates and times
- [Audio Transcription and Speech to Text for Podcasts](https://apify.com/cleanscrape/podcast-transcription): podcast episodes and audio files to text with timestamps and subtitles

# Actor input Schema

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

Product names, model numbers or barcodes (EAN/UPC), one per line, such as "sony wh-1000xm5" or "lego 10316". You can also paste a Google Shopping results link (its filters are kept) or a Google Shopping product link (its stores are read directly).

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

Which Google Shopping to search. Prices are in that country's currency.

## `maxProductsPerSearch` (type: `integer`):

Most products to save per search. Google Shopping shows about 40 per search.

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

Keep only products in this condition.

## `compareStores` (type: `boolean`):

Open Google's product page for the top products and save every store listed there (price, stock, delivery, returns, store link) to the Stores table. Charged per product page.

## `storesForTopProducts` (type: `integer`):

How many products per search get their store list. Products Google sells at several stores go first, then Google's order.

## `onlyNewOrChanged` (type: `boolean`):

For scheduled runs: save only products that are new for a search or whose price changed since the last run. The Searches table shows the lowest price against the last run.

## `skipNewListings` (type: `boolean`):

With tracking: after the first run (which saves everything as the starting point), save only price changes, not listings seen for the first time. Google rotates marketplace listings (eBay sellers and the like) between runs, so this keeps scheduled runs to real price moves.

## `watchName` (type: `string`):

Optional. Runs with the same name share their history. Leave empty to use one history per set of searches.

## Actor input object example

```json
{
  "queries": [
    "sony wh-1000xm5"
  ],
  "country": "us",
  "maxProductsPerSearch": 40,
  "condition": "any",
  "compareStores": false,
  "storesForTopProducts": 5,
  "onlyNewOrChanged": false,
  "skipNewListings": false
}
```

# Actor output Schema

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

No description

## `tracking` (type: `string`):

No description

## `stores` (type: `string`):

No description

## `searches` (type: `string`):

No description

## `summary` (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": [
        "sony wh-1000xm5"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("cleanscrape/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": ["sony wh-1000xm5"] }

# Run the Actor and wait for it to finish
run = client.actor("cleanscrape/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": [
    "sony wh-1000xm5"
  ]
}' |
apify call cleanscrape/google-shopping-scraper --silent --output-dataset

```

## MCP server setup

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