Google Shopping Scraper: prices per merchant, bulk queries avatar

Google Shopping Scraper: prices per merchant, bulk queries

Pricing

from $2.76 / 1,000 product listeds

Go to Apify Store
Google Shopping Scraper: prices per merchant, bulk queries

Google Shopping Scraper: prices per merchant, bulk queries

Product listings from Google Shopping per search query, so you can compare prices across merchants: title, current price, previous price, discount, merchant, delivery, returns, rating and review count, with the product id and URL. Up to 200 queries per run. Only delivered products are charged.

Pricing

from $2.76 / 1,000 product listeds

Rating

0.0

(0)

Developer

Steadydata Team

Steadydata Team

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

2

Monthly active users

2 days ago

Last modified

Share

Google Shopping Scraper (reliable, bulk)

Product listings from Google Shopping for up to 200 search queries per run: title, current price, previous price, discount, merchant, delivery, returns, rating and review count, with the product id and a link to the Google Shopping product page. You only pay for products that are actually delivered.

Why this scraper

  • No browser, no bot wall. Google's shopping results are fetched as server-rendered HTML through a country-matched search proxy. Browser-based scrapers get sent to a CAPTCHA; this route does not, and it is a fraction of the cost.
  • Parsed on the accessibility label, not on CSS classes. Google renames its classes constantly, which is why class-based scrapers break every few weeks. Every product card carries a screen-reader label with the full description, price, merchant and rating in one sentence. That is what this actor reads, and it is far more stable.
  • Only delivered products are charged. A query without results, or a temporary block, comes back as a clear error record at no cost.
  • A hard cost ceiling you control. maxProductsPerQuery is the cap: one delivered product is one charged event.
  • Region aware. country sets both the proxy exit country and the Google region, so Dutch prices come from a Dutch exit node instead of a US one.

Who this is for

Price monitoring across a product list, competitor and assortment research, and anyone who needs "what does Google Shopping show for these 200 searches" as a table instead of 200 browser tabs.

Who this is not for

If you need the stock level or the exact checkout price at one specific shop, go to that shop's own page. This actor reports what Google Shopping shows, which is a snapshot of the offers Google knows about at that moment.

It returns public product and merchant data only. No buyer data, no reviewer names, no personal data.

Input fields

FieldTypeRequired or defaultWhat it does
querieslist of textrequiredProduct searches, e.g. 'wireless earbuds' or 'dyson v15'. Up to 200 per run.
maxProductsPerQuerynumber60Stop after this many products per query. This is your cost ceiling: one delivered product is one charged event.
countrytextUSISO country code, e.g. US, NL, DE. Sets both the proxy exit country and the Google region. Prices and merchants are region bound, so match this to the market you want.
languagetextenInterface language, e.g. en, nl, de.

Input example

{
"queries": [
"wireless earbuds",
"dyson v15 detect",
"espresso machine"
],
"maxProductsPerQuery": 60,
"country": "US",
"language": "en"
}

Output example

FieldTypeWhat it holdsExample
querytextThe input this row was found with, so rows from several inputs can be told apart.wireless earbuds
countrytextThe country the request was made from; Google answers differently per country.US
positionnumberThe place in Google's own order, counting from 1.1
productIdtextGoogle's id for the product listing, the key to join rows on.14736686963622067380
productUrltextThe product page Google links to.https://www.google.com/shopping/product/14736686963622067380
titletextThe title as Google shows it.JLab Go Air Pop True Wireless Earbuds
pricenumberThe price as a number, so you can sort and compare on it.19.88
priceTexttextThe price exactly as the page prints it, symbol and separators included.$19.88
currencytextThe currency that price is in.USD
previousPricenumberThe price this was struck through from; empty when nothing is struck through.25
discountPercentnumberHow far the price is below that previous price, in percent.20
merchanttextThe shop offering the product.Walmart
deliverytextWhat the listing says about delivery, for example free delivery or a price.delivery $7
returnstextWhat the listing says about returns, for example a free return window.90-day returns
ratingnumberThe average star rating of the product.4.4
reviewCountnumberHow many reviews that average rests on.6900
{
"query": "wireless earbuds",
"country": "US",
"position": 1,
"productId": "7310953537322941042",
"productUrl": "https://www.google.com/shopping/product/7310953537322941042",
"title": "JLab GO Air Pop True Wireless Earbuds",
"price": 19.99,
"priceText": "$19.99",
"currency": "USD",
"previousPrice": 25.0,
"discountPercent": 20,
"merchant": "Target",
"delivery": "Free delivery on $35+",
"returns": "30-day returns",
"rating": 4.3,
"reviewCount": 31000,
"status": "ok"
}

A query that cannot be delivered produces an error record instead, and is not charged:

{
"input": "asdkjhasdkjh",
"status": "error",
"errorCode": "NO_RESULTS",
"error": "No products on the results page for 'asdkjhasdkjh'"
}

Error codes: INVALID_QUERY, NO_RESULTS, BLOCKED. INPUT_TRUNCATED appears once when your input is longer than this actor accepts.

Pricing

Pay per event: one product-listed event per delivered product. No charge for queries that fail or return nothing, no separate platform-usage surcharge.

Free Apify plan: this actor delivers up to 25 rows per run for accounts on the Apify free plan, and then stops with a message. That limit is set by us, not by Apify. It exists so the actor keeps paying for itself for the people who do pay. Any paid Apify plan runs it at full size, billed per delivered row, with failed rows never charged.

Reviews: if this actor saves you time, a short review on this page is the one thing that helps most. Ratings are what other buyers look at first, and we have no other way to ask.

FAQ

Why do some fields come back empty? Because Google did not show them for that product. A listing without a discount has no previous price, and a listing without reviews has no rating. Those fields are left empty rather than filled with a guess.

Do prices include tax and shipping? They are the prices Google displays, which follow the merchant's own convention per country. Delivery information is returned separately in the delivery field when Google shows it.

Why does the same product appear more than once? Because several merchants offer it. Each row is one offer, with its own merchant and price, which is exactly what you want for price comparison.

Can I track prices over time? Yes, and that is the common pattern: run the same query list on a schedule and keep the rows with a timestamp. Prices move, so a run is a snapshot.

Is personal data collected? No. Public product and merchant data only.

What happens when Google changes something? Google changes its markup constantly; that is the nature of this work. Reading the accessibility label instead of the CSS classes makes this actor far less sensitive to those changes, and it is monitored daily and fixed fast. While it is broken you are not charged, because only delivered products cost anything.

Can I call it from my own code, like an API? Yes. Every run is available through the Apify API: start it with one HTTP request, then read the results as JSON, CSV or Excel from the dataset endpoint, or use the official Python and JavaScript clients. The input is the same JSON as in the input example above, so a scheduled script, a Make or Zapier step or an AI agent can call it without any changes.