Google Shopping Scraper avatar

Google Shopping Scraper

Pricing

from $2.20 / 1,000 results

Go to Apify Store
Google Shopping Scraper

Google Shopping Scraper

Collect Google Shopping offers for any search, country and language: product title, price and currency, previous price, store, rating and review count, delivery and returns notes, product link and image. Paging and item caps included; you only pay for offers delivered.

Pricing

from $2.20 / 1,000 results

Rating

0.0

(0)

Developer

Philip Kirkbride

Philip Kirkbride

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 hours ago

Last modified

Categories

Features

Limited permissions

Share

Compare prices across stores in one table. Type the products you care about, pick a country and language, and every Google Shopping offer becomes one clean row: product title, current price as a number and as shown, currency, the "Was" or "Usually" price, the deal badge, the store, whether other stores sell it too, star rating and review count, delivery and returns notes, a link to the product's Google Shopping page and the product image.

Built for e-commerce teams, pricing analysts, brands checking their resellers and deal sites that need Google Shopping product and price data by country.

What sets it apart

  • $2.20 per 1,000 offers, plus $0.005 per run. Every field below is included; there are no add-on charges.
  • Prices you can sort and prices you can show. price is a number, priceText is exactly what the shopper saw, and the "Was" or "Usually" price comes as both too, next to the deal badge.
  • The shopping country you choose. Pick the market and language; prices, stores and currency follow it, and currency always names the currency of each price.
  • Caps that hold. A cap per search and a cap for the whole run, so a long list of searches never runs away.
  • Only delivered offers are charged. Pages that cannot be read are listed in the run summary and are not charged.

Use cases

  • Price monitoring: track what stores charge for your products, or your competitors', on a schedule.
  • Competitor research: see which stores list a product, at what price, with what delivery and returns terms.
  • Deal discovery: find offers below their usual price, with the discount badge Google shows.
  • Assortment and market research: what sells under a search term in a given country, with ratings and review counts.
  • Catalog enrichment: product titles, images and review counts for a list of products.

Quick start

Open the Actor in Console and press Start: the prefilled form searches "wireless earbuds" and "espresso machine" in the US, up to 50 offers each (about 100 offers, roughly $0.225). queries is the only required input.

{
"queries": ["wireless earbuds", "espresso machine"],
"countryCode": "us",
"languageCode": "en",
"maxItemsPerQuery": 50,
"maxItems": 1000
}

Each search is one Google Shopping search. Google lists about 40 to 60 offers per results page; set maxItemsPerQuery higher to read further pages. Paging stops by itself when a search runs out of new offers.

Input

InputTypeDefaultMeaning
queriesarrayrequiredWhat to search for, one search per line, exactly as you would type it (espresso machine, nike air max 90). A Google search link (google.com/search?q=...) also works. Repeated searches are read once.
countryCodestringusTwo-letter code of the shopping market (us, gb, de, fr, ca, au, in, ...). Prices, stores and currency follow that country.
languageCodestringenLanguage of the result text, such as delivery and returns notes (en, de, fr, es, ...).
maxItemsPerQueryinteger100Offers to collect per search, 1 to 1,000.
maxItemsinteger1000Total cap on offers (dataset rows) across every search, up to 20,000.
maxConcurrencyinteger3Searches that run side by side, 1 to 5.

Example queries

  • {"queries": ["4k monitor", "mechanical keyboard"], "maxItemsPerQuery": 100}
  • {"queries": ["kaffeevollautomat"], "countryCode": "de", "languageCode": "de"}
  • {"queries": ["electric kettle", "air fryer"], "countryCode": "gb"}
  • {"queries": ["https://www.google.com/search?q=running+shoes"]}

What it returns

The dataset contains one row per offer:

FieldMeaning
position1-based rank of the offer within its search, across pages.
titleProduct title as listed.
priceCurrent price as a number. For a "from" price shown as $640+, the lowest price.
priceTextThe price exactly as shown, for example $249.99, 419,00 € or $640+.
currencyISO currency code, such as USD, EUR or GBP.
originalPriceThe previous or typical price as a number, when the offer shows one.
originalPriceTextThat price as shown, for example Was $599 or Usually $299.
hasMorePricesGoogle notes that more prices are available for the product.
conditionCondition label when shown, for example Used or Refurbished.
badgeDeal badge, for example 8% OFF or Low price.
merchantThe store selling the offer. Empty for a "from" price across several stores.
moreStoresOther stores also sell this product.
ratingAverage product rating out of 5.
reviewsCountNumber of reviews (3.6K becomes 3600).
deliveryDelivery note, for example Free delivery by Wed.
returnsReturns note, for example 30-day returns.
productLinkThe product's Google Shopping page, with prices from every store.
imageUrlProduct image.
productId, offerIdGoogle's ids for the product and for this offer.
searchQueryThe search the offer came from: term, page, countryCode, languageCode.
scrapedAtCollection time (UTC, ISO 8601).

Fields that an offer does not show are null. The run summary (OUTPUT) reports offers (rows delivered), pages read, searches with no results in emptyQueries, and any page that could not be read in pageErrors, each with a short code and message (for example LAYOUT_CHANGED or NETWORK_ERROR).

Output example

{
"position": 4,
"title": "Gaggia Classic E24 Iconic espresso machine for your home",
"price": 549.0,
"priceText": "$549.00",
"currency": "USD",
"originalPrice": 599.0,
"originalPriceText": "Was $599",
"hasMorePrices": false,
"condition": null,
"badge": "8% OFF",
"merchant": "Whole Latte Love",
"moreStores": true,
"rating": 2.9,
"reviewsCount": 831,
"delivery": "Free delivery by Sat",
"returns": "30-day returns",
"productLink": "https://www.google.com/search?ibp=oshop&q=Gaggia+Classic+E24+Iconic+espresso+machine+for+your+home&prds=catalogid%3A10095501518220150894%2Cgpcid%3A14862320879344990550%2CheadlineOfferDocid%3A3644310309703997006%2CimageDocid%3A7557753840327796041%2CproductDocid%3A17420663260271296052%2Cpvt%3Ahg&hl=en&gl=us&udm=28",
"imageUrl": "https://encrypted-tbn1.gstatic.com/shopping?q=tbn:ANd9GcSPNnYW3QhnZICjzkZeAi5mV3wH-G_V28yf2MWTNAUfQr2Q7oVyDUpMSFCKLFAWUKzqyT9INcOmFQ",
"productId": "10095501518220150894",
"offerId": "3644310309703997006",
"searchQuery": {
"term": "espresso machine",
"page": 1,
"countryCode": "us",
"languageCode": "en"
},
"scrapedAt": "2026-10-20T00:31:12Z"
}

Price

$0.0022 per offer delivered (one dataset row), plus $0.005 per run start. The run-start event is charged per GB of memory; the default 512 MB run is one start event ($0.005). The start is charged even if the run saves no offers. Pages that could not be read are not charged. Platform usage is included in these prices.

Worked costs: the 100-offer prefill run is about $0.225; 1,000 offers about $2.205; the 20,000-offer run maximum about $44.005.

Scheduling and monitoring

Schedule the same searches daily or weekly to follow prices, discounts and which stores carry a product. Each run is a full snapshot; match offers across runs by offerId (or productId for the product). There is no built-in "changes only" mode.

FAQ

How fresh is the data? Every run reads Google Shopping at run time; nothing is cached between runs. scrapedAt records when each row was collected.

How many offers does a search return? Google lists about 40 to 60 offers per results page. Most searches run out of new offers after a few pages (roughly 100 to 250 offers).

Does it show every store's price for a product? Each row is one offer as listed in the results. moreStores says when other stores sell the product, and productLink opens Google's page with every store's price.

Which export formats are available? JSON, CSV, Excel, XML or RSS from the dataset, or read the rows with the Apify API.

Good to know

  • Google shows each shopper a slightly different selection, so offers and their order can differ from what you see when signed in to your own Google account. Results here are what a signed-out shopper in the chosen country sees.
  • Prices come from the chosen country's shop, in its currency. A few offers from stores abroad can appear (for example US$120.00 in Canada), and currency always says which currency a price is in.
  • The same product can be listed in several places on a results page; each offer is delivered once per search.
  • The store's own product page is one click away from productLink, which lists every store's price for the product.
  • Most searches run out of new offers after a few pages (roughly 100 to 250 offers), so very high maxItemsPerQuery values may return fewer offers.
  • Searches that return no offers are listed in OUTPUT.emptyQueries. If a run's searches keep returning almost nothing, the run stops early and says so, rather than reading empty pages.
  • If Google is temporarily unavailable, the run reports any page it could not finish in OUTPUT.pageErrors; offers already collected are kept. If no page at all can be read, the run fails with a clear message.