Google Shopping is the closest thing to a live census of retail: who sells a product, at what price, with what rating, shipping, and discount, across nearly every store that matters. Reading it by eye works for one gift; it does not work for a pricing strategy. This post covers Google Shopping scraping the manual way, why that path decays, and the shortcut: the Google Shopping API on Apify, which returns product listings as structured JSON.
Disclosure: the Apify links in this post are affiliate links. If you run the Actor, I may earn a referral commission at no extra cost to you.
Does Google Shopping have a public API?
Not for reading results. Google's commerce APIs exist to let merchants manage their own product feeds, and none of them will tell you what the Shopping tab shows for "robot vacuum" right now. So the practical Google Shopping API is a scraper consumed like one: query in, listing rows out, with the filters the Shopping UI offers exposed as parameters.
What Google Shopping scraping returns
The Google Shopping API returns one page of results per dataset item, with the products in a shopping_results array: title, price, seller, rating, delivery, and discount data per listing.
| Field | Example | Notes |
|---|---|---|
title |
Dyson Airwrap Multi-Styler |
With product_id as the tracking key |
extracted_price |
499.99 |
Numeric, next to the display price
|
extracted_old_price |
599.99 |
On sale items, with the strikethrough price |
tag |
17% OFF |
Discount and promo badges |
source |
Best Buy |
Seller name, plus multiple_sources when several stores list it |
rating |
4.6 |
With reviews count alongside |
Each page also carries search_timestamp and search_metadata, which is what makes repeated runs stack into a price history.
Who this is for
Ecommerce intelligence teams watching competitors' prices, brands enforcing MAP policies across resellers, and dropshipping researchers hunting products by price band before committing inventory.
The manual way, and where it breaks
Scraping the Shopping tab yourself means a headless browser, a layout that reshuffles constantly, and localization that quietly changes results by country, language, and currency. Pagination is scripted scrolling, sale badges live in inconsistent markup, and Google's bot defenses treat your crawler as exactly what it is. The maintenance never ends because the page was never meant to be parsed.
The faster way: run the Google Shopping API
Apify Console
- Open the Google Shopping API and click Try for free.
- Enter a search in
q, setglandhlfor the market, and add filters likemin_price,max_price, oron_sale. - Run it and export the listings as JSON, CSV, or Excel.
REST
curl -X POST "https://api.apify.com/v2/acts/johnvc~google-shopping-api-google-shopping-products-prices-deals/runs?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "q": "dyson airwrap", "gl": "us", "hl": "en", "max_pages": 1 }'
Endpoint reference: the Apify API docs.
Scrape Google Shopping prices in Python
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("johnvc/google-shopping-api-google-shopping-products-prices-deals").call(
run_input={
"q": "robot vacuum",
"gl": "us",
"hl": "en",
"on_sale": True,
"min_price": 100,
"max_price": 400,
"max_pages": 1,
}
)
for page in client.dataset(run["defaultDatasetId"]).iterate_items():
for item in page.get("shopping_results", []):
print(item["title"], item.get("extracted_price"), item.get("source"))
A runnable version lives in the task Google Shopping prices Python API.
Track one product across every retailer
Point a scheduled search at a single product and you get its market: Track PS5 Pro prices across retailers and the Dyson Airwrap price tracker show the pattern on real products.
Hunt deals with sale and shipping filters
The deal-finding tasks lean on on_sale and price bands: Price drop and on-sale product finder and the free shipping deal finder.
Localize price data by country
The same query priced per market is one gl change: ready-made runs exist for the UK, Germany, and India.
Monitor MAP violations
For brands, the sharpest use: Minimum advertised price violation monitoring flags any extracted_price below your floor, with the seller name attached.
Check live prices from Claude via MCP
Apify exposes the Actor over MCP, so Claude, Claude Code, and Cursor can run a live price check as a tool call: "what does a Dyson Airwrap cost today and who discounts it" becomes answerable mid-conversation. The task Check live product prices in Claude via MCP has the config, there is an n8n workflow variant for automation folks, and you can read more about Claude at claude.ai.
FAQ about scraping Google Shopping
Is there a free Google Shopping scraper?
This one bills per page of results scraped, and a page carries around 40 listings, so a meaningful market snapshot costs a handful of page events. New Apify accounts include free platform credit, which is plenty to test your queries before any money moves.
Can the scraper build a price history?
Yes, by repetition: each run stamps its rows with search_timestamp, so a scheduled daily search accumulates into a history keyed on product_id and source. The scraper does not backfill the past; your archive starts the day you start running it.
Can Claude check prices through this scraper via MCP?
Yes. Connect the Apify MCP server and the Actor becomes a callable tool; the MCP task above is the working setup.
Can I schedule the scraper for daily price monitoring?
Yes, that is the intended shape for tracking and MAP work: save the search as a task, attach a daily schedule, and alert on deltas between runs. Start from the Google Shopping API page.
What are the scraper's honest limits?
It reads the public Shopping results page, so you get what Google shows: listed sellers and advertised prices, not stock levels or checkout totals with tax. Coverage follows Google's own, which is broad but not guaranteed to include every small shop.
More from Truffle Pig Data
The same Actor from other angles: Google Shopping API for AI Agents on Medium, the LinkedIn article on tracking live prices, and the Peerlist guide to price tracking.
Wrapping up
Retail pricing is public; the hard part was only ever the collection. Run one query through the Google Shopping API and start keeping the receipts.
Top comments (0)