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.
Endpoints & Pricing
One Product Search API, Four Engines
Choose Google, Yahoo, DuckDuckGo or Brave for dedicated product search. All four share one price per tier; Google answers in its own key names, the other three in one card-style shape.
Google Shopping (default)
- engine=google product search
- Google-style fields: link, source & price
- Thumbnail per product
- Sponsored flag and snippet field per row
- Country & language targeting
numfrom 1 to 100 per request — up tonum
Yahoo Shopping
- engine=yahoo product search
- Yahoo-style fields: url, merchant & price
- Thumbnail per product
- Separate currency field on every priced item
- Country & language targeting
numfrom 1 to 100 per request — up tonum
DuckDuckGo Shopping
- engine=ddg product search
- Card-style fields: url, merchant & price
- Thumbnail per product
- Separate currency field on every priced item
- Country & language targeting
numfrom 1 to 100 per request — up tonum
Brave Shopping
- engine=brave product search
- Card-style fields: url, merchant & price
- Thumbnail per product
- Separate currency field on every priced item
- Country & language targeting
numfrom 1 to 100 per request — up tonum
Quick Start
Call the Product Search API from cURL, Python or Node
One API call returns a structured list of products. Google is the default engine — pass engine=yahoo, engine=ddg, or engine=brave to switch.
# Search Google Shopping for nike running shoes curl "https://apiserpent.com/api/shopping?q=nike+running+shoes&engine=google&num=10" \ -H "X-API-Key: YOUR_API_KEY"
{
"success": true,
"query": "nike running shoes",
"type": "shopping",
"engine": "google",
"country": "us",
"results": {
"shopping": [
{
"position": 1,
"title": "Nike Vomero 18 Men's Road Running Shoes",
"link": "https://www.nike.com/...",
"source": "Nike",
"price": "$150.00",
"currency": "USD",
"thumbnail": "https://.../product.jpg",
"product_rating": 4.7,
"product_reviews": 128,
"sponsored": false,
"snippet": "A stable, responsive daily trainer..."
}
],
"totalResults": 10
},
"meta": {
"totalShopping": 10,
"elapsed": "4200ms",
"timestamp": "2026-08-04T10:30:00.000Z"
}
}
import os
import requests
resp = requests.get(
"https://apiserpent.com/api/shopping",
params={"q": "nike running shoes", "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"]:
# engine=google keys; yahoo/ddg/brave use url, merchant and extractedPrice instead
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: "nike running shoes", engine: "yahoo", 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); // Card-style keys (yahoo, ddg, brave). Rows without a price have extractedPrice === null. for (const p of data.results.shopping) { console.log(p.position, p.title, p.extractedPrice, p.currency, p.merchant, p.url); }
Price, currency and ratings are filled when the product listing shows them and null otherwise. engine=google returns link/source/product_rating; engine=yahoo, engine=ddg, and engine=brave return url/merchant/rating. Use format=simple for a lighter payload.
Data Fields
Structured Product Data from Every Engine
Each product result includes the fields you need for price monitoring, SKU matching, and ecommerce research.
Product Fields
- shopping[].position
- shopping[].title
- shopping[].price, .extractedPrice
- shopping[].currency
- shopping[].merchant
- shopping[].store
- shopping[].url
- shopping[].thumbnail
- shopping[].rating
- shopping[].reviews
Request Parameters
- q (product query)
- engine (google | yahoo | ddg | brave)
- num (1–100; up to num)
- country (localization)
- language (2-letter code)
- format (full | simple)
Engine Comparison
- Google: engine=google (default)
- Yahoo: engine=yahoo
- DuckDuckGo: engine=ddg
- Brave: engine=brave
- Same price per tier on all four
- One API key, one endpoint
Use Cases
- Competitive price monitoring
- SKU & product matching
- Ecommerce market research
- Product feed validation
- Price-drop alerting
FAQ
Shopping API Questions
format=simple to get just position, title, price, merchant, URL, and thumbnail.
engine=google (default), engine=yahoo, engine=ddg, and engine=brave. Google returns Google-style fields (link, source, product_rating); the other three return card-style fields (url, merchant, store, rating, reviews). All four share the same pricing, so you can compare product availability across engines with the same call shape.
price, extractedPrice and currency 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) is a dedicated product search endpoint: every row is shaped as a product, with price, currency and store fields. The Web SERP API (/api/search) returns organic search results, which may include a Shopping carousel or product listings section among other SERP features. Use the dedicated endpoint when you want product data specifically.
Start using the Shopping Search API
One free run per day without signing up — a free account adds 10 free calls shared across services. Product search on Google, Yahoo, DuckDuckGo and Brave from $0.18 per 1,000 calls.
Get an API Key Documentation







