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.
Yahoo Shopping Data
Yahoo Shopping Search API: One Call per Product Query
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=yahoo 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. yahoo, ddg and brave share one card-style shape (url, merchant, store, extractedPrice, rating, reviews), while engine=google answers in Google-style keys (link, source, extracted_price, product_rating).
engine=yahoo. /api/shopping?q=<query>&engine=yahoo is a Yahoo Shopping search; without an engine the endpoint returns Google Shopping results.# Yahoo Shopping: "iphone 15 case" curl "https://apiserpent.com/api/shopping?q=iphone+15+case&engine=yahoo&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": "iphone 15 case", "engine": "yahoo", "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"]:
# extractedPrice is the price as a number (None when the listing shows no price)
print(p["position"], p["title"], p["extractedPrice"], p["currency"], p["merchant"], p["url"])
// Node 18+ has fetch built in. Save as shopping.mjs and run: node shopping.mjs const params = new URLSearchParams({ q: "iphone 15 case", 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); // Cheapest priced product first; rows without a price are kept out of the sort. const priced = data.results.shopping.filter((p) => p.extractedPrice != null); priced.sort((a, b) => a.extractedPrice - b.extractedPrice); for (const p of priced) console.log(p.extractedPrice, p.currency, p.title, p.merchant);
{
"success": true,
"query": "iphone 15 case",
"type": "shopping",
"engine": "yahoo",
"country": "us",
"results": {
"shopping": [
{
"position": 1,
"title": "Clear MagSafe Case for iPhone 15",
"price": "$24.99",
"extractedPrice": 24.99,
"currency": "USD",
"merchant": "Example Store",
"store": "Example Store",
"url": "https://www.example-store.com/product/12345",
"thumbnail": "https://www.example-store.com/images/12345.jpg",
"rating": 4.6,
"reviews": 318,
"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.
Shopping API vs. the Web SERP API
The Web SERP API (/api/search?engine=yahoo) 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 alerts — use /api/shopping?engine=yahoo: every row is shaped as a product, and a priced row carries its currency code in its own field.
Data Fields & Pricing
Structured Yahoo 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[].extractedPrice
- shopping[].currency
- shopping[].merchant, .store
- shopping[].url
- shopping[].thumbnail
- shopping[].rating
- shopping[].reviews
Request Parameters
- q (product query, required)
- engine=yahoo
- num (1–100; up to num)
- country (2-letter code)
- language (2-letter code)
- format (full | simple)
Use Cases
- Price monitoring
- Store coverage checks
- Product & SKU matching
- 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
Yahoo Shopping API Questions
/api/shopping with engine=yahoo 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 takes q, engine, country, language, num and format, with no price-range or sort parameter. Every priced row carries a numeric extractedPrice with its currency, so cheapest-first sorting or a price band is one line in your own code — the Node example above sorts by price, and keeping rows between 50 and 150 is a single filter on the same field.
/api/shopping?q=<query> on its own returns Google Shopping results. Pass engine=yahoo for Yahoo Shopping cards; engine=ddg and engine=brave are also available, and the price is the same for all four.
/api/shopping?engine=yahoo) 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=yahoo) 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 Yahoo Shopping API
One free run per day without signing up — a free account adds 10 free calls shared across services. Yahoo Shopping product results from $0.18 per 1,000 calls, the same rate on every engine.
Get an API Key API Documentation


