# 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).

- Page: https://cheapapilabs.com/actors/google-shopping-scraper/
- Run on Apify: https://apify.com/cheapapi/google-shopping-scraper
- Publisher: CheapAPI Labs (Apify username cheapapi)
- Main price: $2.40 per 1,000 products on Free, $2.00 on Gold
- Our prices updated: 2026-10-30

## Prices per event (USD)

| Event | Free | Bronze | Silver | Gold |
|---|---:|---:|---:|---:|
| Product | $0.0024 | $0.0024 | $0.0024 | $0.002 |
| Product with seller offers | $0.004 | $0.004 | $0.004 | $0.004 |
| Seller offer | $0.0005 | $0.00043 | $0.00039 | $0.00032 |
| Buy on Google offers add on | $0.003 | $0.003 | $0.003 | $0.003 |
| Product details | $0.014 | $0.00405 | $0.00405 | $0.00405 |
| Price check (only changes monitoring) | $0.004 | $0.004 | $0.004 | $0.004 |
| Lookup minimum top up | $0.0001 | $0.0001 | $0.0001 | $0.0001 |

Platinum and Diamond pay the Gold price. Apify platform usage: billed separately by Apify.

## Call it from code

```bash
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"}'
```

## Example output row

```json
{
  "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"
}
```

## Fields

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) |

## Compared 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.

## 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.

## FAQ

**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.
