Google Shopping Scraper - Prices, Offers & EAN Lookup avatar

Google Shopping Scraper - Prices, Offers & EAN Lookup

Pricing

from $2.00 / 1,000 google shopping product delivereds

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

Google Shopping Scraper - Prices, Offers & EAN Lookup

Get Google Shopping prices, stores and offers by keyword, product link or EAN/UPC barcode in any country. Price, old price, store, shipping, rating, reviews, product ID and the retailer's direct link. Every store's offer per product, price filters, price tracking between runs. 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

34

Total users

12

Monthly active users

6 hours 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.

Google Shopping scraper pricing at a glance

EventFree planGold and above
Product delivered$2.50 per 1,000 ($5.00 from 1 Nov 2026)$2.00 per 1,000 ($4.00 from 1 Nov 2026)
Store offers loaded for a product (and each extra page of 10 stores)$0.02$0.02
Actor start (from 1 Nov 2026)$0.01 per run$0.01 per run

Bronze pays $2.30 and Silver $2.10 per 1,000 products (from 1 Nov 2026: $4.60 and $4.20). No monthly fee; until 31 Oct 2026 there is 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 ($5.01 from 1 Nov 2026); 100 products with store offers = $2.25; one product with all 207 stores (21 pages) = $0.42.

What the Google Shopping scraper 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.

Google Shopping scraper 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" }

EAN, UPC and GTIN barcode lookup

Give a list of barcodes in gtins (EAN-8, EAN-13, UPC-A or GTIN-14) and get, per code, the Google Shopping product, its price and, with includeOffers and maxStores, every store selling it with price, shipping and a direct store link. Each code is checked against Google's web search, so a listing that cites the wrong code is not returned as the product (GTIN_AMBIGUOUS lists the candidates instead, free). Codes Google does not know come back as GTIN_NOT_FOUND, also free.

Four codes are looked up at a time: 80 barcodes with up to 15 stores each take about 35 minutes in the Netherlands. Typical uses: price comparison across retailers for a product list, MAP and reseller monitoring, catalog enrichment from a supplier's EAN list.

Switching from another Google Shopping scraper? 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)

Google Shopping data: 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" }
]
}

Google Shopping scraper 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.

Google Shopping scraper 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.

Video guides from Apify: how to schedule an Actor and how to connect it to other apps.

Requests an agent can pass straight through:

  • "Find the cheapest store for EAN 0885909950805 in Germany" -> {"gtins": ["0885909950805"], "country": "de", "includeOffers": true, "maxStores": 30}
  • "Compare prices for wireless earbuds under $50 in the US" -> {"queries": ["wireless earbuds"], "country": "us", "maxPrice": 50, "sort": "price_low"}
  • "Tell me which of these products got cheaper since yesterday" -> same input as yesterday plus {"compareWithPreviousRun": true, "onlyChanged": true}

Google Shopping scraper FAQ

Is there an official Google Shopping API? Not for search results. Google's Merchant API (formerly Content API for Shopping) manages your own products in Merchant Center; it does not return what Google Shopping ranks for a keyword or other stores' prices. This Actor reads the public Shopping results, so you get ranked products, prices and store offers for any term or barcode.

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.

Google Shopping scraper 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-19: barcode lookup runs 4 codes at a time (about 4x faster, same results and cost per code).
  • 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.