# Google Shopping Scraper: Prices, Stores and Offers

> Google Shopping scraper: product title, price, store, rating and reviews for your searches. Add offers to see each store's price. Pick a country.

URL: https://cliqtomedia.com/actors/google-shopping-scraper/

Category: E-commerce & prices · Status: coming soon · Apify profile: https://apify.com/cliqtomedia?fpr=cliqto

Add product searches and pick a country. You get Google Shopping results as one row per product. Turn on offers to see the price of each store.

## How to use it: 3 steps

1. **Follow us on Apify.** The tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run.
2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `wireless earbuds` in Product searches. Each start is one run.
3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

## What it does

Add product searches, pick a country, and get Google Shopping results as one row per product: title, price as a number with currency, store, rating, reviews and the Google product link. Turn on offers to get the price of every store that sells the product.

- product card: position, title, price (number), price text, old price, currency (ISO code), store, "& more stores" flag, rating, number of reviews, delivery and returns notes, condition, Google product IDs and the Google product page link;
- offers (optional): for each product, the list of stores from the Google product page, with price, currency, availability, store rating, delivery, returns and a link.

### Good for

- Check prices of your products and competitors in one country.
- See which stores sell a product and for how much.
- Collect product lists for a category or keyword with ratings and reviews.
- Watch price changes with a daily or weekly schedule.

### Not a good fit

- One Google Shopping page per search: up to 60 products. Google does not give more pages in this format.
- No sorting or price filters: Google ignores them for this kind of request.
- No product images: Google puts small images inside the page code, not as links.
- Rating and reviews are as shown on the Google product card. For some products Google shows the rating of one store listing, so it can differ from other sites.
- The local-currency check covers 61 countries. In other countries results are saved as Google shows them.
- Store links in offers are Google redirect links (`google.com/goto?...`), not direct store URLs.
- In the EU (for example France), Google often does not open the product page. Products are still saved, but their offers are `null` and the row status is `partial` (see Troubleshooting).

## Price

Prices will be shown after release.

## Questions

### Do I need a Google account?

No. No Google login or API key is needed.

### How many products per search?

Up to 60, the size of one Google Shopping page.

### Can I sort or filter by price?

No. Google ignores these for this kind of request.

### Are store links direct?

No. Store links in offers are Google redirect links.

### Which countries work?

You can choose any country from the list, but Google Shopping does not work in every country. Tests used the US, UK, Germany, Canada, France and Australia. In 61 countries (for example the US, UK, Canada, Australia, the euro area, Japan, India and Brazil) the Actor checks that prices are in the local currency; if Google answers for another country, it tries again from a new IP address. In other countries it saves the results as Google shows them and writes `COUNTRY_NOT_CHECKED` in the `RUN_SUMMARY` warnings.

### Why is `price` a number?

So you can sort and compare. The price as shown is in `priceText`, and the currency code is in `currency`.

### What does `null` mean?

Google did not show that value, for example no rating or no old price. It is not zero and not an error.

## Data fields

- `query` (string): Your product search.
- `position` (integer): Place of the product on the Google Shopping page (1 = first); null on not_found/error rows.
- `title` (string): Product name as Google shows it.
- `price` (number): Price as a number in the listed currency, e.g. 299. Null when Google shows no price.
- `priceText` (string): Price exactly as shown, e.g. "$299.00" or "24,90 €".
- `oldPrice` (number): Earlier price when Google shows a discount ("was $90"); null otherwise.
- `currency` (string): ISO currency code from the price symbol and country, e.g. USD, EUR; null when it is not clear.
- `condition` (string): Condition label when Google shows one ("Used", "Refurbished"); null for new items.
- `merchant` (string): Store that Google shows on the card.
- `moreMerchants` (boolean): True when the card says "& more": other stores also sell this product.
- `rating` (number): Product rating 0–5; null when Google shows none.
- `reviewsCount` (integer): Number of product reviews (as rounded as Google shows it, e.g. "3K" = 3000); null when none.
- `delivery` (string): Delivery text, e.g. "Free delivery by Mon".
- `returns` (string): Returns text, e.g. "30-day returns".
- `productUrl` (string): Google Shopping product page with the stores that sell it.
- `offers` (array): Stores selling the product (only with "Include offers"): merchant, price, availability, delivery, returns, store rating, Google link to the store page. Null when not requested or not loaded; [] when Google lists no offers.
- `offersCount` (integer): Number of offers loaded; null when offers were not loaded.
- `ids` (object): Google product ids: catalogId, gpcId, offerDocId, productDocId (any may be null).
- `countryCode` (string): Google country used (gl).
- `languageCode` (string): Google language used (hl).
- `searchUrl` (string): Google Shopping page that was scraped.
- `status` (string): complete = a product; partial = a product whose store offers could not be loaded (no offers charge); not_found = Google Shopping returned no products for the search; error = the search could not be scraped. not_found and error rows add no product charge; a not_found search still counts as one loaded search page.
- `statusReason` (string): Plain-English reason for partial/not_found/error rows, or a note on a product.
- `errorCode` (string): Machine code, e.g. SOURCE_BLOCKED, DEADLINE_REACHED.
- `fetchedAt` (string): When the page was scraped (ISO 8601).

## Input settings

- `queries` (array, required): What to search on Google Shopping, one per line, e.g. "wireless earbuds" or "iphone 17 pro 256gb". Up to 200 searches; duplicates are removed.
- `countryCode` (string): Google Shopping country (gl parameter): products, stores and prices for buyers in this country. In 61 countries (for example the US, UK, Canada, Australia, the euro area, Japan, India, Brazil) prices are checked against the local currency and a page answered for another country is asked again; in other countries results are saved as Google shows them. Google Shopping is not available in every country; then the query returns a not_found row. Default: United States.
- `languageCode` (string): Google interface language (hl parameter). It changes labels such as delivery and returns texts; prices stay in the local currency. Default: English.
- `maxItems` (integer): How many products to save for each search, in Google's order. Google Shopping shows one page of about 40–60 products per search and has no further pages, so a search can return fewer.
- `includeOffers` (boolean): Open each product and add the stores that sell it (store, price, availability, delivery, returns, store rating, link). Adds one event per product with at least one store. Slower: about 5 seconds per product on average (product pages open 5 at a time).

## Step by step on Apify

1. Open the Input tab.
2. In Product searches (`queries`), keep the prefilled `wireless earbuds` or add your own phrases, one per line.
3. Keep Country `us` (default) or choose another country.
4. Keep Products per search (`maxItems`) at `10` (prefill), or set up to `60`.
5. Click Start.
6. Open the Output tab and check `title`, `price`, `currency`, `merchant` and `rating`.

## Use cases

| Task | Input | You get | Key fields | Next step |
|---|---|---|---|---|
| Price monitoring | `queries` (product names or models), `countryCode` | product row | `price`, `currency`, `merchant`, `oldPrice` | Schedule + Google Sheets or API |
| Store comparison | `queries`, `includeOffers: true` | product row with `offers` | `offers[].merchant`, `offers[].price`, `offers[].availability` | Export JSON / Excel |
| Category research | `queries` (category words), `maxItems: 60` | product row | `title`, `rating`, `reviewsCount`, `position` | Export CSV |
| Country check | same `queries`, different `countryCode` | product row | `price`, `currency`, `countryCode` | Compare in a spreadsheet |

## Tips

- Turn on offers only when you need store prices. It adds about 5 seconds per product.
- Run the same searches on a schedule to track price changes.
- Raise the timeout for big runs. For 200 searches, set about 1,200 seconds.

## Limits



- A phrase with no products costs one search page: Google was asked and answered.
- `error` rows are free. Products with `partial` status (offers not loaded) are charged as a product, not as offers.
- If you set a maximum charge for the run, the Actor stops before it, keeps the rows and ends with status CAPPED.
- Up to 200 phrases and 60 products per phrase in one run. A test with 200 phrases and 60 products each (about 10,000 rows) took about 14 minutes.
- The default timeout is 300 seconds: enough for about 30 phrases without offers (in tests, 10 US phrases took about 60 seconds and 50 German phrases about 160 seconds), or about 50 products with offers. For bigger runs set a longer timeout (for 200 phrases, 1,200 seconds). At the time limit the run stops with status CAPPED and keeps all rows.
- With offers on, each product needs one more Google page, about 5 seconds per product.

## Sample result

```json
{
  "query": "wireless earbuds",
  "position": 1,
  "title": "JLab Go Air Pop True Wireless Earbuds",
  "price": 17.99,
  "priceText": "$17.99",
  "oldPrice": 27,
  "currency": "USD",
  "condition": null,
  "merchant": "Best Buy",
  "moreMerchants": true,
  "rating": 4.3,
  "reviewsCount": 33000,
  "delivery": "Free delivery",
  "returns": null,
  "productUrl": "https://www.google.com/search?q=JLab+Go+Air+Pop+True+Wireless+Earbuds&udm=28&ibp=oshop&prds=catalogid%3A8372463217625314514%2Cgpcid%3A9146411353573113826%2CheadlineOfferDocid%3A452194635528668653%2CproductDocid%3A10114522055954158630&gl=us&hl=en&uule=w+CAIQICINVW5pdGVkIFN0YXRlcw",
  "offers": null,
  "offersCount": null,
  "ids": {
    "catalogId": "8372463217625314514",
    "gpcId": "9146411353573113826",
    "offerDocId": "452194635528668653",
    "productDocId": "10114522055954158630"
  },
  "countryCode": "us",
  "languageCode": "en",
  "searchUrl": "https://www.google.com/search?q=wireless+earbuds&tbm=shop&hl=en&gl=us&uule=w+CAIQICINVW5pdGVkIFN0YXRlcw",
  "status": "complete",
  "statusReason": null,
  "errorCode": null,
  "fetchedAt": "2026-10-15T05:53:19.024Z"
}
```

## Use cases with this tool

- [Track prices in shops and marketplaces](https://cliqtomedia.com/actors/use-cases/price-monitoring/): Track prices and offers in shops and marketplaces. See changes before your customers do.

## Similar tools

- [Google Autocomplete Scraper](https://cliqtomedia.com/actors/google-autocomplete-scraper/)
- [Website JSON-LD Structured Data Scraper](https://cliqtomedia.com/actors/website-jsonld-structured-data-scraper/)
- [Website Metadata & Open Graph Scraper](https://cliqtomedia.com/actors/website-metadata-open-graph-scraper/)
- [Website Screenshot & PDF Generator: Full Page & Mobile](https://cliqtomedia.com/actors/website-screenshot-pdf/)
- [AliExpress Scraper: Products, Prices & Reviews, No Login](https://cliqtomedia.com/actors/aliexpress-scraper/)
- [Coles, Woolworths & Aldi Price Scraper - No Login](https://cliqtomedia.com/actors/au-supermarket-prices/)
