Google Shopping Scraper - Product Prices & Offers avatar

Google Shopping Scraper - Product Prices & Offers

Pricing

from $1.26 / 1,000 product offers

Go to Apify Store
Google Shopping Scraper - Product Prices & Offers

Google Shopping Scraper - Product Prices & Offers

Scrape Google Shopping offers: title, price, original price, discount, merchant, rating, reviews, delivery and return terms. Export to CSV, JSON, Excel or XML.

Pricing

from $1.26 / 1,000 product offers

Rating

0.0

(0)

Developer

ParseForge

ParseForge

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

13 hours ago

Last modified

Share

ParseForge Banner

๐Ÿ›’ Google Shopping Prices Scraper

๐Ÿš€ Export Google Shopping offers in seconds. One search query returns up to 40 offers per page with the current price, the struck-through original price, the discount percent, the merchant, the star rating, the review count and the delivery and return terms. 100 offers for "4k monitor" took 31 seconds on a 1 GB run.

Give the Actor one or more search queries and a country, and it reads the server-rendered Google Shopping results through Apify's Google SERP proxy, the route built for Google search pages. Every product card becomes one flat row with 21 fields, including Google's own product, cluster and offer IDs, so the same product can be tracked run after run. Price range, condition and sort order are handed to Google before the page is read, so filters never cost you rows.

Coverage is whatever Google Shopping serves for your query in the selected market: 39 countries and 21 interface languages are available in the input, pagination runs 40 offers per page up to Google's depth ceiling of about 400 per query, and multiple queries stack in one run.

๐ŸŽฏ Target Audience๐Ÿ’ก Primary Use Cases
Price intelligence and revenue teamsRead the market price of a product across every merchant Google lists
Brands and manufacturersSee who sells your product, at what price, and who is undercutting MAP
Retail and e-commerce operatorsTrack competitor prices and promotion depth by category
Deal, coupon and affiliate sitesFind discounted offers with the original price and discount percent

๐Ÿ“‹ What the Google Shopping Prices Scraper does

๐Ÿ’ก Why it matters: Google answers datacenter and residential exits, browsers included, with HTTP 429 and a captcha, and its newer shopping tab ships no prices in the HTML. This Actor reads the server-rendered tbm=shop surface through the Google SERP proxy group, finds cards by their stable data-pid attribute and reads the screen-reader text Google maintains for each card, so a redesign of the CSS class names does not silently empty your dataset.

  • ๐Ÿท๏ธ Price: current price and currency symbol, the original price where Google prints one struck through, the discount percent and a Yes/No isOnSale flag.
  • ๐Ÿฌ Merchant: the merchant named on the card plus a Yes/No flag saying whether Google aggregates more sellers behind it.
  • โญ Reviews: star rating and review count, with Google's 5.4K shorthand expanded to a number.
  • ๐Ÿšš Terms: the delivery line and the return window exactly as printed on the card.
  • ๐Ÿ†” Identifiers: Google's product, cluster and offer IDs, plus a Google Shopping product page URL for every row.
  • ๐Ÿ–ผ๏ธ Thumbnail: the encrypted-tbn image URL when Google links one (about 4 cards in 10; the rest are inlined as image bytes and reported as Not Disclosed).
  • ๐Ÿ” Filters that do not cost rows: price range, condition and sort order are sent to Google; the on-sale and merchant filters are applied to the cards after they are read.

๐ŸŽฌ Full Demo (๐Ÿšง Coming soon)

A short walkthrough video is in production.

๐Ÿ“Š Output

Each row is one Google Shopping offer. Fields, in dataset order:

FieldDescription
๐Ÿ–ผ imageUrlThumbnail URL from Google's image cache, or Not Disclosed when Google inlines the image instead of linking it
๐Ÿ“Œ titleProduct title as shown on the card
๐Ÿ”— urlGoogle Shopping product page for the offer's product ID
๐Ÿ†” productIdGoogle product ID, stable across runs
๐Ÿงฉ clusterIdGoogle product cluster ID
๐Ÿท offerIdGoogle offer ID for this merchant listing
๐Ÿ’ต priceCurrent price as a number
๐Ÿ’ฑ currencyCurrency symbol printed on the card ($, ยฃ, โ‚ฌ)
๐Ÿท originalPriceStruck-through original price, or N/A when the offer is not discounted
๐Ÿ“‰ discountPercentDiscount percent printed by Google, 0 when there is none
๐Ÿ”ฅ isOnSaleYes when an original price higher than the current price is shown, else No
๐Ÿฌ merchantMerchant named on the card
๐Ÿช hasMultipleMerchantsYes when Google lists more sellers behind the card
โญ ratingStar rating out of 5, or Not Disclosed
๐Ÿ—ฃ reviewCountNumber of reviews, or Not Disclosed
๐Ÿšš deliveryDelivery line as printed, or Not Disclosed
โ†ฉ๏ธ returnPolicyReturn window as printed, or Not Disclosed
๐Ÿ”Ž queryThe search query that produced the row
๐ŸŒ countryMarket code used for the request
๐Ÿ•’ scrapedAtISO timestamp of the collection
โŒ errornull on success; error rows carry only this field and are never charged

Three real records from the cloud verification run (query "laptop", United States, Max Items 5):

[
{
"imageUrl": "Not Disclosed",
"title": "HP OmniBook X Flip 2-in-1 16\" 2K OLED Touchscreen Laptop",
"url": "https://www.google.com/shopping/product/1381297317110928014?gl=us&hl=en",
"productId": "1381297317110928014",
"clusterId": "12265389182617013139",
"offerId": "4553594992797254453",
"price": 999.99,
"currency": "$",
"originalPrice": 1350,
"discountPercent": 25,
"isOnSale": "Yes",
"merchant": "Best Buy",
"hasMultipleMerchants": "Yes",
"rating": 4.7,
"reviewCount": 384,
"delivery": "Free delivery by Wed",
"returnPolicy": "15-day returns",
"query": "laptop",
"country": "us",
"scrapedAt": "2026-09-08T04:54:00.649Z",
"error": null
},
{
"imageUrl": "Not Disclosed",
"title": "Lenovo Yoga 7a 2-in-1 AI PC Laptop | 14 inch Wuxga Oled Touch (100% Dci-p3) | AMD Ryzen AI 5 340 (Up to 50 Tops) | 16gb Ddr5 1TB SSD | for Creator",
"url": "https://www.google.com/shopping/product/14145348008510860685?gl=us&hl=en",
"productId": "14145348008510860685",
"clusterId": "16924392382734695053",
"offerId": "12978534686114576382",
"price": 1139.99,
"currency": "$",
"originalPrice": "N/A",
"discountPercent": 0,
"isOnSale": "No",
"merchant": "Walmart - Happy Ranger",
"hasMultipleMerchants": "No",
"rating": "Not Disclosed",
"reviewCount": "Not Disclosed",
"delivery": "Free delivery",
"returnPolicy": "Not Disclosed",
"query": "laptop",
"country": "us",
"scrapedAt": "2026-09-08T04:54:00.650Z",
"error": null
},
{
"imageUrl": "Not Disclosed",
"title": "HP OmniBook X Flip 2-in-1 14\" 2K OLED Touchscreen Laptop",
"url": "https://www.google.com/shopping/product/2187320107212753054?gl=us&hl=en",
"productId": "2187320107212753054",
"clusterId": "16793559515556330662",
"offerId": "17355904709601380764",
"price": 1649.99,
"currency": "$",
"originalPrice": "N/A",
"discountPercent": 0,
"isOnSale": "No",
"merchant": "Best Buy",
"hasMultipleMerchants": "Yes",
"rating": 4.7,
"reviewCount": 384,
"delivery": "Free delivery by Wed",
"returnPolicy": "15-day returns",
"query": "laptop",
"country": "us",
"scrapedAt": "2026-09-08T04:54:00.651Z",
"error": null
}
]

โœจ Why choose this Actor

What you get
It gets throughGoogle answers residential and datacenter exits with a 429 captcha, browser included. This Actor uses Apify's Google SERP proxy group, the route built for Google search pages, and it is the default.
The server-rendered surfaceThe newer udm=28 shopping tab is a client-rendered shell with zero prices in the HTML. This Actor reads tbm=shop, which ships every price server side: 68 cards in one response against none from the new tab.
Parsed off stable hooksCards are found by data-pid and read from the aria-label text Google maintains for screen readers. The CSS class names are per-deploy hashes and are never used.
Server-side filtersPrice range, condition and sort order are handed to Google, so you are not paying for rows you then throw away.
Explicit marketcountry and language are set on every request. Without them Google prices in whatever market the exit node sits in.
Honest blanksN/A and Not Disclosed instead of empty cells, so filters in Excel behave.
You pay for what you keepRows are billed as they are written and capped at Max Items; error rows are never billed.

๐Ÿ“ˆ How it compares to alternatives

Most Google Shopping scrapers on the Store render the page in a browser at 2 to 4 GB per run or rely on a third-party SERP API. This Actor reads the server-rendered page at 1 GB and states its ceilings up front.

FeatureThis ActorBrowser-based scrapersThird-party SERP APIs
Memory per run1 GB2 to 4 GBNot applicable
Original price, discount percent, on-sale flagYesVariesVaries
Delivery line and return windowYesRareRare
Google product, cluster and offer IDsYesRareVaries
Server-side price, condition and sort filtersYesVariesVaries
Merchant destination URLNo, Google builds it in the browserSometimesSometimes
Thumbnail URLAbout 4 cards in 10VariesVaries
Depth per queryAbout 400 offers, Google's own ceilingSame ceilingSame ceiling
Extra API keyNoNoYes

๐Ÿš€ How to use

  1. Create a free Apify account with $5 in credit.
  2. Open the Google Shopping Prices Scraper.
  3. Type your search queries, pick the country, set Max Items and any price, condition or sort filter, then click Start.
  4. Download the dataset as CSV, Excel, JSON or XML from the Storage tab, or read it through the API.

A first run:

{
"queries": ["laptop"],
"maxItems": 10,
"country": "us",
"language": "en",
"sortBy": "price-low",
"minPrice": 300,
"maxPrice": 900
}

Free-plan runs return up to 10 offers as a preview. Upgrade your Apify plan to collect up to 1,000,000 offers per run.

๐Ÿ’ผ Business use cases

๐Ÿ“‰ Price history without a data vendor. A price intelligence team schedules the same 50 queries daily, keeps productId, merchant and price, and diffs the runs. The product ID is stable, so the diff is the price history.

๐Ÿ”Ž MAP and undercutting alerts. A brand searches its own product names, sorts by price low to high and reads the merchant column. Any row under the minimum advertised price is a violation with the seller's name attached.

๐ŸŒ Cross-market comparison. Run the same query with country set to us, gb and de. Google prices in the local currency and the currency symbol is on every row.

๐Ÿ”ฅ Deal discovery. A coupon site runs a category query with onlyOnSale on, then ranks rows by discountPercent to publish the day's deepest cuts with the original price beside them.

๐Ÿ”Œ Automating Google Shopping Prices Scraper

  • Make and Zapier: run the Actor on a schedule and append new rows to Google Sheets or Airtable.
  • Slack: post a message when a run returns a row whose price drops under a threshold or whose merchant is not on your approved list.
  • Airbyte: sync the dataset into BigQuery, Snowflake or Postgres for price dashboards.
  • GitHub Actions: refresh a public price index on every deployment of your app.
  • Google Drive: save each run as CSV or Excel for a shared folder.

Every integration starts from the Apify API or the ApifyClient for JavaScript and Python.

๐ŸŒŸ Beyond business use cases

  • Research: collect discount depth across categories for a study on promotional prices.
  • Personal: watch one product across merchants and buy on the day it drops.
  • Non-profit: compare the price of essential goods across markets for a consumer report.
  • Experimentation: feed titles and prices to an LLM to prototype a product-matching model.

๐Ÿค– Ask an AI assistant about this scraper

Give an AI agent live access to Google Shopping offers through the Model Context Protocol:

$claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/google-shopping-prices-scraper"

Then ask in plain language, for example "What does a Milwaukee M18 drill cost across merchants right now?" or "Find discounted laptops under $900 with a rating above 4.5".

โ“ Frequently Asked Questions

๐Ÿ›ก๏ธ Why must I use the Google SERP proxy?

Because nothing else works. A stealth browser on an Apify residential exit got HTTP 429 with a captcha on the shopping tab, and plain HTTP over datacenter and residential got the same. Apify's Google SERP group returns 200 with a full page. It is the default and there is no reason to change it.

๐Ÿ”— Does it return the merchant's product URL?

No. Google routes its card links through a click tracker built in the browser, so there is no destination URL in the server-rendered HTML. You get the merchant name, Google's product, cluster and offer IDs, and a Google Shopping product page URL instead.

๐Ÿ–ผ๏ธ Why is imageUrl often Not Disclosed?

Google links about 4 thumbnails in 10 through its image cache and inlines the rest into the page as 20 to 30 KB of image bytes. Only the linked ones are reported; a 30 KB blob per row is not something you want in a CSV.

๐Ÿ†” Is the product ID stable between runs?

Yes, which is what makes price tracking possible: keep productId and price from each run and diff them.

๐ŸŒ Which countries and languages work?

39 markets and 21 interface languages are listed in the input. Set country and language together; English labels are what the parser reads best, so keep language at en unless you need local titles.

๐Ÿ’ฑ Why are my prices in the wrong currency?

Set country. Without it Google prices in the market the exit node sits in.

๐Ÿท๏ธ Why is originalPrice N/A on most rows?

Because most offers are not discounted. Google only prints a struck-through price when there is one, and roughly one row in two carries it in a typical search. onlyOnSale keeps just those.

๐Ÿฌ Why is merchant sometimes a phrase like "Also nearby"?

Google reuses the card layout for local inventory results, where that slot holds a proximity note rather than a seller. Those rows still carry a valid price and product ID.

๐Ÿ“ฆ How many offers can I collect?

Free users get 10 offers as a preview. Paid Apify users can set Max Items up to 1,000,000 per run across as many queries as they supply. Google stops serving new results past about 400 offers per query, so add queries to go wider rather than deeper.

๐Ÿ” Why fewer offers than Max Items?

Either Google ran out of results for the query, or the on-sale and merchant filters removed cards after they were read. The run log shows how many cards each page had and how many were kept.

๐Ÿงพ What do N/A and Not Disclosed mean?

N/A means the field does not apply to that row (no original price on an offer that is not discounted). Not Disclosed means Google's card has the slot but this offer left it empty (no rating, no delivery line).

โŒ What happens if Google does not answer?

The Actor retries each page up to 5 times with a growing pause. If a page still fails, one row containing only an error field is written, which is never charged, and the run status message says so.

โฐ Can I run this on a schedule?

Yes. Create an Apify schedule to run the Actor hourly, daily or weekly and connect the dataset to your pipeline.

๐Ÿ“„ What output formats are supported?

CSV, JSON, Excel and XML from the Apify Console or API.

๐Ÿ”Œ Integrate with any app

The dataset is available through the Apify API the moment the run finishes. Use the run-sync-get-dataset-items endpoint for one-shot calls, webhooks to trigger downstream jobs, or the Make, Zapier, Airbyte and LangChain integrations listed on the Actor page.


๐Ÿ’ก Pro Tip: browse the complete ParseForge collection.

๐Ÿ†˜ Need Help? Open our contact form with your run ID, your input and what you expected.

โš ๏ธ Disclaimer: This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Google. It collects only publicly available search results. You are responsible for using the data in compliance with Google's terms of service and applicable laws.