Home › Guides › Google Shopping scraper
Google Shopping scraper: the stores Google lists for a product, their price history, and whether today's price is really low
A Google Shopping result tells you a price and a store. The product page behind it tells you much more. The Google Shopping Scraper returns the products Google Shopping shows for any search, in 26 countries (15 of them tested on the Apify platform) — price, store, rating, review count, discount badges — and, for each product, the store offers Google lists (typically 3–5) with store links, price, stock, delivery cost and returns, each store's daily price history for up to about 12 months, and Google's typical price range. One row per product, in one run. No Google account, no API key, no browser.
Who it is for
- Competitor price monitoring — which stores sell a product, at what price and delivery cost, and how each store's price moved over the last year.
- Deal verification — is today's price really low? Compare
lowestPricewithhistoryLowestPriceand Google's typical range. - Category research — products, prices, ratings and review counts for a category, sorted or price-banded.
- Affiliate and deal sites — current offers with store links and discount badges.
- Scheduled monitoring — re-check a list of Google product IDs daily or weekly.
What you get
| Group | Fields |
|---|---|
| Product (search result) | title, productId (Google's product ID, to re-check the product later), price, oldPrice, merchant, condition, delivery and returns text, rating, reviewsCount, badge (“25% OFF”, “LOW PRICE”), imageUrl |
| Store offers | offersCount and offers[] per store: merchant and domain, the seller's link (Google's tracking parameters removed), price, old price, delivery cost, totalPrice, returns, stock, condition, promotionText, merchant rating, Google's label (“Best price”) |
| Deal signals | lowestPrice with its store and link, highestPrice, typicalPriceLow / typicalPriceHigh, priceVsTypical (below / within / above), historyLowestPrice with its date and store, historyHighestPrice, isAtHistoryLow, pctAboveHistoryLow |
| Price history | priceHistory[] per store: first and last date, days, min, max and last price, and changes[] (the first day, each day the price changed, and the last day) or points[] (every day); priceHistoryStatus and priceHistoryNote (why there is none, in plain words) |
| Product details | specs (Google's specification table), description, variants |
Deal signals compare like with like. Offers Google labels used, refurbished or pre-owned are left out of lowestPrice and of the history summary, so a refurbished offer is not compared with the new-product price history. Promotions (“Save $15.00”) go to promotionText and do not leave an offer out.
A trimmed row from a platform run on 2026-09-30 (sony wh-1000xm5, United States). Best Buy's price sat within Google's typical range, but 50.5% above the lowest price in the stores' history:
{
"title": "Sony WH-1000XM5 Noise Canceling Wireless Headphones",
"productId": "11726664398501807381",
"offersCount": 3,
"lowestPrice": 298,
"lowestPriceMerchant": "Best Buy",
"typicalPriceText": "Typically $199 to $300",
"priceVsTypical": "within",
"historyLowestPrice": 198,
"historyLowestPriceDate": "2026-09-02",
"isAtHistoryLow": false,
"pctAboveHistoryLow": 50.5
}
How it reaches more than one results page
A Google Shopping results page shows about 40–50 different products, and Google has no second results page on the addresses Apify's Google SERP proxy serves. For more products the scraper also reads the sort orders and price bands Google prints on the first page — the same search sorted by price or rating, or limited to “Under $35”, “$35–$70”… — and removes duplicates. On the platform, wireless earbuds (US) gave 199 different products from 8 Google pages. It does not promise every product for a search.
For each product that has a Google product page, the scraper opens that page — one extra Google request per product — and lists the stores Google shows in “Buying options” (3–5 on 181 of 185 product pages in platform runs, median 3), with each store's daily price history where Google shows it. Pages that Google answers as another country (6 of 351 requests in platform runs) are retried and never delivered with the wrong country's prices.
Price history by country
Google does not show price history everywhere. Measured in September 2026 on product pages where history was requested:
| Price history | Countries |
|---|---|
| Seen | United States (93 of 94 product pages), Germany (40 of 41), France, Spain, Canada, Australia, the Netherlands, India, Japan, Poland, Italy, Sweden |
| Not shown by Google | United Kingdom, Turkey, Brazil — priceHistoryStatus is not-available-in-country |
| Not tested yet | Ireland, New Zealand, Austria, Switzerland, Belgium, Portugal, Czechia, Norway, Denmark, Finland, Mexico |
Outside the US and Germany the samples were small, so they show whether Google offers price history in a country, not an exact rate.
Example inputs
A price check for one product in the United States:
{
"queries": ["sony wh-1000xm5"],
"country": "us",
"maxProductsPerQuery": 10
}
A daily re-check of known products (put it on a schedule):
{
"productIds": ["11726664398501807381"],
"country": "us",
"priceHistory": "none"
}
Set includeDetails to false for a faster category scan without store offers, or sortBy, minPrice and maxPrice to use Google's own sort and a price range.
Measured data quality
From 57 Apify platform runs of builds 0.1.1–0.1.6:
- Store offers (13 of those runs: 226 offers on 66 product pages in the US, Germany, the UK, Poland and Spain): store, price, stock and offer title on 100%; store link on 98.7%; delivery on 98%; returns on 70%.
- Price history matches the offers: 204 of 204 store histories belong to a listed store and end at that store's current offer price.
- Search results (2,777 rows in 15 countries): title, price and store on 100%; rating and review count on 84%; Google product ID on 88% (the rest are single-store listings); old price 31%; badge 36%.
- Uniqueness: no product appeared twice in a run, including 1,200 of 1,200 in the largest run.
- Numbers are read in the country's format (“235,00 €”, “$1,299.00”), and abbreviated review counts are expanded (“17K” becomes 17000). A value Google does not show is
null, never 0.
Limits worth knowing
- Only the stores Google lists on the product page (typically 3–5). Google loads more with a script; the scraper does not.
- Barcodes are not a reliable search. An EAN, GTIN or UPC typed into Google Shopping returned mostly unrelated products in tests.
- Sponsored and organic results are not told apart — the pages read carry no “Sponsored” label.
- No price history in the UK, Turkey and Brazil, as shown above.
- Country check by currency. Wrong-country pages are caught by their currency and, when Google states it, their region; a neighbouring country with the same currency and language (for example Austria for Germany) cannot be told apart this way.
- Rating and review count come from the search result, so rows opened by product ID have none.
- Product IDs reopened the product hours later in tests; how long an ID stays valid over weeks has not been measured yet.
- Unmatched searches still return products. For a search Google cannot match, Google Shopping shows other products; check that the titles fit your search.
- Run time follows Google's response time through the proxy: the same 3-product input took 16–90 seconds on the platform.
- Data is what Google Shopping publicly shows at run time, and prices change often. Google, Google Shopping and the store names are trademarks of their owners; this Actor is not affiliated with them.
How it is billed
Pay per event: product for every product row delivered, plus product-details when the row carries at least one store offer (the product page was read). With includeDetails: false each row is only a product. Status rows — no results, a product ID that cannot be opened, a wrong-country page — are free. Apify may also charge its Actor start event; the Pricing tab on Apify lists every event and its current price.
Selling on Amazon too? The Amazon Product Scraper guide covers the Buy Box, the offer list and Best Sellers Rank. For store-level signals such as Shopify detection and catalogue depth, see e-commerce & app intelligence.
Frequently asked questions
Why only 3–5 stores per product?
Those are the stores Google itself lists on the product page. Google loads more (“More stores”) with a script; the scraper does not load them.
Can I search Google Shopping by EAN, GTIN or UPC?
Not reliably. In tests, a barcode typed into Google Shopping returned mostly unrelated products. Search by product name, or use the productId of a product you found.
How do I monitor Google Shopping prices every day?
Run a search once, keep the productIds you care about, and schedule a run with productIds. Each row has the current offers and, where Google shows it (not in the UK, Turkey or Brazil), each store's price history, so you do not need to wait months to see a trend.
Why is the price history empty?
Google does not show price history for every product, and not in every country: none in the UK, Turkey and Brazil in tests. The priceHistoryNote field says which case it is.
Is lowestPrice the cheapest offer?
It is the cheapest offer without a used, refurbished or pre-owned label among the stores Google lists; a promotion does not leave an offer out. The full list, with conditions and promotions, is in offers.
Start small: run one product search with 10 products, keep the product IDs you care about, then schedule the product-ID re-check. More e-commerce scrapers: e-commerce data on foXLabs.
Open Google Shopping Scraper on Apify →