How to Get Yahoo Shopping Product Data in 2026 (Tested)

By Anurag Pathak · · 8 min read

Most "Yahoo Shopping API" coverage is either Google-first vendor copy or a tutorial that quietly assumes Yahoo has the same product data Google does. So I ran product queries through /api/shopping?engine=yahoo myself in early August 2026 and wrote down what came back — including the parts that break.

The honest version: Yahoo returns a compact rail of product cards — usually 10–11 listings, never more. Every card has a position, title, merchant, URL, and thumbnail. Prices, ratings, and review counts are conditional. On my first runs, prices came back null on most placements (0/10, 0/10, then 1/11). When I re-ran the same queries the next day, 6–8 of 10 carried a price. And the classic shopping.yahoo.com/search grid URL is dead — it 302-redirects to scout.yahoo.com, and Yahoo's internal GraphQL searchProduct endpoint returns HTTP 500.

How I tested

I ran five product queries through /api/shopping with engine=yahoo: sony wh-1000xm5, iphone 15 case, nike running shoes, breville barista express, and kindle paperwhite. From the United States, English, num=10 and num=100, August 3–4, 2026.

I logged which fields were populated, how often prices were null, how long the result list actually was, and which fields never appeared. Two runs of the same query set let me see how stable the price field is.

Which fields actually come back

FieldReturned whenObserved coverage
positionAlwaysEvery listing
titleAlwaysEvery listing
merchant / storeAlwaysEvery listing
urlAlwaysEvery listing
thumbnailAlmost alwaysNearly every listing
priceWhen the card renders one0/10, 0/10, 1/11 on first runs; 6–8/10 on re-test
extractedPriceWith a priceTracks price coverage (numeric)
rating / reviewsWhen the source shows themOften null
sponsoredAlwaystrue on affiliate placements
snippetSometimesShort description when present

The stable core is position, title, merchant/store, url, and thumbnail. Yahoo is the only card engine that also gives you a ready numeric extractedPrice alongside the display string — handy when you want to skip a string-parsing step.

What a Yahoo product rail actually is

Yahoo Shopping's listings are the product cards at the top of a shopping-intent search. Each one bundles the product's name, a thumbnail, the merchant selling it, and — when the card renders one — a price. These are affiliate placements: Yahoo earns a cut when a shopper clicks through, so every listing in the rail is effectively sponsored. There is no meaningful organic-vs-ads split.

Yahoo's cards are well-structured, which is why Yahoo is the default engine for the /api/shopping endpoint — the placement is stable and consistent across queries, so the returned fields stay predictable.

The endpoint: /api/shopping with engine=yahoo

The Shopping endpoint is /api/shopping. Yahoo is the default engine, so a plain request returns Yahoo Shopping results without any extra parameters. Add engine=yahoo explicitly when you want to be unambiguous, and switch to engine=google to pull the Google Shopping grid through the same shape.

ParameterWhat it does
qThe product query (“iphone 15 case”)
engineyahoo (default) or google
numRequested products per call, up to 100 — but the source returns ~10–11 no matter what
countryTwo-letter ISO code to localize product results
languageOptional two-letter language code
formatfull (default) or simple

A first request looks like this:

https://apiserpent.com/api/shopping?q=iphone+15+case&engine=yahoo&num=10&country=us

A working Node.js example

Here is the whole thing in Node.js with fetch — query Yahoo Shopping, then print each product's title, price, and merchant:

const res = await fetch(
  'https://apiserpent.com/api/shopping?q=iphone+15+case&engine=yahoo&num=10',
  { headers: { 'X-API-Key': 'YOUR_API_KEY' } }
);
const json = await res.json();

for (const p of json.results.shopping) {
  console.log(p.position, p.title, p.price ?? 'no price', p.merchant);
}

Five lines. No parser to maintain, no HTML to clean — the product cards arrive as JSON objects ready to store in a database, compare, or feed into a price-alerting loop.

The response shape and the honest price field

Each product result carries the fields that make up the card. A typical item looks like this:

{
  "position": 1,
  "title": "Spigen Mag Armor MagFit for iPhone 15",
  "price": "$49.99",
  "extractedPrice": 49.99,
  "currency": "USD",
  "merchant": "spigen.com",
  "store": "spigen.com",
  "url": "https://spigen.com/products/...",
  "thumbnail": "https://.../product.jpg",
  "rating": 4.5,
  "reviews": 342,
  "sponsored": true,
  "snippet": "Shockproof military-grade case with built-in MagSafe..."
}

Now the honest caveat, with numbers. On August 3, 2026 I ran the five queries and prices came back null on 0, 0, and 1 of the placements across my runs. When I re-ran the same queries on August 4, 6–8 of 10 placements carried a price. The price field is real when it is there — but it is not guaranteed on any given read.

This is not a bug in the API. Yahoo hydrates the price footer asynchronously after the card renders, so a small share of placements can appear without a displayed price at the moment the results are read. The API returns null rather than inventing a number. Build your pipeline to treat null prices as expected (use p.price ?? 'no price', or skip nulls when averaging).

Depth ceiling and the dead classic URL

The second hard limit is depth. I requested num=100 on the same queries and got the same 10–11 listings back. There is no pagination on this source, and requesting more does not conjure extra listings.

And one thing worth saying plainly for anyone who remembers the old Yahoo Shopping: the classic shopping.yahoo.com/search grid URL is dead. It 302-redirects to scout.yahoo.com, and Yahoo's internal GraphQL searchProduct endpoint returns HTTP 500. As of August 2026 the product rail is served through the current search surface, not the old grid endpoint — so any tutorial telling you to hit the classic grid URL will not work.

What you do NOT get

None of these are API defects — they are properties of the source. The honest framing is that Yahoo Shopping data is a useful second opinion on a market, not a complete one. For a deeper comparison of what the engines return, see our Google product-SERP field audit and the Shopping API hub.

Price monitoring with Yahoo Shopping

Because each result is a merchant offer at a price (where one renders), Yahoo data slots into the same shopping price-monitoring playbook as the other engines: query on a schedule, read extractedPrice (a number, no parsing needed), and track the lowest offer per product over time. When the minimum drops below a threshold, you have a price-drop signal. Our price-drop alerts post shows how to turn that into a notification.

Yahoo Shopping product cards, as JSON.

Serpent returns Yahoo Shopping product listings — titles, prices, merchants, URLs, and thumbnails — through one endpoint, with Google Shopping one parameter away. Pay-as-you-go, credits never expire, no subscription. Try it with the free API key.

Get Your Free API Key

Explore: Yahoo Shopping API · Shopping API · Docs · Playground

FAQ

What Yahoo Shopping data does the API return?

A compact rail of product cards as JSON: position, title, url, merchant and store names, and thumbnail on every listing; price, extractedPrice, currency, rating, reviews, sponsored, and snippet when the source provides them. In my August 2026 tests the rail was 10–11 listings per query, with prices on 6–8 of 10 on re-test.

Why is Yahoo the default engine for the Shopping API?

Yahoo Shopping offers stable, well-structured product-card listings, which makes it the most reliable default for product search. You can switch to Google Shopping at any time by passing engine=google.

Is a price always returned for every product?

No. In my first runs prices were null on most placements (0/10, 0/10, then 1/11); a re-test returned prices on 6–8 of 10. Yahoo hydrates the price footer after the card renders, so some placements appear without a displayed price at read time. Always handle null prices rather than assuming every result has one.

Why is the classic shopping.yahoo.com/search URL dead?

The classic Yahoo Shopping grid URL now 302-redirects to scout.yahoo.com, and Yahoo's internal GraphQL searchProduct endpoint returns HTTP 500. As of August 2026 the public product rail is served through the current search surface, not the old grid endpoint.

How many Yahoo Shopping results do you actually get per query?

About 10–11 listings, no matter the num you pass. I requested num=100 and still got 10–11. There is no pagination on this source, so treat the response length as the ceiling.

How much does the Yahoo Shopping API cost?

Yahoo Shopping search costs $0.60 per 1,000 requests on the Default tier, $0.54 per 1,000 on Growth, and $0.42 per 1,000 on Scale. Shopping is free-eligible from the shared 10-call pool. Credits never expire and there is no monthly subscription.