Google Shopping Scraper - Prices, Stores & Offers
Pricing
from $2.00 / 1,000 google shopping product delivereds
Google Shopping Scraper - Prices, Stores & Offers
Scrape Google Shopping in any country: title, price, old price, discount, currency, store, shipping, condition, rating, reviews, image, product ID and link. Store-by-store offers with direct links, up to every store Google has for the product. Price, condition and store filters. Pay per product.
Pricing
from $2.00 / 1,000 google shopping product delivereds
Rating
0.0
(0)
Developer
Scrapewise Data
Maintained by CommunityActor stats
0
Bookmarked
24
Total users
11
Monthly active users
3 days ago
Last modified
Categories
Share
Returns the products Google Shopping ranks for any keyword, in any country: title, current price, old price, discount, currency, store, shipping, condition, rating, review count, image, Google product ID and link, plus optional store-by-store offers with direct store links, from the 3 to 5 stores Google shows first up to every store it has (maxStores). It also looks up products by barcode (EAN, GTIN, UPC), and with compareWithPreviousRun every row carries the previous price, the change and whether it is the lowest price seen, so a daily schedule becomes a price monitor.
For e-commerce teams and price monitoring tools, brands enforcing MAP, and agencies and analysts that need product price data. AI agents can call it through the Apify MCP server.
At a glance
| Event | Free plan | Gold and above |
|---|---|---|
| Product delivered | $2.50 per 1,000 | $2.00 per 1,000 |
| Store offers loaded for a product (and each extra page of 10 stores) | $0.02 | $0.02 |
Bronze pays $2.30 and Silver $2.10 per 1,000 products. No monthly fee, no start fee. A product found in several Google shelves is charged once. Not charged: searches with no products, products outside your filters, duplicates, blocked requests, barcodes that could not be matched, and unchanged products with onlyChanged. A barcode with offers is one store offers event; a barcode found without offers is one product event. Free plan: up to 100 products per run.
Examples on the Free plan: 1,000 products from searches = $2.50; 100 products with store offers = $2.25; one product with all 207 stores (21 pages) = $0.42.
What it fixes
| You need | Input | What comes back |
|---|---|---|
| The retailer's own link, not a Google link | "includeStoreLink": true | storeUrl (for example https://www.bestbuy.com/product/...), and the direct url on every store offer |
| Exactly one result per search term | "maxItemsPerQuery": 1, maxItems = number of terms | One row per term, the product Google ranks first |
| Barcodes in, products and offers out | "gtins": ["0885909950805"] | One row per code, checked against Google's web search so a store's wrong code is not returned as the product |
| Every store, not just the first five | "maxStores": 300 | The full "More stores" list, same fields per store |
| Price history without a database | "compareWithPreviousRun": true | previousPrice, priceChange, priceChangePct, isNewLowest on every row |
| Runs that survive Google hiccups | nothing | 3 retries, then 2 through a fresh proxy exit; a search that still fails is a free BLOCKED row and the run goes on |
The Actor runs with Apify's limited permissions: it writes only to its own run storages and, with compareWithPreviousRun, to the one price-history store it creates. No browser: a 30-product run takes about 10 seconds.
Not available: sponsored (paid) Shopping ads. Google shows no ads to automated requests (checked on 8 Oct 2026 on 9 result pages in the US and UK), so every row is an organic listing in Google's order.
Input examples
The input form describes each field. Minimal input:
{ "queries": ["wireless earbuds"], "country": "us", "maxItems": 30 }
Filters and sort, two terms:
{"queries": ["wireless earbuds", "espresso machine"],"country": "us","maxItems": 100,"sort": "price_low","minPrice": 20,"maxPrice": 150,"itemCondition": "new","storeFilter": ["walmart", "best buy"]}
A daily price or MAP monitor that only reports what moved (save it as a Task with a daily Schedule):
{"queries": ["Sony WH-1000XM5", "Bose QuietComfort Ultra"],"country": "us","maxItems": 100,"compareWithPreviousRun": true,"onlyChanged": true}
Day 1 saves the prices and delivers every product as new. From day 2, only products that appeared or changed price are delivered and charged; unchanged products are checked for free. Products are matched by Google's productId, and the history keeps a product for 90 days after it stops appearing.
Barcode lookup:
{ "gtins": ["7891000100103", "7894900011517"], "country": "br", "language": "pt-BR" }
Switching from another Google Shopping actor? Your existing input works
| Your field | Read as |
|---|---|
query, queries, searchQuery, searchQueries, q, keyword, keywords | Search terms, each searched separately |
num (+ max_pages) | Products per term = num x max_pages |
max_pages, maxPages | Google pages per term |
page, startPage | First results page to read |
limit, maxResults, maxTotalProducts | Maximum products in the run |
countryCode, gl / languageCode, hl | Country and language |
sortBy: BEST_MATCH, LOWEST_PRICE, HIGHEST_PRICE, TOP_RATED | relevance, price_low, price_high, rating |
productCondition: ANY, NEW, USED, REFURBISHED | itemCondition |
stores (comma separated), merchants | storeFilter |
min_price, max_price, freeShipping, onSale, freeReturns | Same filters |
eans, upcs, barcodes | gtins |
more_stores: true | maxStores: 15 |
date_range, sponsored | Accepted and ignored with a log line (Shopping listings have no date; Google shows no ads) |
Output example
A real row, "wireless earbuds", United States, 15 Sep 2026 (long Google identifiers shortened):
{"position": 4,"title": "Anker Soundcore P31i","price": 34.99,"priceText": "$34.99","oldPrice": 50,"discountPercent": 30,"badge": "30% OFF","currency": "USD","store": "soundcore US","moreStores": true,"shipping": "Free delivery","freeShipping": true,"condition": "new","rating": 4.8,"reviewCount": 1500,"productId": "8351549705576353052","productUrl": "https://www.google.com/search?ibp=oshop&q=Anker+Soundcore+P31i&prds=catalogid%3A8351549705576353052...","searchQuery": "wireless earbuds","country": "us","scrapedAt": "2026-09-15T18:21:44.329053+00:00","errorCode": null}
With includeOffers ("espresso machine", shortened):
{"title": "De'Longhi Classic Espresso Machine","price": 224.99,"store": "Best Buy","offersCount": 5,"offersAvailable": 58,"offers": [{ "store": "Best Buy", "price": 224.99, "availability": "In stock online", "shipping": "Free delivery by Thu", "returns": "15-day returns", "storeRating": 4.6, "url": "https://www.bestbuy.com/product/delonghi-classic-espresso-machine-stainless-steel/J7G8Z85C38/sku/6615146" },{ "store": "Target", "price": 229.95, "returns": "90-day returns", "url": "https://www.target.com/p/delonghi-linea-classic-espresso-machine/-/A-94266951" }]}
Main output fields
| Field | Description |
|---|---|
position, sortedPosition | Rank in Google's results, and after your sort |
title, price, priceText, currency | Product and current price (number, text, ISO code) |
oldPrice, discountPercent, badge | Crossed-out price, computed discount, Google's badge |
store, moreStores, shipping, freeShipping, returns, freeReturns | What the card shows |
condition, rating, reviewCount, imageUrl | new, used or refurbished; Google rating 0 to 5 |
productId, productUrl | Google's product ID (use it to track over time) and its Shopping page |
offers, offersCount, offersAvailable, lowestOfferPrice | Store offers: store, price, availability, shipping, returns, returnDays, storeRating, url |
storeUrl, storeUrlStore, storeUrlPrice | With includeStoreLink: the retailer's own product link |
gtin, gtinMatches, gtinAlternatives | On barcode rows: the code, listings citing it, other titles |
previousPrice, priceChange, priceChangePct, isNewProduct, isNewLowest, lowestSeenPrice, firstSeenAt | With compareWithPreviousRun |
images, variants, relatedProducts, discussions, attributes, typicalPriceLow, typicalPriceHigh | With includeDetails |
searchQuery, country, language, searchUrl | What was searched and where |
The Console has three views: Products and prices, Store offers and Price changes.
Errors (free rows)
errorCode is filled only on rows that are not charged: NO_RESULTS, NO_MATCHING_PRODUCTS, NO_PRICE_CHANGES (nothing moved with onlyChanged), NOT_REACHED (run limit before this term), BLOCKED, PRODUCT_NOT_FOUND, INVALID_PRODUCT, INVALID_GTIN, GTIN_NOT_FOUND, GTIN_AMBIGUOUS (listings disagree with the web; candidates included instead of a guess).
Use it from code and AI agents
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("scrapewise/google-shopping").call(run_input={"queries": ["running shoes"], "country": "gb", "sort": "price_low"})for product in client.dataset(run["defaultDatasetId"]).iterate_items():print(product["title"], product["price"], product["currency"], product["store"])
The same works from the HTTP API (run-sync-get-dataset-items), n8n, Make, Zapier and Google Sheets. For AI agents: https://mcp.apify.com/?actors=scrapewise/google-shopping.
FAQ
Which countries? Any country with Google Shopping, with local stores and currency; tested in the US, UK, Germany, France, India, Japan and Brazil.
How many products per term? Usually 150 to 250 unique products. For more, use several related terms.
Why fewer products than maxItems? Google ran out of products, or your filters removed many; with narrow filters the Actor stops paging early. Filtered products are free.
Why can results differ from my browser? Your browser adds personalization. The Actor opens the Shopping tab with your country and language through a proxy exit in that country, without cookies, and retries through another exit if the currency comes back wrong.
Does it return GTIN or MPN for search results? No: Google does not serve them without JavaScript. gtin is filled only on barcode lookup rows.
Limitations
- Store offers default to the 3 to 5 Google shows first;
maxStoresgets the rest, in pages of 10. sortorders the products collected for each term; Google's own sort buttons are not available over HTTP.- Price and condition filters are also added to the search text in English, and every product is checked against them before it is saved.
- Shipping, rating and return policy appear only when Google shows them on the card.
- Review texts are not collected;
ratingandreviewCountcome from the card. - Prices are what Google shows at the moment of the run.
Something broke or a field is missing? Open an issue on the Issues tab.
Changelog
- 2026-10-08:
includeStoreLink; store offers carry the retailer URL instead of Google's redirect; input of other Google Shopping actors understood; 2 extra retries through a fresh proxy exit. - 2026-10-05:
maxStoresreturns the full "More stores" list; newattributesfield. - 2026-10-01: price tracking with
compareWithPreviousRunandonlyChanged;freeReturns,returnDaysand thefreeReturnsOnlyfilter.