Google Shopping Scraper: Prices, Sellers and Offers
Google Shopping Scraper is an Apify actor (API) by CheapAPI Labs. Products, prices and sellers from Google Shopping in any country. Track changes between runs and pay only for what changed. It costs $2.40 per 1,000 products on the Apify Free plan and $2.00 on Gold, billed through your Apify account with no API key.
Compared with the most used Google Shopping actor (about 990 users): one product on the Free plan costs $0.0024 here and $0.02 plus a $0.008 start fee there (Apify Store listing prices, checked September 2026).
Our prices updated 30 October 2026; competitor prices as checked in the comparison. 8 Apify users have run this actor (Apify Store count, 30 October 2026).
What does Google Shopping Scraper return?
Scrape Google Shopping products, prices, discounts, ratings and every store's offer for a product (price comparison) in any country, clean JSON, CSV or Excel, no proxies or setup needed.
Why this Actor
- From $2.00 per 1,000 products (Gold plan and above; $2.40 on other plans), no start fee. Apify platform usage is billed separately.
- Price comparison built in: every store selling a product (up to 200) with price, shipping, total price, condition and availability.
- 30+ fields per product: title, price, old price, seller, rating, reviews, delivery, number of stores, product ID, links, images.
- Price monitoring built in: schedule runs and get
previousPrice,priceChangeandisNew, or only the prices that changed (see Pricing). - Any of 249 countries, any language, city level or GPS location, price filters and sorting.
Store links: search rows link to the Google Shopping product page (googleShoppingUrl); the store's own page (url) is usually null there, because Google rarely links it in search results. For store links, use the Seller offers mode (or Seller offers for the first N products in search mode): every offer row has the store's url.
Not included: product reviews (individual review texts), historical price charts from Google, and sellers' stock quantities. Price history starts with your first monitored run.
One example row from a real run, shortened:
{
"rowType": "product",
"searchTerm": "wireless earbuds",
"position": 2,
"resultType": "organic",
"isSponsored": false,
"title": "Apple AirPods Pro 3",
"price": 219.99,
"oldPrice": 249,
"currency": "USD",
"seller": "Best Buy",
"rating": 4.7,
"ratingMax": 5,
"reviewsCount": 12000,
"delivery": "Free delivery",
"storesCount": 12,
"productId": "11504754468308736293",
"gid": "4728907421224624008",
"offerDocId": "12672482923996492277",
"googleShoppingUrl": "https://google.com/search?ibp=oshop&q=wireless+earbuds&prds=gpcid:4728907421224624008,headlineOfferDocid:12672482923996492277,catalogid:11504754468308736293,pvo:3,pvt:hg&hl=en&gl=US",
"url": null,
"image": "https://encrypted-tbn0.gstatic.com/shopping?q=tbn:ANd9GcRBe4UXglCc_cYBelj2Ob67YuHj4ex9R41dG_eBWGUnk7ZmEg63ZBndYTiDCv3sNvy_icidzgJWH-4G2sO2ADwWjjtwlv0e",
"country": "US",
"language": "en",
"scrapedAt": "2026-09-28T16:02:18.200Z"
}Which fields do you get?
Every dataset row has a rowType: product (a search result), offer (one seller of a product) or productDetails.
Products (rowType: "product")
| Field | Type | Example |
|---|---|---|
searchTerm |
string | "wireless earbuds" |
position |
integer | 2 |
title |
string | "Apple AirPods Pro 3" |
price / oldPrice |
number | 219.99 / 249 |
currency |
string | "USD" |
seller |
string | "Best Buy" |
rating / ratingMax |
number | 4.7 / 5 |
reviewsCount |
integer | 12000 |
delivery / deliveryPrice |
string / number | "Free delivery" / 0 |
storesCount |
integer | 12 |
productId, gid, offerDocId |
string | "11504754468308736293" |
googleShoppingUrl, url |
string | Google Shopping product page (always); store page (url) only when Google links it directly, usually null in search results, so use seller offers for store links |
image, images |
string, array | product photos |
isSponsored, resultType |
boolean, string | false, "organic" |
tags, description, specifications, specialOffer, storeRating |
various | when Google shows them |
pricePerMonthMultiplier |
number | 24 when Google shows an instalment price such as "$29/mo for 24 mo" (then price is the per payment amount); null otherwise |
storeRating / storeRatingMax / storeReviewsCount |
number / number / integer | the store's rating, its scale and number of store reviews |
deliveryPriceText |
string | delivery price exactly as Google displays it (text) |
isBestMatch |
boolean | true when Google marks the product as best match |
carouselTitle |
string | name of the carousel a product came from (sponsored or extra carousels), null for regular results |
searchUrl |
string | the Google Shopping page the products were read from |
Seller offers (rowType: "offer"): productTitle, productId, gid, productImage, productUrl, productRating / productRatingMax / productReviewsCount (the product's own rating), productPosition and searchTerm (when the offers come from a search), position, seller, sellerDomain, title (the seller's listing title), price, oldPrice, shippingPrice, tax, totalPrice, currency, pricePerMonthMultiplier and paymentBreakdown (instalment offers, as Google shows them), condition, badge (e.g. "SALE"), availability, sellerRating / sellerRatingMax, sellerReviewsCount, isBuyOnGoogle (sold through Google checkout), offerDetails, url.
Product details (rowType: "productDetails"): title, description, images, features, specifications (group, name, value), rating, reviewsCount, sellers (store, price, old price, delivery, availability, rating), sellersCount (number of sellers listed), sellerReviewsCount, and the lowest price / oldPrice / currency with its seller.
All rows also have country, language, location and scrapedAt. Offer and details rows also have input (the product link or ID you entered, or the product title when the offers come from a search).
Price monitoring fields (only when Track price changes is on). Search rows track the price Google shows for the product, offer rows track each seller's price, and details rows track the lowest seller price.
| Field | Type | Example |
|---|---|---|
previousPrice |
number | 249.99 (the price saved in the last run, null for new items) |
priceChange |
number | -30 (price − previousPrice) |
priceChangePct |
number | -12 |
isNew |
boolean | false (true the first time this monitoring name sees the product or offer) |
priceStatus |
string | "new", "up", "down", "unchanged", "changed" (currency changed or first known price), "unknown" (no price shown this time) |
How much does Google Shopping Scraper cost?
You pay per event, through your Apify account. Main price: $2.40 per 1,000 products on the Apify Free plan and $2.00 on Gold. Every event and plan:
| Event | Free | Bronze | Silver | Gold |
|---|---|---|---|---|
| ProductOne Google Shopping product delivered from a search (title, price, old price, seller, rating, reviews, delivery, product ID, links, images). | $0.0024 | $0.0024 | $0.0024 | $0.002 |
| Product with seller offersCharged once per product for which at least one seller offer was delivered. | $0.004 | $0.004 | $0.004 | $0.004 |
| Seller offerOne seller offer of a product delivered (store, price, shipping, total price, condition, availability, seller rating, link). | $0.0005 | $0.00043 | $0.00039 | $0.00032 |
| Buy on Google offers add onOnly when "Include Buy on Google offers" is on: per started block of 10 delivered seller offers. | $0.003 | $0.003 | $0.003 | $0.003 |
| Product detailsOne full product record delivered: description, all images, features, specifications, rating and the list of sellers with prices. | $0.014 | $0.00405 | $0.00405 | $0.00405 |
| Price check (only changes monitoring)Only when "Only deliver new or changed prices" is on: once per search, product or product details lookup that returned data, even if every price was unchanged. Never charged when monitoring is off. | $0.004 | $0.004 | $0.004 | $0.004 |
| Lookup minimum top upOnly when a lookup (one search, one product's seller offers or one product's details) delivers less than its minimum charge ($0.0028 for one collection unit, +$0.0025 per further unit; a unit = a started block of 40 search results or 10 seller offers Google returned, counted twice with Buy on Google offers, or one details record): tops the lookup up to that minimum in $0.0001 steps. Typical cases: a search with 0 products, 'Products per search' = 1, all prices unchanged, a lookup that failed after it was sent. | $0.0001 | $0.0001 | $0.0001 | $0.0001 |
How do I call Google Shopping Scraper API from code?
Every run is one HTTP request to the Apify API with your Apify token; the input below is the actor's own example. The synchronous endpoint returns the rows in the response for runs up to 300 seconds; for longer runs start a run and fetch its dataset.
curl -X POST "https://api.apify.com/v2/acts/cheapapi~google-shopping-scraper/run-sync-get-dataset-items" \
-H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \
-d '{"mode":"search","searchTerms":["wireless earbuds"],"products":["1113158713975221117"],"maxProductsPerSearch":40,"country":"US","language":"en","monitoringName":"default"}'With the JavaScript client:
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('cheapapi/google-shopping-scraper').call({
"mode": "search",
"searchTerms": [
"wireless earbuds"
],
"products": [
"1113158713975221117"
],
"maxProductsPerSearch": 40,
"country": "US",
"language": "en",
"monitoringName": "default"
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();How does Google Shopping Scraper compare with alternatives?
Typical run: 1,000 products from Google Shopping searches in one run, all Actor fees included (start fees too). Apify platform usage is not included in these numbers.
| Alternative (Apify Store) | Pricing | Free plan | Gold plan |
|---|---|---|---|
| Most used Google Shopping Actor (~990 users) | $0.02 per result on Free, $0.005 on paid plans, + $0.008 start fee (per GB of memory, 1 GB counted) | $20.01 | $5.01 |
| Second most used (~900 users) | $0.0035 per result, all plans | $3.50 | $3.50 |
| Tiered price Actor (~430 users) | $0.011364 per product on Free, $0.005929 on Gold, + $0.035 / $0.0263 start fee | $11.40 | $5.96 |
| Lightweight search Actor (~24 users), its "light search" rows (a lighter row format) | $0.001 per row + $0.006 start fee | $1.01 | $1.01 |
| Per page Actor (~160 users) | $0.02 per results page of about 40 products ($0.0194 on Gold), + $0.02 setup fee + $0.00001 per row | $0.53 | $0.52 |
| This Actor | $0.0024 per product ($0.0020 on Gold and above), no start fee, + Apify platform usage | $2.40 | $2.00 |
Seller offers (price comparison) for 100 products, 20 offers each:
| Alternative (Apify Store) | Pricing | Free plan | Gold plan |
|---|---|---|---|
| EAN/SKU offer Actor (~560 users) | $0.02 per product row on Free, $0.015 on Gold | $2.00 | $1.50 |
| This Actor | $0.004 per product + $0.0005 per offer ($0.00032 on Gold), + Apify platform usage | $1.40 | $1.04 |
The tiered price Actor is cheaper on Platinum ($3.97) and Diamond ($2.78) than on Gold; this Actor is still below that. We are not the cheapest for plain search listings: the lightweight and per page Actors above cost less per 1,000 products. They are good choices if you only need basic listings; this Actor adds seller offers, product details and price monitoring in one place, with 30+ fields per product.
The totals compare the Actors' own fees. For this Actor, Apify platform usage is billed separately by Apify (at the default 256 MB a small run typically uses about $0.001 to $0.005); check each alternative's Store listing for how it bills platform usage. Prices from public Apify Store listings, checked September 2026.
What is it used for?
- Price monitoring and alerts: schedule daily runs with Only deliver new or changed prices and get only the products and seller offers whose price moved, with
priceChangeandpriceChangePct, and pay only for those rows. - Price comparison and repricing: get every store selling a product with total prices, then find the cheapest seller or the Buy Box range.
- Market and assortment research: see which brands, stores and price points rank for a category search in each country.
- MAP and reseller compliance: spot sellers that advertise below your minimum advertised price.
- Product catalog enrichment: add specifications, images, features and ratings to your product database.
- Shopping ads research: include sponsored products to see who advertises on which searches.
What are the limits?
- Google decides which fields it shows. Some products have no rating, old price or delivery information, and those fields are
null. - A product search returns at most about 120 products. For more, use several related searches or price ranges.
- Seller offers are limited to 200 per product, and not every product has a seller list on Google.
- Price filters accept whole numbers only.
- "Buy on Google" checkout offers exist only in a few countries.
- Results can vary slightly between runs, because Google personalizes and tests its Shopping layout.
- Price monitoring compares with the last saved price for each product or offer. Several listings from the same marketplace seller for one product are matched in price order, so a reshuffle between them can show as two small changes. Items not seen for 180 days are forgotten.
Questions about Google Shopping Scraper
Is there a limit on the Apify Free plan?
Yes: up to $0.25 of this Actor's results per calendar month, enough to try it. Apify pays developers nothing for Free plan usage while our data costs are real, so this keeps the Actor sustainable. Runs that reach the allowance stop cleanly and keep everything collected so far; the allowance resets on the 1st of the month. Any paid Apify plan has no limit.
Is it legal to scrape Google Shopping?
This Actor collects publicly visible product listings and prices, which are not personal data. You are responsible for using the data in line with applicable laws and Google's terms. If you are unsure, ask a lawyer.
How fresh is the data?
Every run collects live data from Google Shopping at the time of the run. productDetails rows also include dataCollectedAt.
Why did I get fewer results than I asked for?
Google shows fewer products for narrow searches or strict price filters, and many products have only a few sellers. With Only deliver new or changed prices, unchanged rows are left out on purpose. You pay for the rows you get; a lookup that returned nothing (or very little) costs only its lookup minimum, $0.0028 in most cases. The run summary lists searches or products that returned nothing.
Why was I charged $0.0028 (or lookup-minimum events) for a search that returned nothing?
Each search or product lookup has a small collection cost even when Google returns nothing, so it has a minimum charge: $0.0028, plus $0.0025 per further started block of 40 search results or 10 seller offers. When a lookup's products, offers, details and price check add up to less, lookup-minimum events of $0.0001 top it up to that minimum, for example 28 events ($0.0028) for an empty search, or 4 events ($0.0004) for a search that delivered 1 product at $0.0024. Lookups that deliver normally, at least 2 products per started block of 40 search results, all offers Google returned for a product, or a details record, are never topped up. The run summary shows the number of top up events in lookupMinimumTopUps.
Is Apify platform usage included?
No. Apify bills platform usage (compute, storage) for this Actor separately. At the default 256 MB, a small run typically uses about $0.001 to $0.005.
How do I monitor prices over time?
Turn on Track price changes, give the list a Monitoring name and create an Apify Schedule (for example daily) with the same input. Each run compares with the last saved prices for that name, country and language. Add Only deliver new or changed prices to receive and pay for only the rows whose price moved (plus a $0.004 price check per search or product looked up, or the lookup minimum when that is higher), and connect a webhook or Slack/email integration to be alerted. Tip: Google Shopping search results reshuffle between requests (in our September 2026 test, two searches for the same term 20 minutes apart returned five different top products, so every row counted as new). For reliable price monitoring, monitor fixed products, put their product IDs into Seller offers or Product details mode, and use search mode to discover them.
How do I keep costs under control?
Set Maximum cost per run in the run options. The Actor checks the limit before each request (keeping enough for each request's lookup minimum) and stops delivering before exceeding it. Lower Products per search or Offers per product to collect less. Apify platform usage is billed separately by Apify and is not part of this limit's Actor charges.
Which export formats are available?
JSON, CSV, Excel, XML, HTML table and RSS from the Console or the API, plus ready table views (Products, Seller offers, Product details, Price changes).
How do I get the sellers of a product I found in a search?
Either set Seller offers for the first N products in search mode, or copy the productId values into Product links or IDs and run the Seller offers mode. Links of opened Google Shopping products (with catalogid: or /shopping/product/), plain product IDs and gid:/docid: identifiers all work.
Can I target a city, and are prices in local currency?
Yes. Use City or region (for example Chicago,Illinois,United States) or Coordinates. Prices and the currency field follow the chosen country or location. No proxies or Google account are needed.
How fast is it?
Runs with up to 50 searches or products usually finish in about a minute. Larger runs use economy processing, which can take up to about 45 minutes, and are sent in batches of 100 so results appear in the dataset early.
How do I get support or request a feature?
Open an issue in the Actor's Issues tab on Apify. We read every issue in the Issues tab and fix reported problems. Please include the run ID.
Run Google Shopping Scraper on Apify
The form opens with a working example. Free Apify accounts get a small monthly allowance.