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
The Actor
Run it with the Apify CLI
Scrape the first page for a product query in the US:
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:
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
- Build the query.
q is the only required field: a product, brand, or category phrase.
- 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.
- 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.
- 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.
- Estimate cost, then confirm with the user if the run is large. See
references/gotchas.md.
- 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
1---2name: apify-scrape-google-shopping3description: 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.4license: MIT5---67# Google Shopping Scraping: Product Listings to Structured JSON89Scrape 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.1011## When to use this skill1213- The user wants to scrape Google Shopping results (to JSON, CSV, a sheet, or a database).14- They want product listings and prices for a query, brand, or category as a dataset.15- They want Google Shopping data for research, catalog building, or price comparison.16- They ask for "google shopping scraping", "google shopping data", or "product data extraction".1718Not 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).1920## What you get (one dataset item per page, about 40 products each)2122Each dataset item is one page of results, with the products nested in `shopping_results`:2324- 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).25- 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).26- 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).2728## Prerequisites2930- Apify account (sign up at https://apify.com?fpr=9n7kx3&fp_sid=skillrepo).31- Authentication via `apify login`, or an `APIFY_TOKEN` environment variable (Apify Console, Settings, Integrations).3233## The Actor3435- Store page: https://apify.com/johnvc/google-shopping-api-google-shopping-products-prices-deals?fpr=9n7kx3&fp_sid=skillrepo36- Actor ID: `johnvc/google-shopping-api-google-shopping-products-prices-deals`37- Pricing: pay per page of results processed, plus a small per-run setup fee (see `references/gotchas.md`).3839## Run it with the Apify CLI4041Scrape the first page for a product query in the US:4243```bash44apify actors call "johnvc/google-shopping-api-google-shopping-products-prices-deals" -i '{"q":"wireless headphones","gl":"us","hl":"en","max_pages":1}' \45 --json \46 --user-agent apify-awesome-skills/apify-scrape-google-shopping \47 2>/dev/null48```4950Scrape a price band in the UK, cheapest first, two pages:5152```bash53apify 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}' \54 --json \55 --user-agent apify-awesome-skills/apify-scrape-google-shopping \56 2>/dev/null57```5859Every call carries the three flags this repo expects: `--json`, `--user-agent apify-awesome-skills/apify-scrape-google-shopping`, and `2>/dev/null`.6061## Run it from Claude or another AI agent (MCP)6263The Actor is MCP-ready. Add the hosted server URL:6465`https://mcp.apify.com/?tools=actors,docs,johnvc/google-shopping-api-google-shopping-products-prices-deals`6667Then 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/mcp6869## Workflow70711. Build the query. `q` is the only required field: a product, brand, or category phrase.722. 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.733. 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.744. 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.755. Estimate cost, then confirm with the user if the run is large. See `references/gotchas.md`.766. 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`.7778## Inputs7980- `q` (string, required): product, brand, or category to search for81- `location` (string): geographic location, for example "Austin, Texas, United States"82- `gl` (string): two-letter country code, for example "us", "uk", "de"83- `hl` (string): two-letter language code, for example "en", "es", "de"84- `google_domain` (string, default `google.com`)85- `device` (enum: desktop, tablet, mobile; default desktop)86- `min_price` plus `max_price` (numbers): price band in the local currency87- `sort_by` (integer): 1 = price low to high, 2 = price high to low88- `free_shipping` plus `on_sale` (booleans, default false): restrict listings89- `max_pages` (integer, default 1): pages to fetch, 0 = all available9091## Cost9293Billing 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`.9495## Honest limits9697- Each dataset item is one page, not one product; flatten `shopping_results` client-side before exporting to CSV.98- `product_link` points at the Google Shopping product page, not always the retailer's own site.99- `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`.100- `rating`, `reviews`, `snippet`, `delivery`, and sale fields appear only when Google shows them for that listing.101- The `filters` array comes back on the first page only.102103## Troubleshooting104105- Empty `shopping_results`: broaden the query, or loosen filters; `on_sale` plus `free_shipping` together can zero out a niche query.106- Fewer than 40 products on a page: normal near the end of the inventory; check `search_metadata.pagination_limit_reached`.107- Prices in the wrong currency: set `gl`, `hl`, and `google_domain` together for the target market.108- Run seems slow with `max_pages: 0`: some queries have many pages; set an explicit `max_pages` cap instead.109110See `references/gotchas.md` for cost guardrails and error recovery, and `references/actor-index.md` for the Actor routing table.111112## Related product-data Actors113114- Google Shopping Lite API, lower-cost quick price lookups: https://apify.com/johnvc/google-shopping-lite-api?fpr=9n7kx3&fp_sid=skillrepo115- Google Immersive Product API, full product-page detail per listing: https://apify.com/johnvc/google-immersive-product-api?fpr=9n7kx3&fp_sid=skillrepo116- Google Images API, clean product image URLs: https://apify.com/johnvc/google-images-api?fpr=9n7kx3&fp_sid=skillrepo