How it will work: 3 steps
- Follow us on ApifyThe tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run.
- Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example:
wireless earbudsin Product searches. Each start is one run. - Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.
This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.
What it does
Add product searches, pick a country, and get Google Shopping results as one row per product: title, price as a number with currency, store, rating, reviews and the Google product link. Turn on offers to get the price of every store that sells the product.
- product card: position, title, price (number), price text, old price, currency (ISO code), store, "& more stores" flag, rating, number of reviews, delivery and returns notes, condition, Google product IDs and the Google product page link;
- offers (optional): for each product, the list of stores from the Google product page, with price, currency, availability, store rating, delivery, returns and a link.
Good for
- Check prices of your products and competitors in one country.
- See which stores sell a product and for how much.
- Collect product lists for a category or keyword with ratings and reviews.
- Watch price changes with a daily or weekly schedule.
Not a good fit
- One Google Shopping page per search: up to 60 products. Google does not give more pages in this format.
- No sorting or price filters: Google ignores them for this kind of request.
- No product images: Google puts small images inside the page code, not as links.
- Rating and reviews are as shown on the Google product card. For some products Google shows the rating of one store listing, so it can differ from other sites.
- The local-currency check covers 61 countries. In other countries results are saved as Google shows them.
- Store links in offers are Google redirect links (
google.com/goto?...), not direct store URLs. - In the EU (for example France), Google often does not open the product page. Products are still saved, but their offers are
nulland the row status ispartial(see Troubleshooting).
Who uses it
Ecommerce managers
Check your prices against competitors in one country.
Brand teams
See which stores sell your product and for how much.
Market researchers
Collect product lists for a category with ratings and reviews.
Price
Prices will be shown after release.
Questions
Do I need a Google account?
No. No Google login or API key is needed.
How many products per search?
Up to 60, the size of one Google Shopping page.
Can I sort or filter by price?
No. Google ignores these for this kind of request.
Are store links direct?
No. Store links in offers are Google redirect links.
Which countries work?
You can choose any country from the list, but Google Shopping does not work in every country. Tests used the US, UK, Germany, Canada, France and Australia. In 61 countries (for example the US, UK, Canada, Australia, the euro area, Japan, India and Brazil) the Actor checks that prices are in the local currency; if Google answers for another country, it tries again from a new IP address. In other countries it saves the results as Google shows them and writes COUNTRY_NOT_CHECKED in the RUN_SUMMARY warnings.
Why is price a number?
So you can sort and compare. The price as shown is in priceText, and the currency code is in currency.
What does null mean?
Google did not show that value, for example no rating or no old price. It is not zero and not an error.
Details
Step by step on Apify
- Open the Input tab.
- In Product searches (
queries), keep the prefilledwireless earbudsor add your own phrases, one per line. - Keep Country
us(default) or choose another country. - Keep Products per search (
maxItems) at10(prefill), or set up to60. - Click Start.
- Open the Output tab and check
title,price,currency,merchantandrating.
Use cases
| Task | Input | You get | Key fields | Next step |
|---|---|---|---|---|
| Price monitoring | queries (product names or models), countryCode | product row | price, currency, merchant, oldPrice | Schedule + Google Sheets or API |
| Store comparison | queries, includeOffers: true | product row with offers | offers[].merchant, offers[].price, offers[].availability | Export JSON / Excel |
| Category research | queries (category words), maxItems: 60 | product row | title, rating, reviewsCount, position | Export CSV |
| Country check | same queries, different countryCode | product row | price, currency, countryCode | Compare in a spreadsheet |
Tips for better results
- Turn on offers only when you need store prices. It adds about 5 seconds per product.
- Run the same searches on a schedule to track price changes.
- Raise the timeout for big runs. For 200 searches, set about 1,200 seconds.
Limits and good to know
- A phrase with no products costs one search page: Google was asked and answered
errorrows are free. Products withpartialstatus (offers not loaded) are charged as a product, not as offers- If you set a maximum charge for the run, the Actor stops before it, keeps the rows and ends with status CAPPED
- Up to 200 phrases and 60 products per phrase in one run. A test with 200 phrases and 60 products each (about 10,000 rows) took about 14 minutes
- The default timeout is 300 seconds: enough for about 30 phrases without offers (in tests, 10 US phrases took about 60 seconds and 50 German phrases about 160 seconds), or about 50 products with offers. For bigger runs set a longer timeout (for 200 phrases, 1,200 seconds). At the time limit the run stops with status CAPPED and keeps all rows
- With offers on, each product needs one more Google page, about 5 seconds per product
For developers
Sample result
One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.
{
"query": "wireless earbuds",
"position": 1,
"title": "JLab Go Air Pop True Wireless Earbuds",
"price": 17.99,
"priceText": "$17.99",
"oldPrice": 27,
"currency": "USD",
"condition": null,
"merchant": "Best Buy",
"moreMerchants": true,
"rating": 4.3,
"reviewsCount": 33000,
"delivery": "Free delivery",
"returns": null,
"productUrl": "https://www.google.com/search?q=JLab+Go+Air+Pop+True+Wireless+Earbuds&udm=28&ibp=oshop&prds=catalogid%3A8372463217625314514%2Cgpcid%3A9146411353573113826%2CheadlineOfferDocid%3A452194635528668653%2CproductDocid%3A10114522055954158630&gl=us&hl=en&uule=w+CAIQICINVW5pdGVkIFN0YXRlcw",
"offers": null,
"offersCount": null,
"ids": {
"catalogId": "8372463217625314514",
"gpcId": "9146411353573113826",
"offerDocId": "452194635528668653",
"productDocId": "10114522055954158630"
},
"countryCode": "us",
"languageCode": "en",
"searchUrl": "https://www.google.com/search?q=wireless+earbuds&tbm=shop&hl=en&gl=us&uule=w+CAIQICINVW5pdGVkIFN0YXRlcw",
"status": "complete",
"statusReason": null,
"errorCode": null,
"fetchedAt": "2026-10-15T05:53:19.024Z"
}Data fields (25)
| Field | Type | Meaning |
|---|---|---|
query | string | Your product search. |
position | integer | Place of the product on the Google Shopping page (1 = first); null on not_found/error rows. |
title | string | Product name as Google shows it. |
price | number | Price as a number in the listed currency, e.g. 299. Null when Google shows no price. |
priceText | string | Price exactly as shown, e.g. "$299.00" or "24,90 €". |
oldPrice | number | Earlier price when Google shows a discount ("was $90"); null otherwise. |
currency | string | ISO currency code from the price symbol and country, e.g. USD, EUR; null when it is not clear. |
condition | string | Condition label when Google shows one ("Used", "Refurbished"); null for new items. |
merchant | string | Store that Google shows on the card. |
moreMerchants | boolean | True when the card says "& more": other stores also sell this product. |
rating | number | Product rating 0–5; null when Google shows none. |
reviewsCount | integer | Number of product reviews (as rounded as Google shows it, e.g. "3K" = 3000); null when none. |
delivery | string | Delivery text, e.g. "Free delivery by Mon". |
returns | string | Returns text, e.g. "30-day returns". |
productUrl | string | Google Shopping product page with the stores that sell it. |
offers | array | Stores selling the product (only with "Include offers"): merchant, price, availability, delivery, returns, store rating, Google link to the store page. Null when not requested or not loaded; [] when Google lists no offers. |
offersCount | integer | Number of offers loaded; null when offers were not loaded. |
ids | object | Google product ids: catalogId, gpcId, offerDocId, productDocId (any may be null). |
countryCode | string | Google country used (gl). |
languageCode | string | Google language used (hl). |
searchUrl | string | Google Shopping page that was scraped. |
status | string | complete = a product; partial = a product whose store offers could not be loaded (no offers charge); not_found = Google Shopping returned no products for the search; error = the search could not be scraped. not_found and error rows add no product charge; a not_found search still counts as one loaded search page. |
statusReason | string | Plain-English reason for partial/not_found/error rows, or a note on a product. |
errorCode | string | Machine code, e.g. SOURCE_BLOCKED, DEADLINE_REACHED. |
fetchedAt | string | When the page was scraped (ISO 8601). |
Input settings (5)
The main fields of the input form. With the API you send them as JSON.
| Setting | Name in the API | Type | Example value |
|---|---|---|---|
| Product searches required | queries | array | ["wireless earbuds"] |
| Country | countryCode | string | "us" |
| Language | languageCode | string | "en" |
| Products per search | maxItems | integer | 10 |
| Include offers from other stores | includeOffers | boolean | false |
Use cases with this tool
Each guide shows all the steps and the other tools.


