Google Shopping API
Product listings from Google Shopping — prices, ratings, sellers, delivery information and discount tags — filterable by price range, sale status, free shipping and device, and localizable to any market with multi-page pagination.
MEDIAN LAGon demand
PARAMETERS12
TOTAL USERS97
MONTHLY ACTIVE36
RUNS SUCCEEDED99.9%
RATING5.0 (3)
Input parameters
| PARAMETER | TYPE | REQ | DEFAULT | DESCRIPTION |
|---|---|---|---|---|
| q | string | yes | — | Product or keyword, e.g. 'wireless headphones' |
| location | string | no | — | Localizes results, e.g. 'Austin, Texas, United States' |
| gl | string | no | — | Two-letter country code: us, uk, de, fr, ca, au … |
| hl | string | no | — | Two-letter language code: en, es, de, fr, ja … |
| google_domain | string | no | google.com | google.co.uk, google.de, google.fr … |
| device | enum | no | desktop | desktop · tablet · mobile — results and prices can differ |
| min_price | number | no | — | Floor in local currency |
| max_price | number | no | — | Ceiling in local currency |
| sort_by | integer | no | — | 1 = price ascending, 2 = price descending, blank = relevance |
| free_shipping | boolean | no | false | Only offers with free shipping |
| on_sale | boolean | no | false | Only discounted offers |
| max_pages | integer | no | 1 | ~40 products per page. 0 = no limit. — drives your bill |
Worked examples
{ "q": "wireless headphones" }
{
"q": "mechanical keyboard",
"min_price": 80,
"max_price": 250,
"sort_by": 1
}
{
"q": "running shoes",
"on_sale": true,
"free_shipping": true
}
{
"q": "espresso machine",
"google_domain": "google.co.uk",
"gl": "uk",
"hl": "en"
}
{
"q": "iphone 15 case",
"device": "mobile",
"max_pages": 3
}
POWER-USER TIP
Device changes the result set — Google serves different listings and occasionally different prices to mobile. If you are tracking a competitor's shelf price, pin device explicitly rather than accepting the desktop default, and keep it constant across the series.
Coverage
40
products per page — approximately, before pagination
3
device profiles — desktop · tablet · mobile
5
filter axes — price floor · price ceiling · sale · free shipping · sort order
Tasks
Saved runs with the inputs already filled in — each one a standalone page and a working configuration example.
Code
curl
curl -X POST "https://api.apify.com/v2/acts/johnvc~google-shopping-api-google-shopping-products-prices-deals/run-sync-get-dataset-items" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"q":"wireless headphones","min_price":50,"max_pages":2}'
Python
from apify_client import ApifyClient
client = ApifyClient("APIFY_TOKEN")
run = client.actor("johnvc/google-shopping-api-google-shopping-products-prices-deals").call(
run_input={"q": "running shoes", "on_sale": True, "free_shipping": True}
)
for p in client.dataset(run.default_dataset_id).iterate_items():
print(p.get("title"), p.get("price"), p.get("source"))
What people use it for
- Competitor price monitoring
- MAP compliance checking
- Assortment and shelf-share analysis
- Deal aggregation and affiliate feeds
- Dynamic repricing inputs
- Market entry pricing research