Use cases / Google Shopping API
Google Shopping price tracking
Last updated October 29, 2026. Response excerpts are recorded from the live API.
Who runs this, and what for
| Team | What they decide with it |
|---|---|
| Retailers | Which competitors head the cards for the products they sell too, and at what price. |
| Brands | Which stores discount their products, how deeply, and how often. |
| Pricing and category analysts | How prices and deals move across a category over a season. |
The calls, step by step
1. Choose queries and a country
Use the searches your shoppers type: a category, such as wireless earbuds, or a product name. country sets where the search is made from, which sets the stores and the currency. Keep both fixed between runs so changes come from Google, not your settings.
GET /v1/google-shopping?q=wireless+earbuds · query
{ "q": "wireless earbuds", "language": "en", "country": "us" }Recorded response. Live values differ. 2. Record each product card
One request returns the products Google shows for the query, usually 20 to 30. Each card has product_id, Google's id for the product across every store, plus the headline store in merchant, price, original_price and badge for a discount, delivery, and rating. When a card is priced from several stores, merchant is null and price is the lowest of them.
GET /v1/google-shopping?q=wireless+earbuds · results.0
{ "position": 1, "title": "JLab GO Air Pop True Wireless Earbuds", "product_id": "9146411353573113826", "price_text": "$14.99", "price": 14.99, "currency": "USD", "original_price_text": "$20", "original_price": 20, "badge": "24% OFF", "merchant": "Target", "more_merchants": true, "delivery": "Free delivery on $35+", "rating": 4.3, "ratings_count": 33000, "section": "Popular products" }Recorded response. Live values differ. 3. Compare day to day by product_id
product_id is stable between searches, so join today's snapshot to yesterday's on it. A changed merchant means another store now leads the card; a new badge or original_price marks a discount; a product that drops out of the results has lost its place for that query.
GET /v1/google-shopping?q=wireless+earbuds · results.1
{ "position": 2, "title": "Beats Solo Buds Wireless Earbuds", "product_id": "549048356659243400", "price_text": "$59.99", "price": 59.99, "currency": "USD", "original_price_text": "$80", "original_price": 80, "badge": "25% OFF", "merchant": "Best Buy", "more_merchants": true, "delivery": "Free delivery by Thu", "rating": 3.8, "ratings_count": 6200, "section": "Popular products" }Recorded response. Live values differ.
A script to start from
shopping_snapshot.py
# Daily Google Shopping snapshot for a set of product queries: which store
# heads each product card, at what price and discount.
import csv, datetime, os, requests
API = "https://api.clair.im"
HEADERS = {"Authorization": f"Bearer {os.environ['CLAIR_API_KEY']}"}
QUERIES = ["wireless earbuds", "air fryer", "robot vacuum"]
COUNTRY = "us" # sets the stores and the currency
def shopping(q):
r = requests.get(f"{API}/v1/google-shopping", headers=HEADERS, timeout=90,
params={"q": q, "country": COUNTRY})
r.raise_for_status()
return r.json()["results"]
today = datetime.date.today().isoformat()
with open("shopping.csv", "a", newline="") as f:
out = csv.writer(f)
for q in QUERIES:
for card in shopping(q):
out.writerow([today, q, card["position"], card["product_id"],
card["title"], card["price"], card["currency"],
card["original_price"], card["badge"],
card["merchant"], card["more_merchants"],
card["rating"], card["ratings_count"]])
Set CLAIR_API_KEY to your Clair key; one plan covers the Google Shopping API. Each call spends that API's rate from the plan's monthly balance.
What it costs per month
| Schedule | Requests | Plan | Per month | Per 1,000 |
|---|---|---|---|---|
| 100 queries, daily100 queries × 30 days. | 3,000 | Starter | $30 | $10 |
| 500 queries, daily500 queries × 30 days. | 15,000 | Standard | $100 | $6.67 |
| 200 queries in 5 countries, daily200 queries × 5 countries × 30 days. | 30,000 | Standard | $100 | $3.33 |
| 1,000 queries, twice a day1,000 × 2 × 30 days. | 60,000 | Advanced | $300 | $5 |
What to plan for
- Each card shows one store's offer. The full list of stores selling a product, with each price, is not returned.
- Google shows one page of products per query, so there is no second page to read. Narrow the query to see more of a category.
- Location is set per country. There is no city or postcode targeting, and delivery terms are those Google shows for the country.
- ratings_count is rounded as Google shows it: 6.2K is 6,200.
- There are no product images: Google embeds the thumbnails in the page rather than linking them.
- Google Shopping lists products from stores registered with Google Merchant Center. A product missing from the results may still be sold by stores that are not.
Common questions
Is there an official Google Shopping API?
Google's Merchant API is for merchants managing their own products and feeds. It does not return the shopping results other stores' products appear in.
Can I track one specific product?
Search for its name and match on product_id. The same id comes back on later searches, so a product you found once can be followed over time.
How is this different from Amazon price monitoring?
Amazon's API reads one marketplace in depth: every seller's offer and the Buy Box per ASIN. Google Shopping shows the cross-store view a shopper compares first, with less depth per product. Many teams track both.
Run it on your own products
$1 of usage a month free across every API, no card. Enough to run the pipeline on a short list before choosing a plan.

Glassdoor API
Crunchbase API
Instagram API
Bloomberg API
Associated Press API