# Apify Scrape Google Shopping

> Google Shopping scraping into structured JSON with the Apify Google Shopping API Actor (johnvc/google-shopping-api-google-shopping-products-prices-deals). Give a product search query plus optional country, language, and price filters, and get about 40 products per page with title, source seller, price, extracted_price, old_price on sale items, rating, reviews, delivery, thumbnail, and product_link. Use when the user wants to scrape Google Shopping, export Google Shopping results to JSON or CSV, build a product prices dataset, pull listings for a product or category, or asks for google shopping scraping, google shopping data, or product data extraction from Google Shopping. Pay-per-page billing, MCP-ready for Claude and other AI agents.

- Skill: `johnisanerd/apify-scrape-google-shopping` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add johnisanerd/apify-scrape-google-shopping`
- Raw SKILL.md: https://api.skillmd.com/api/skills/johnisanerd/apify-scrape-google-shopping/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Data & Analytics
- License: MIT
- Author: johnisanerd (https://skillmd.com/u/johnisanerd)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/johnisanerd/apify-scrape-google-shopping

---


# Google Shopping Scraping: Product Listings to Structured JSON

Scrape Google Shopping into clean JSON with the Apify Google Shopping API. Give it a product query and optional filters, and get about 40 products per page: title, seller, current price, sale price versus old price, rating, review count, delivery note, thumbnail, and a product link.

## When to use this skill

- The user wants to scrape Google Shopping results (to JSON, CSV, a sheet, or a database).
- They want product listings and prices for a query, brand, or category as a dataset.
- They want Google Shopping data for research, catalog building, or price comparison.
- They ask for "google shopping scraping", "google shopping data", or "product data extraction".

Not for: recurring price monitoring or deal alerts (use the ecommerce-intelligence skill), deep per-seller offers and specs for one product (use the Google Immersive Product API), or cheap high-volume price checks with fewer fields (use the Google Shopping Lite API).

## What you get (one dataset item per page, about 40 products each)

Each dataset item is one page of results, with the products nested in `shopping_results`:

- Always present per product: `position`, `title`, `product_id`, `product_link`, `source` (seller name), `price` (display string), `extracted_price` (number), `thumbnail`, `immersive_product_page_token` (hand it to the Google Immersive Product API for full product detail), `multiple_sources` (boolean, true when several sellers list the product).
- Present when Google shows them: `rating`, `reviews`, `snippet`, `delivery` (string such as "Free delivery on $35+"), `extensions` (badge strings such as "62% OFF"), `tag` (sale badge), `old_price` plus `extracted_old_price` (sale items only), `second_hand_condition` (used or refurbished listings).
- Page level: `search_parameters` (`q`, `gl`, `hl`, `device`, `max_pages`), `search_metadata` (`results_count`, `pages_processed`, `max_pages_set`, `pagination_limit_reached`), `search_timestamp`, `page_number`, and `filters` (Google's own filter chips, first page only).

## Prerequisites

- Apify account (sign up at https://apify.com?fpr=9n7kx3&fp_sid=skillrepo).
- Authentication via `apify login`, or an `APIFY_TOKEN` environment variable (Apify Console, Settings, Integrations).

## The Actor

- Store page: https://apify.com/johnvc/google-shopping-api-google-shopping-products-prices-deals?fpr=9n7kx3&fp_sid=skillrepo
- Actor ID: `johnvc/google-shopping-api-google-shopping-products-prices-deals`
- Pricing: pay per page of results processed, plus a small per-run setup fee (see `references/gotchas.md`).

## Run it with the Apify CLI

Scrape the first page for a product query in the US:

```bash
apify actors call "johnvc/google-shopping-api-google-shopping-products-prices-deals" -i '{"q":"wireless headphones","gl":"us","hl":"en","max_pages":1}' \
  --json \
  --user-agent apify-awesome-skills/apify-scrape-google-shopping \
  2>/dev/null
```

Scrape a price band in the UK, cheapest first, two pages:

```bash
apify actors call "johnvc/google-shopping-api-google-shopping-products-prices-deals" -i '{"q":"coffee machine","gl":"uk","hl":"en","google_domain":"google.co.uk","min_price":50,"max_price":200,"sort_by":1,"max_pages":2}' \
  --json \
  --user-agent apify-awesome-skills/apify-scrape-google-shopping \
  2>/dev/null
```

Every call carries the three flags this repo expects: `--json`, `--user-agent apify-awesome-skills/apify-scrape-google-shopping`, and `2>/dev/null`.

## Run it from Claude or another AI agent (MCP)

The Actor is MCP-ready. Add the hosted server URL:

`https://mcp.apify.com/?tools=actors,docs,johnvc/google-shopping-api-google-shopping-products-prices-deals`

Then ask, for example: "Scrape Google Shopping for standing desks under $400 in the US and export the listings as JSON." MCP setup docs: https://docs.apify.com/platform/integrations/mcp

## Workflow

1. Build the query. `q` is the only required field: a product, brand, or category phrase.
2. Localize. Set `gl` (country code), `hl` (language code), and for non-US markets `google_domain` and optionally `location` together, so prices come back in the right currency.
3. Filter. `min_price` and `max_price` bound the price band, `sort_by` (1 = low to high, 2 = high to low) orders it, and `free_shipping` or `on_sale` restrict to those listings.
4. Bound the volume. `max_pages` is the cost cap: each page is about 40 products, default 1. Avoid `max_pages: 0` (fetch everything) unless the user explicitly wants it.
5. Estimate cost, then confirm with the user if the run is large. See `references/gotchas.md`.
6. Run the Actor and read the dataset. Flatten `shopping_results` into one row per product for CSV or a sheet, and dedupe on `product_id`.

## Inputs

- `q` (string, required): product, brand, or category to search for
- `location` (string): geographic location, for example "Austin, Texas, United States"
- `gl` (string): two-letter country code, for example "us", "uk", "de"
- `hl` (string): two-letter language code, for example "en", "es", "de"
- `google_domain` (string, default `google.com`)
- `device` (enum: desktop, tablet, mobile; default desktop)
- `min_price` plus `max_price` (numbers): price band in the local currency
- `sort_by` (integer): 1 = price low to high, 2 = price high to low
- `free_shipping` plus `on_sale` (booleans, default false): restrict listings
- `max_pages` (integer, default 1): pages to fetch, 0 = all available

## Cost

Billing is per page of results processed (about 40 products per page) plus a small one-time setup fee per run. A default one-page run is a few cents; a five-page run (about 200 products) stays near a dime. Estimate first and confirm large runs; live prices and thresholds are in `references/gotchas.md`.

## Honest limits

- Each dataset item is one page, not one product; flatten `shopping_results` client-side before exporting to CSV.
- `product_link` points at the Google Shopping product page, not always the retailer's own site.
- `multiple_sources` is a boolean flag, not a list of sellers; for per-seller offers on one product, chain the Google Immersive Product API using `immersive_product_page_token`.
- `rating`, `reviews`, `snippet`, `delivery`, and sale fields appear only when Google shows them for that listing.
- The `filters` array comes back on the first page only.

## Troubleshooting

- Empty `shopping_results`: broaden the query, or loosen filters; `on_sale` plus `free_shipping` together can zero out a niche query.
- Fewer than 40 products on a page: normal near the end of the inventory; check `search_metadata.pagination_limit_reached`.
- Prices in the wrong currency: set `gl`, `hl`, and `google_domain` together for the target market.
- Run seems slow with `max_pages: 0`: some queries have many pages; set an explicit `max_pages` cap instead.

See `references/gotchas.md` for cost guardrails and error recovery, and `references/actor-index.md` for the Actor routing table.

## Related product-data Actors

- Google Shopping Lite API, lower-cost quick price lookups: https://apify.com/johnvc/google-shopping-lite-api?fpr=9n7kx3&fp_sid=skillrepo
- Google Immersive Product API, full product-page detail per listing: https://apify.com/johnvc/google-immersive-product-api?fpr=9n7kx3&fp_sid=skillrepo
- Google Images API, clean product image URLs: https://apify.com/johnvc/google-images-api?fpr=9n7kx3&fp_sid=skillrepo

