Google Shopping Scraper (Cheap)
Pricing
from $3.99 / 1,000 results
Google Shopping Scraper (Cheap)
Google Shopping scraper that collects product listings, prices, discounts, ratings, and retailer info by search query, so you can monitor competitor prices, track deals, and build product catalogs without manual lookup.
Pricing
from $3.99 / 1,000 results
Rating
0.0
(0)
Developer
Data API
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Share
Google Shopping Product Scraper

Comparing prices on Google Shopping by hand is slow work: you scroll page after page, copy a name here, a price there, squint at which retailer is actually cheapest. This scraper does the reading for you. Type a search term and it walks the Google Shopping results, then hands back every product as a clean row — name, current price, the pre-discount price, the worked-out discount, star rating, review count, retailer, shipping note, and image. Set a price band, ask for sale items only, point it at any country, and only pay for the products you pull.
What you get
Each product comes back as one row with a steady shape, so results drop straight into a sheet, database, or pricing model. Fields split into three groups:
- Product —
itemName,productCode,itemUrl,imageLink,metadataTags,isUsed,usedCondition - Pricing —
priceLabel,currentPrice,listPriceLabel,listPrice,discountRate,promoBadge - Seller and reputation —
sellerName,sellerIconUrl,multipleSellers,starRating,reviewsTotal,reviewSummary,deliveryInfo, plusresultRank,searchTerm, andcollectedAt
Quick start
- Hit Try for free and open the input form.
- Type what you're after into Search term (for example
wireless earbuds). - Optional: set a Lowest price / Highest price band, flip on On sale only, or pick a Target country.
- Set a Results limit, press Start, then export as JSON, CSV, Excel, or XML when the run finishes.

Use cases
- Price monitoring — track what a product sells for across retailers and catch drops as they happen
- Competitor research — see who lists a category, at what price, and with what rating
- Deal hunting — filter to sale items and sort cheapest-first to surface the best offers
- Catalog building — turn a search term into a structured product feed with prices and images
- Market analysis — compare pricing and availability across countries and Google domains
Input
| Field | Type | Required | Description |
|---|---|---|---|
searchTerm | string | Yes | What to look up on Google Shopping, e.g. wireless earbuds or samsung galaxy s24. Prefilled with wireless earbuds. |
minPriceFilter | integer | No | Drop anything priced below this value. Leave blank for no floor. |
maxPriceFilter | integer | No | Drop anything priced above this value. Leave blank for no ceiling. |
sortOrder | string | No | 0 best match, 1 cheapest first, 2 most expensive first. Default 0. |
onlyFreeShipping | boolean | No | Keep only products that ship for free. Default false. |
onlyOnSale | boolean | No | Keep only products with an active discount. Default false. |
deviceType | string | No | Emulate a desktop or mobile visitor. Default desktop. |
languageCode | string | No | Two-letter result language such as en, de, or fr. Default en. |
countryCode | string | No | Two-letter country code for geo-targeting such as us, gb, or de. Default us. |
googleHost | string | No | Google domain to query, e.g. google.co.uk or google.de. Default google.com. |
locationName | string | No | Place name for finer geo-targeting, e.g. Seattle, Washington, United States. Overrides countryCode when set. |
resultsLimit | integer | No | Most products to return per run. Default 25. |
timeoutSeconds | integer | No | Seconds to wait on each request before timing out. Default 45. |
Example input
{"searchTerm": "wireless earbuds","minPriceFilter": 30,"maxPriceFilter": 200,"sortOrder": "1","onlyFreeShipping": true,"languageCode": "en","countryCode": "us","resultsLimit": 25,"timeoutSeconds": 45}
Output
Every matched product becomes one row. Results paginate automatically up to your resultsLimit, duplicates across pages are dropped, and fields a listing does not expose come back as null so your columns stay predictable.
Example output
{"resultRank": 1,"productCode": "14665440674095220111","itemName": "Sony WF-1000XM5 Wireless Noise-Cancelling Earbuds","itemUrl": "https://www.google.com/shopping/product/1234567890","sellerName": "Best Buy","sellerIconUrl": "https://encrypted-tbn0.gstatic.com/favicon-bestbuy.png","priceLabel": "$248.00","currentPrice": 248.0,"listPriceLabel": "$299.99","listPrice": 299.99,"discountRate": 17.3,"promoBadge": "17% off","starRating": 4.6,"reviewsTotal": 5821,"reviewSummary": "Superb noise cancelling and a comfortable fit","deliveryInfo": "Free delivery","metadataTags": ["Noise cancelling", "Bluetooth 5.3"],"imageLink": "https://encrypted-tbn1.gstatic.com/images?q=example","isUsed": false,"usedCondition": null,"multipleSellers": true,"searchTerm": "wireless earbuds","collectedAt": "2026-06-29T12:00:00.000000+00:00","errorMessage": null}
Output fields
| Field | Type | Description |
|---|---|---|
resultRank | number | Position of the product within the results |
productCode | string | Google product identifier |
itemName | string | Product name |
itemUrl | string | Link to the Google Shopping product page |
sellerName | string | Retailer offering the item |
sellerIconUrl | string | Retailer favicon link |
priceLabel | string | Price exactly as shown, e.g. $248.00 |
currentPrice | number | Price as a number |
listPriceLabel | string | Pre-discount price as shown |
listPrice | number | Pre-discount price as a number |
discountRate | number | Worked-out discount percentage |
promoBadge | string | Deal or promotion badge |
starRating | number | Average rating out of five |
reviewsTotal | number | How many reviews were left |
reviewSummary | string | Brief review excerpt |
deliveryInfo | string | Shipping and returns note |
metadataTags | array | Extra badges and metadata tags |
imageLink | string | Product image as a link or base64 data URI |
isUsed | boolean | True for a used or refurbished item |
usedCondition | string | Used-condition label, e.g. Refurbished |
multipleSellers | boolean | True when several retailers carry the item |
searchTerm | string | The search term that produced the row |
collectedAt | string | ISO 8601 timestamp of when the row was captured |
errorMessage | string | Failure reason for the row; null on success |
Tips for best results
- Start small. Run a
resultsLimitof 25 first to confirm the output fits your pipeline, then raise it for the full pull. - Narrow with a price band. Setting
minPriceFilterandmaxPriceFiltercuts out noise and keeps the rows on target. - Match the market. Pair
countryCode,languageCode, andgoogleHost(e.g.gb+en+google.co.uk) so prices come back in the right currency and locale. - Use
locationNamefor city-level reads. A place likeNew York, New York, United Statestargets tighter than a country code alone. - Raise
timeoutSecondstoward 60 on large pulls or slower connections if you see requests time out.
How can I use Google Shopping product data?
How can I use the Google Shopping Product Scraper to monitor prices across retailers?
Run your search term on a schedule and each product comes back with currentPrice, listPriceLabel, discountRate, and sellerName. Compare rows over time to chart price moves, and use multipleSellers to see when the same item is listed by more than one retailer.
How can I scrape Google Shopping deals and discounts?
Set onlyOnSale to true and sortOrder to cheapest-first. The scraper keeps only discounted products and surfaces the lowest prices, with promoBadge, listPrice, and discountRate spelling out the saving on every row.
How can I build a product catalog or pricing dataset from Google Shopping?
Feed in a search term, set resultsLimit to the volume you need, and export to CSV or Excel. Each row carries itemName, productCode, currentPrice, starRating, reviewsTotal, and imageLink — a ready-made feed you can load into a sheet, store, or pricing model.
Is it legal to scrape data?
Our actors are ethical and do not extract any private user data, such as email addresses or private contact information. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.
However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.
You can also read Apify's blog post on the legality of web scraping.
Support
Questions, feature requests, or a field you'd like added? Reach out at data.apify@proton.me and we'll get back to you.
