Google Shopping Scraper — Products, Prices & Sellers
Pricing
from $1.00 / 1,000 product scrapeds
Google Shopping Scraper — Products, Prices & Sellers
Scrape Google Shopping product listings, prices, merchants, ratings and every seller offer for a product. No API key, no headless browser.
Pricing
from $1.00 / 1,000 product scrapeds
Rating
0.0
(0)
Developer
Mahmudul Hasan
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Pull live product listings and seller prices from Google Shopping. No API key, no Google Cloud project, no headless browser — the Actor talks to Google's shopping vertical directly.
What you get
| Action | What it returns |
|---|---|
| Product search | Every product tile for a query: title, price, original price, merchant, rating, review count, product and catalog IDs, link and image |
| Seller offers | Every seller carrying a product, with each one's price — the "compare prices" panel |
Results land in the run's dataset and export to JSON, CSV, Excel, XML or via the API.
Pricing
| You pay for | Price |
|---|---|
| Each product scraped | $1.00 per 1,000 |
| Each seller offer scraped | $0.80 per 1,000 |
| Each page requested from Google | $0.004 |
| Actor start | $0.05 per 1,000 runs |
Google returns 10 products per page, so a 40-product search is 4 pages: 4 × $0.004 + 40 × $0.001 = $0.056, or about $1.40 per 1,000 products — cheaper than comparable Google Shopping scrapers on the Store.
About the page fee. Google Shopping is the most aggressively bot-protected Google surface, and every page fetch consumes a paid proxy request whether or not Google returns results. The $0.004 page fee covers that. A query that comes back empty still costs the page fee — you are not charged the per-product fee, only the request.
Set a maximum cost per run in the run options and the Actor stops cleanly when it gets there. Platform compute and proxy are included — you are never billed separately for usage.
Input
Product search:
{"action": "search","queries": ["mechanical keyboard", "iphone 16 case"],"maxProductsPerQuery": 40,"minPrice": "50","maxPrice": "150","sort": "price_asc","country": "us","language": "en"}
Seller offers — the IDs come from the catalog_id and product_id fields of a search run:
{"action": "offers","products": [{ "catalogId": "1234567890123456789" },{ "productId": "9876543210987654321" }]}
| Field | Description |
|---|---|
action | search or offers |
queries | Search terms, one per line (search only) |
products | Products to look up, each with catalogId or productId (offers only) |
maxProductsPerQuery | How many results to request per query (10–100, default 40) |
minPrice / maxPrice | Optional price filters |
sort | relevance, price_asc, price_desc or rating |
country / language | Google gl and hl codes — sets the storefront and currency |
proxyConfiguration | Google SERP proxy is on by default. Leave it on. |
requestDelaySeconds | Pause between requests (default 2) |
Output
One dataset item per product:
{"type": "product","query": "mechanical keyboard","title": "Keychron K2 Wireless Mechanical Keyboard","price": "$89.00","price_value": 89.0,"currency": "$","original_price": "$99.00","original_price_value": 99.0,"condition": "New","merchant": "Keychron","rating": 4.6,"reviews": 2841,"product_id": "1234567890123456789","catalog_id": "9876543210987654321","link": "https://www.google.com/shopping/product/...","image": "https://api.apify.com/v2/key-value-stores/.../records/image-6e500831fbffe8fb.webp"}
Prices come both as Google displayed them (price) and parsed into a number you can sort and
compare (price_value + currency).
image is always a real, linkable URL. Google serves most Shopping thumbnails as inline data
rather than as URLs, so those are saved to the run's key-value store and the item points at
them — no multi-kilobyte blobs in your CSV. Identical thumbnails are stored once. Set
storeImages to false if you don't need images.
Offer items carry product_title, merchant, price and link. Queries that return
nothing are written as {"type": "empty", ...} and failures as {"type": "error", ...},
so a bad query never kills the run.
Common uses
- Track competitor pricing on your SKUs across every merchant carrying them
- Find the cheapest seller for a product before buying or reselling
- Build a price-comparison dataset for a category or brand
- Monitor MAP compliance across your retail partners
- Feed live retail prices to an AI shopping assistant (this Actor supports agentic payments via x402 and Skyfire)
Integrations
Run on a schedule, or send the output to Google Sheets, Airtable, Slack, Make, Zapier or your own webhook. Everything is reachable through the Apify API and the JavaScript and Python clients.
Notes and limits
- This is an unofficial scraper. Google changes Shopping markup frequently and per region; the parser uses several fallback strategies, but when a page parses to zero products the Actor logs it and moves on rather than failing the run.
- Keep the proxy on. Without it you will be CAPTCHA-blocked within a handful of requests.
- Seller offers work best with
catalogId. A bareproductIdsometimes lands on a not-available page, in which case the item comes back empty with a note explaining why. - Prices are what Google displays for your
countryandlanguage; they can differ from the merchant's own site and move between the scrape and a purchase. - Scrape only public data and use the output in line with Google's terms and applicable law.
Support
Found a bug or need a field that is not extracted yet? Open an issue on the Actor's Issues tab.