Try it
Run a live shopping search
One free run per day without signing up — a free account adds 10 free calls shared across services.
Google Shopping Data
Google Shopping API: Product Results as JSON
Price monitoring, SKU matching and ecommerce research all start from the same thing: the products a search shows for a query, as data rather than pixels. Send a product query to /api/shopping with engine=google and you get them back as a ranked JSON list, one row per product.
Each row carries the title, the price as the listing shows it plus a numeric price and a currency code, the store, a product link and an image, with rating and review count where the listing has them. engine=google answers in Google-style keys — link, source, extracted_price, product_rating, product_reviews — while yahoo, ddg and brave share one card-style shape (url, merchant, store, extractedPrice, rating, reviews).
# Google Shopping: "sony headphones" curl "https://apiserpent.com/api/shopping?q=sony+headphones&engine=google&num=10&country=us" \ -H "X-API-Key: YOUR_API_KEY"
import os
import requests
resp = requests.get(
"https://apiserpent.com/api/shopping",
params={"q": "sony headphones", "engine": "google", "num": 10, "country": "us"},
headers={"X-API-Key": os.environ["SERPENT_API_KEY"]},
timeout=60,
)
data = resp.json()
if not data.get("success"):
raise SystemExit(data.get("message"))
for p in data["results"]["shopping"]:
# extracted_price is the price as a number (None when the listing shows no price)
print(p["position"], p["title"], p["extracted_price"], p["currency"], p["source"], p["link"])
// Node 18+ has fetch built in. Save as shopping.mjs and run: node shopping.mjs const params = new URLSearchParams({ q: "sony headphones", engine: "google", num: "10", country: "us" }); const res = await fetch(`https://apiserpent.com/api/shopping?${params}`, { headers: { "X-API-Key": process.env.SERPENT_API_KEY }, }); const data = await res.json(); if (!data.success) throw new Error(data.message); // Cheapest priced product first; rows without a price are kept out of the sort. const priced = data.results.shopping.filter((p) => p.extracted_price != null); priced.sort((a, b) => a.extracted_price - b.extracted_price); for (const p of priced) console.log(p.extracted_price, p.currency, p.title, p.source);
{
"success": true,
"query": "sony headphones",
"type": "shopping",
"engine": "google",
"country": "us",
"results": {
"shopping": [
{
"position": 1,
"title": "Sony WH-1000XM5 Wireless Noise Cancelling Headphones",
"link": "https://www.example-store.com/sony-wh-1000xm5",
"source": "Example Store",
"price": "$329.99",
"extracted_price": 329.99,
"currency": "USD",
"thumbnail": "https://www.example-store.com/images/wh-1000xm5.jpg",
"product_rating": 4.7,
"product_reviews": 2143,
"sponsored": false
}
],
"totalResults": 10
},
"meta": {
"totalShopping": 10,
"elapsed": "2900ms",
"timestamp": "2026-10-22T10:30:00.000Z"
}
}
Price, currency, rating and review count are filled when the product listing shows them and null otherwise. Use format=simple for a lighter row of position, title, price, store, link and image.
Google Shopping API vs. the Web SERP API
The Web SERP API (/api/search?engine=google) returns organic search results and the other blocks of a results page. When you specifically want product rows — for price feeds, SKU matching or price-drop monitoring — use the dedicated Shopping endpoint (/api/shopping?engine=google) instead: every row is shaped as a product, with price, currency and store fields.
The Content API for Shopping sunset, and what it means
In 2025 Google announced the Merchant API as the successor to the Content API for Shopping, with the Content API shut down on August 18, 2026. The Merchant API handles feed management for merchants who list their own products on Google — uploading, updating and syncing product data in Merchant Center. It is a management API, not a way to read product results for an arbitrary query.
For product data — monitoring competitors, tracking prices, researching what a product search shows — a Shopping search API is the complementary piece: merchants manage their feeds with the Merchant API; developers read product results with a Shopping API.
Data Fields & Pricing
Structured Google Shopping Product Data
Every product row carries the fields price monitoring, product matching and ecommerce research need, at one flat rate per call.
Product Fields
- shopping[].position
- shopping[].title
- shopping[].price
- shopping[].extracted_price
- shopping[].currency
- shopping[].source
- shopping[].link
- shopping[].thumbnail
- shopping[].product_rating
- shopping[].product_reviews
Request Parameters
- q (product query, required)
- engine=google
- num (1–100; up to num)
- country (2-letter code)
- language (2-letter code)
- format (full | simple)
Use Cases
- Google price monitoring
- Product & SKU matching
- Competitor price tracking
- Ecommerce market research
- Price-drop alerting
Shopping pricing
- Default: $0.35/1K calls
- Growth: $0.32/1K calls
- Scale: $0.25/1K calls
- Enterprise: $0.21/1K calls
- Enterprise Plus: $0.18/1K calls
- Same rate on all four engines
- Credits never expire
FAQ
Google Shopping API Questions
/api/shopping with engine=google returns a ranked list of products as JSON: position, title, price as shown plus a numeric price and currency code, the store, the product link, an image, and rating and review count where the listing shows them. num sets how many rows you want, from 1 to 100 (20 when you leave it out). You get up to num and a short answer says so. format=simple trims each row to position, title, price, store, link and image.
price holds the listing’s own text, the numeric field holds the amount and currency the currency code. When a listing shows no price, those fields are null and the row is still returned; rating and review count follow the same rule. A query that is not about a buyable product can come back with few or no priced rows, so filter on the numeric price before you compare anything.
/api/shopping?engine=google) is a dedicated product endpoint: every row is shaped as a product, with price, currency and store fields. The Web SERP API (/api/search?engine=google) returns organic search results and the other blocks of a results page. Use the Shopping endpoint when you want product data specifically.
country code and an optional 2-letter language code to aim the product search at a market. Prices come back in local currency, with the currency code in its own field, so you do not have to parse a currency symbol.
Start using the Google Shopping API
One free run per day without signing up — a free account adds 10 free calls shared across services. Google Shopping product results from $0.18 per 1,000 calls, the same rate on every engine.
Get an API Key API Documentation



