Google Shopping shows one store per product and a note that more stores sell it. Checking each one by hand gets old quickly, so I built a Google Shopping scraper and price tracker on Apify. You type a product name, model number or barcode, pick a country, and get every listing back as a row you can export. Turn on "Compare stores" and each product also gets a table of the stores Google lists for it. Put it on a schedule and each run keeps only price changes.
The input
This is the run from the video:
{
"queries": ["sony wh-1000xm5"],
"country": "us",
"compareStores": true,
"storesForTopProducts": 3
}
A search can be words, a model number, a UPC/EAN barcode, or a Google Shopping link. A results link keeps the filters you set on Google (price range, brand, store); a product link reads that product's stores directly. There are 32 countries, each in its own currency.
The output
The search returned 40 products in under a minute, together with the store pages for 3 of them. One product row:
{
"title": "Sony WH-1000XM5 Wireless Noise Canceling Headphones",
"price": 224.99,
"currency": "USD",
"originalPrice": 398,
"discountPercent": 43,
"store": "Best Buy",
"moreStores": true,
"delivery": "Free delivery",
"rating": 4.6,
"reviewCount": 13000
}
The Stores table for that product listed five stores: Sony at $199.99 (marked "Best price"), Best Buy at $224.99, Greentoe at $249, a Walmart seller at $249.99 and TikTok Shop at $349.99. That's $150 apart for the same headphones. Each store row has stock, delivery, returns and the link to the product on the store's own site, and the product carries Google's typical price range: $199 to $300.
What testing found
Google sometimes answers from the wrong country. Requests go through Apify's Google search proxy, and about one page in seven came back localised to wherever the exit IP was: a US search priced in Brazilian reais, Saudi riyals or Colombian pesos. The gl parameter didn't stop it, and neither did Google's uule location parameter (5 of 24 US searches were still wrong). What works is checking the answer: a page from another country prices nearly everything in its own currency. Those pages are asked again and never charged, and a search that keeps coming back from abroad fails for free. In a 100-search test, 17 such answers were caught and retried.
Two card layouts. US and Canadian results use one card layout, UK and European ones another ("Current price ... And more prices"). Class names change often, so the parser reads each card's text and accessibility labels in order instead. A "3D" badge on cards with a 3D viewer looked like an amount and pushed the title into the store column until a fixture caught it.
Prices come in every format. $1,299.99, £199.00, 2 547,00 kr, CHF 199.00, R$417.08, ¥20,800, US$249. A bare $ means US, Canadian or Australian dollars depending on the country searched.
Some product pages have no details. Google answers some of them with "Details aren't available for this product". Those pages are free, and the run tries the next product instead, so you still get the number of store lists you asked for. Products Google sells at several stores go first; a single marketplace listing has only one store to show.
Tracking needed three fixes. The first version flagged cent-level changes on sellers abroad (exchange rates move), treated every eBay seller as one store, and called listings "new" when Google simply rotated them back in. It now follows Google's listing IDs, ignores moves under 0.5% and exchange-rate-only changes, and remembers listings for 30 days.
Tracking prices
Turn on "Only new products and price changes", give it a tracking name and schedule it. Google rotates marketplace listings (eBay, Poshmark and similar) between runs, so the first few runs still find listings they haven't seen; "Skip new listings" keeps a schedule to real price moves. In my test, the first run saved 49 listings for three products, and a later run with "Skip new listings" found no price changes and saved nothing.
Pricing
$1.50 per 1,000 products, $6 per 1,000 searches and $7 per 1,000 product pages for store comparison, less on paid Apify plans. One search with 40 products costs about seven cents. Searches that fail, wrong-country answers and product pages without details are free.
Try it
https://apify.com/cleanscrape/google-shopping-scraper
Questions or ideas: contact.cleanscrape@gmail.com, or the Issues tab on the Actor page.
Niko, CleanScrape developer
Top comments (0)