Google Shopping Scraper – Prices, Merchants & Deals avatar

Google Shopping Scraper – Prices, Merchants & Deals

Pricing

from $1.00 / 1,000 products

Go to Apify Store
Google Shopping Scraper – Prices, Merchants & Deals

Google Shopping Scraper – Prices, Merchants & Deals

Scrape Google Shopping for any product search and country: title, price, old price, discount, merchant, delivery, rating and review count. Ideal for price monitoring and competitor research. $1.50 per 1,000 products.

Pricing

from $1.00 / 1,000 products

Rating

0.0

(0)

Developer

Steven Kramp

Steven Kramp

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

2 days ago

Last modified

Share

Google Shopping Scraper - Prices & Merchants

Collect Google Shopping product listings, prices and merchants as structured JSON for price monitoring and competitor research by keyword, country and language.

Start with a product search such as wireless headphones. Extract displayed prices, seller and delivery text, discounts and aggregate ratings when the parser recognizes them. Use repeated runs to collect snapshots; comparing snapshots and sending price alerts require your own workflow.

Pricing

The Actor submits a product billing event for each offer it writes to the dataset. The following documented reference rates, dated 8 October 2026, are not a verification of current live prices. Check the Pricing tab for the rates that apply to your account before starting a run.

Tier identifierUSD per productUSD per 1,000 products
FREE$0.0015$1.50
BRONZE$0.00135$1.35
SILVER$0.0012$1.20
GOLD$0.001$1.00

FREE is a tier identifier, not a promise of free product events. Illustrative product-event charges in USD, rounded to cents:

Returned productsFREEBRONZESILVERGOLD
40$0.06$0.05$0.05$0.04
1,000$1.50$1.35$1.20$1.00
10,000$15.00$13.50$12.00$10.00

These examples cover product events only. The same pricing reference documents a separate Actor Start rate of $0.00005 per run. A start charge can apply even when no products are returned. At those reference rates, Actor event charges are returned offers × tier rate + starts × start rate. These are not total-invoice estimates; confirm current rates, any other applicable charges and taxes in Apify. No product events are submitted when the Actor writes no offers.

How to use

  1. Enter product keywords in queries.
  2. Set country and language for your target market.
  3. Choose maxResultsPerQuery from 1 to 120 and start a run.
  4. Inspect the default dataset, counts and run log before using the results.
{
"queries": ["wireless headphones"],
"maxResultsPerQuery": 40,
"country": "us",
"language": "en"
}
InputMeaningDefault in the Actor
queriesList of product search strings; required by the input schema["wireless headphones"] when the list contains no non-blank query
maxResultsPerQueryMaximum offers returned per query, integer from 1 to 12040
countryString passed as Google's gl; use a country code such as us, gb or deus when omitted
languageString passed as Google's hl; use a language code such as en or deen when omitted

queries is required. Apify rejects an input without queries before the run starts, so no run is created and nothing is charged. If queries is present but empty or contains only blank strings, the Actor runs the example search ["wireless headphones"]. Omitted settings use 40, us and en. Such a run is a normal run and can incur charges.

Your own non-blank queries replace the example search. Query strings are trimmed and blank entries are ignored. Explicit null, incorrect field types, non-string query entries and limits outside 1–120 are rejected rather than silently replaced. Country and language are trimmed and lowercased; the input schema does not validate them against a list of supported markets. Use non-blank codes.

Example JSON output

This is an invented, illustrative dataset item, inside the array returned by the dataset API. Names, IDs, amounts and timestamp are fictional; the Google link is not a verified product.

[
{
"title": "Example Audio H40 Wireless Headphones",
"price": 39.99,
"priceText": "$39.99",
"oldPrice": null,
"currency": "USD",
"discount": null,
"badge": null,
"condition": "New",
"typicalPriceText": null,
"merchant": "Example Audio Store",
"moreMerchants": false,
"delivery": "Free delivery",
"rating": 4.5,
"reviewsCount": 120,
"productId": "123456789",
"offerId": "987654321",
"catalogId": "555555555",
"googleShoppingUrl": "https://www.google.com/shopping/product/555555555",
"query": "wireless headphones",
"position": 1,
"country": "us",
"language": "en",
"scrapedAt": "2026-10-22T10:00:00+00:00"
}
]
Output fieldsMeaning and limits
titleFirst title candidate longer than eight characters after filtering recognized price and status text; extraction is heuristic
price, priceTextNumeric conversion of the first recognized price token, plus its display text; failed conversion gives null, never an assumed zero
oldPriceNumeric conversion of the second recognized price token, if any; the parser does not verify that it is a previous price
currencySymbol/text-based inference; for example any $ is mapped to USD. This does not verify the actual currency for every market
discountFirst recognized discount or sale text, without calculating a discount percentage
badge, condition, typicalPriceTextFirst recognized status badge, condition token and usual-price text; source text is preserved, not normalized into standard categories
merchant, moreMerchantsMerchant text candidate and a boolean indicating recognized additional-seller text; not an exhaustive seller list. false does not prove there are no other sellers
deliveryFirst recognized delivery, shipping, pickup, stock or returns text; not a structured delivery promise
rating, reviewsCountParsed listing rating and review count, including recognized abbreviated counts; no individual reviews
productId, offerId, catalogIdGoogle card identifiers. offerId identifies offers for deduplication; catalogId may be null
googleShoppingUrlGoogle Shopping product link built from catalogId; null when that ID is absent. This is not a merchant checkout link
query, positionSearch query and sequential number of the returned offer for that query, after deduplication; not an absolute Google ranking
country, language, scrapedAtRequested market/language settings and UTC collection timestamp; these do not verify the actual market of each offer

Optional text and numeric fields can be null. Cards without a recognized title and price token are skipped. Parsing uses text patterns, especially English and German ones: visible data can be missed or misclassified after page changes or in other languages. Keep priceText and inspect samples before using numeric values for decisions.

Limits and troubleshooting

  • Queries run in order. The Actor requests search pages at offsets 0, 40 and 80, returning at most 120 offers per query. It stops earlier if the requested limit is reached or a page contains no new offers.
  • Offers are deduplicated by offerId within a page and across the run. An offer already returned for one query is omitted for later queries. A page containing only previously seen offers ends that query, even if later pages might contain new offers.
  • Empty pages without a detected block are checked once more with a new proxy session. Two such empty responses end that query normally. HTTP errors, detected blocks and HTTP-client errors are retried, up to four attempts per page. An exhausted page load is logged, the query stops and the Actor continues with the next query. A run can finish with partial data or an empty dataset; inspect logs as well as run status. Other exceptions can still fail a run.
  • Results come from Google Shopping search cards. The Actor does not crawl merchant websites or return images, checkout URLs or individual review text. It does not guarantee all offers, stock, checkout prices or coverage of every market.
  • Prices and delivery text are search-page snapshots. They do not establish total purchase cost or an exchange rate. Collecting 1,000 offers requires multiple queries or runs, with no guarantee that sufficient distinct offers exist.
  • This is a scraper available through Apify, not an official Google Shopping API or a Google-affiliated service.

If a query returns no data, compare the same search and market manually and inspect the logs. For technical problems, use the Actor's Issues tab with a minimal non-personal query and a description of the problem. Never include your API token.

API example with curl

Set APIFY_TOKEN in your environment, then run this example in a POSIX shell. It starts a billable Actor run and requests the default dataset as JSON:

curl --fail-with-body --request POST \
'https://api.apify.com/v2/actors/stevenkramp~google-shopping-scraper/run-sync-get-dataset-items?format=json' \
--header "Authorization: Bearer ${APIFY_TOKEN}" \
--header 'Content-Type: application/json' \
--data '{"queries":["wireless headphones"],"maxResultsPerQuery":40,"country":"us","language":"en"}'

For longer batches, start an asynchronous run and retrieve its dataset after completion. If a synchronous request times out, inspect the existing run before retrying to avoid starting another billable run.

Use with AI agents (MCP)

You can use the Actor through Apify's hosted MCP server with a compatible client:

https://mcp.apify.com?tools=stevenkramp/google-shopping-scraper

For example: "Collect Google Shopping listings for wireless headphones in Germany and compare the returned prices and merchants." Connect your Apify account in your client. These are normal Actor runs under your account and can incur charges. Inspect the returned data before relying on a comparison.

Privacy and responsible use

Use this tool for public product and business listing data. Do not submit personal data in queries or use results to build personal profiles or contact lists. Queries are included in the dataset; free-text fields can contain unexpected content. Review and remove personal data before storing or sharing results, keep datasets private unless you intend to publish them, and follow the applicable source and Apify terms.

More from stevenkramp