Google Shopping Scraper API
Pricing
from $3.33 / 1,000 products
Google Shopping Scraper API
Scrape Google Shopping into structured products: title, price, previous price and discount, merchant, rating, review count, delivery and returns terms. Optionally resolves each product to the retailers' own deep links rather than Google redirects.
Pricing
from $3.33 / 1,000 products
Rating
0.0
(0)
Developer
Shakamize
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 hours ago
Last modified
Categories
Share
Turns a Google Shopping search into structured products: title, price, the struck-through previous price and its discount, merchant, rating, review count, and the delivery and returns terms Google prints on the card.
It will also resolve each product to the retailers' own deep links - the
zappos.com/product/... or bestbuy.com/.../sku/... URL that opens the product
at the shop - rather than a Google redirect.
Priced per product, at $0.004. Retailer links are a separate $0.008 per product and are off by default. A search that returns nothing is never charged, and neither is a product Google publishes no retailer link for.
Use it to compare prices across merchants, check minimum-advertised-price compliance, find which retailers stock a product, or monitor discounts and delivery terms across a category. It reads Google's aggregated merchant listings, so it covers many retailers shallowly rather than one retailer's full catalogue; for one of those in depth, use Amazon Product Scraper API or Walmart Reviews API Scraper.
Retailer links, and why almost nothing else in this niche has them
Read this before comparing us to anything else on the store.
Google's shopping results contain no outbound link of any kind. Measured
live on 2026-08-30 across the modern udm=28 results, the legacy tbm=shop
results, three non-browser user agents and a mobile one: every page carried
zero /aclk links, zero /url?q= redirects and zero retailer
hostnames. There is nothing on the results page to follow.
That is why the competing actors either omit the field or fill it with something
else. One of them publishes product_url with the description "Direct link to
the product page on the merchant's website. Currently always null". Another
publishes merchantUrl described as "derived from merchant name when
available" - a guess from a string, not an observed link.
The offers live on a different Google surface, its per-product page, and
that one is rendered server side. Switch Include retailer links on and each
product is resolved there, returning the real destinations with the shop's own
SKU and query string intact, deduplicated per shop, with Google's ved and opi
tracking parameters stripped.
It is off by default because it is honest about its cost: Google publishes those offers one product at a time, so each product becomes a further request taking 14 to 40 seconds, charged as a separate event. A product with no link published is still stored, and is not charged for links.
How many products you get per search, and where Google stops
Google serves about 40 products per request and roughly 134 in total for a
query. Measured live on 2026-08-30 on running shoes:
| Request | Products returned | Overlap with earlier pages |
|---|---|---|
start=0 | 54 | - |
start=40 | 40 | none |
start=80 | 40 | none |
start=120 | 0 | end of results |
The three pages shared not one product id, so 134 distinct products came
back for three requests. &num=100 is inert - it returns the same 40-card grid
as the default.
Set Max products per search above 40 and the actor pages through with Google's own offset, one page at a time, stopping when Google does. Asking for page four spends a request to learn there is no page four, so pages are fetched only as long as they keep returning products, and the log says when the ceiling was Google's rather than your cap.
It reads both of Google's card layouts
Google serves the shopping vertical in at least two layouts and the difference
is invisible until it costs you results. running shoes renders a 40-card grid
plus carousels. 55 inch oled tv renders no grid at all - only carousels.
A scraper keyed to the grid returns 40 products for one query and zero for the other. This one keys on the product identifiers that both layouts carry, and is tested against a captured page of each.
What you get per product
| Field | Coverage, measured over 233 products |
|---|---|
title, price, merchant | 100% |
rating, reviewCount | 81 to 100% |
returnsPolicy | 76 to 100% |
delivery | ~60% |
previousPrice, discountLabel | 18 to 61% |
Coverage varies by category rather than by fault - Google simply does not print a discount on a product that is not discounted. The actor's monitoring uses a separate floor per field for that reason, so an optional field going quiet is not reported as a collapse.
A few details that are easy to get wrong and are tested here:
reviewCountis expanded. Google writes(1.1K); this is stored as1100, not1.1.previousPriceis checked against the price it discounts. Google occasionally publishes a struck-through price below the current one, which reads as an enormous saving to anything that does not compare them. When it does not exceed the price, the field is null. It also covers Google'sUsually $Xreference price, which is the same slot worded differently.- A missing value is
null, never0. An unrated product is not a zero-star product, and the filters drop it rather than assuming it qualifies. hasOtherMerchantsmarks the products Google labels "& more", which are the ones worth resolving to retailer links.- Prices carry the currency they were written in, read from the price string rather than assumed from the country.
How to filter Google Shopping by price, rating and merchant
Every filter runs over what was parsed, never over the query, so a market that words Google's own filters differently cannot silently return the wrong products. Minimum and maximum price, minimum rating, minimum reviews, on-sale only, and merchant include/exclude lists.
A product whose value is unknown is dropped by the matching filter rather than kept. Asking for four stars and up returns products Google rated four and up, not products Google said nothing about.
How to scrape only new Google Shopping products on repeat runs
Switch Only products not seen before on and the actor remembers what it has already stored in a named key-value store and skips it, which turns a saved search into a change feed. Duplicates inside a single run are always removed, with or without it.
Example input for a Google Shopping search
{"queries": ["running shoes", "espresso machine"],"countryCode": "US","maxProductsPerQuery": 80,"minRating": 4,"includeRetailerLinks": false}
Google Shopping data you get back, as JSON, CSV or Excel
{"productId": "16602690315143339002","catalogId": "13366226642799457284","title": "Brooks Men's Ghost 18","price": { "value": 150, "currency": "$", "currencyCode": "USD" },"previousPrice": null,"discountLabel": null,"merchant": "Brooks Running","hasOtherMerchants": true,"rating": 4.3,"reviewCount": 710,"delivery": "Free delivery by Thu","returnsPolicy": "365-day returns","retailerOffers": [{"merchant": "Fleet Feet","url": "https://www.fleetfeet.com/products/mens-brooks-ghost-18?upc=198486775656","domain": "fleetfeet.com"}],"position": 3,"page": 1,"searchQuery": "running shoes","countryCode": "US","language": "en","url": "https://www.google.com/search?ibp=oshop&hl=en&gl=us&q=Brooks+Men%27s+Ghost+18&prds=catalogid%3A13366226642799457284","scrapedAt": "2026-08-30T09:15:00.000Z"}
url is Google's own page for the product, and is labelled as Google's. The
retailers' links are in retailerOffers, and are null unless you asked for them.
Errors are records, not silence
Every search leaves a trace. A search Google returned nothing for produces a
record saying so, with "error": "no_products_found", so a caller can tell an
empty category from a page that could not be read. Nothing is charged for it.
FAQ
How do I get the retailer's own link instead of a Google redirect?
Set includeRetailerLinks: true. Google's shopping results page carries no
outbound link in either card layout, so the links are resolved from a second
surface, one request per product.
Measured on 2026-09-01, a 20-product run returned 91 retailer offers across 43 distinct domains, an average of 4.5 shops per product, including walmart.com, ebay.com, lodgecastiron.com, wayfair.com, surlatable.com and target.com.
Why do retailer links cost extra, and how much?
Because each one is a whole further request to Google, where a product row costs about a fortieth of a request. They are $0.008 per product against $0.004 for the product itself, and off by default so a run cannot quietly cost three times what you expected.
A product Google publishes no retailer link for is not charged for one. The run reports that count directly:
INFO Retailer links found for 20 product(s); 0 had none published and were notcharged for them.
Expect them to be slow: 14 to 40 seconds each, and the run warns you before it starts.
How many products can I get from one search?
Pagination steps 40 at a time and runs dry near 134 products. Where it runs dry is a property of the query, not a fixed limit.
Note that a page renders more cards than it has distinct products. On a run measured on 2026-09-01, page one showed 48 rendered cards for 20 kept products after deduplication, because Google renders the same product more than once per page.
Which fields are always present, and which are not?
From a 20-product run on 2026-09-01: price, rating, review count and merchant on 20 of 20; returns policy on 18; delivery terms on 11; a struck-through previous price on 7; and an explicit discount label on 4.
Missing sale fields mean the product is not on sale, not that the read failed.
Will I be charged for a search that returns nothing?
No. Charging is per product stored, so a search returning nothing charges nothing, and products removed by your price, rating, review or merchant filters are not charged either.
Permissions the Google Shopping scraper needs
This actor asks for the minimum permissions Apify offers. It reads its input, writes its dataset, and - only when you switch repeat-run memory on - reads and writes the one named key-value store you name. It never asks for account-wide access.
Google Shopping scraper pricing, pay per product
| Event | Price | What it is |
|---|---|---|
| Product | $0.004 each | One product row with everything in the table above. |
| Retailer links | $0.008 each | The shops selling one product, as their own deep links. Only for products you asked to resolve. |
There is no charge for starting a run, no charge for a search that returns nothing, and no charge for a retailer lookup that comes back empty.
Telemetry
The Actor reports run health to its maintainer: error codes, the build number, and per-field counts. On a failure it also sends a capped sample of the failed requests, including the Google URL you asked for, which contains your search term. It carries no personal data, but it is your input, and this section says so rather than leave you to find out. Your proxy configuration and the scraped products are never sent.