Google Shopping Scraper - Prices, Stores & Offers avatar

Google Shopping Scraper - Prices, Stores & Offers

Pricing

from $2.00 / 1,000 google shopping product delivereds

Go to Apify Store
Google Shopping Scraper - Prices, Stores & Offers

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

Scrapewise Data

Maintained by Community

Actor stats

0

Bookmarked

24

Total users

11

Monthly active users

3 days ago

Last modified

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

EventFree planGold 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 needInputWhat comes back
The retailer's own link, not a Google link"includeStoreLink": truestoreUrl (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 termsOne 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": 300The full "More stores" list, same fields per store
Price history without a database"compareWithPreviousRun": truepreviousPrice, priceChange, priceChangePct, isNewLowest on every row
Runs that survive Google hiccupsnothing3 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 fieldRead as
query, queries, searchQuery, searchQueries, q, keyword, keywordsSearch terms, each searched separately
num (+ max_pages)Products per term = num x max_pages
max_pages, maxPagesGoogle pages per term
page, startPageFirst results page to read
limit, maxResults, maxTotalProductsMaximum products in the run
countryCode, gl / languageCode, hlCountry and language
sortBy: BEST_MATCH, LOWEST_PRICE, HIGHEST_PRICE, TOP_RATEDrelevance, price_low, price_high, rating
productCondition: ANY, NEW, USED, REFURBISHEDitemCondition
stores (comma separated), merchantsstoreFilter
min_price, max_price, freeShipping, onSale, freeReturnsSame filters
eans, upcs, barcodesgtins
more_stores: truemaxStores: 15
date_range, sponsoredAccepted 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

FieldDescription
position, sortedPositionRank in Google's results, and after your sort
title, price, priceText, currencyProduct and current price (number, text, ISO code)
oldPrice, discountPercent, badgeCrossed-out price, computed discount, Google's badge
store, moreStores, shipping, freeShipping, returns, freeReturnsWhat the card shows
condition, rating, reviewCount, imageUrlnew, used or refurbished; Google rating 0 to 5
productId, productUrlGoogle's product ID (use it to track over time) and its Shopping page
offers, offersCount, offersAvailable, lowestOfferPriceStore offers: store, price, availability, shipping, returns, returnDays, storeRating, url
storeUrl, storeUrlStore, storeUrlPriceWith includeStoreLink: the retailer's own product link
gtin, gtinMatches, gtinAlternativesOn barcode rows: the code, listings citing it, other titles
previousPrice, priceChange, priceChangePct, isNewProduct, isNewLowest, lowestSeenPrice, firstSeenAtWith compareWithPreviousRun
images, variants, relatedProducts, discussions, attributes, typicalPriceLow, typicalPriceHighWith includeDetails
searchQuery, country, language, searchUrlWhat 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 ApifyClient
client = 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; maxStores gets the rest, in pages of 10.
  • sort orders 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; rating and reviewCount come 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: maxStores returns the full "More stores" list; new attributes field.
  • 2026-10-01: price tracking with compareWithPreviousRun and onlyChanged; freeReturns, returnDays and the freeReturnsOnly filter.