Scrape Yahoo Shopping Data in Python: Real Code (2026)

By Anurag Pathak · · 9 min read

Yahoo Shopping product data — title, merchant, price, currency, URL, thumbnail, and a sponsored flag — comes back as clean JSON through a shopping API. There is no official Yahoo Shopping search API, so the practical path for a Python script is a shopping API that returns the product rail as structured data.

This guide shows the documented Python request and the practical limits observed in saved August 2026 examples: nullable prices and a short result set. Verify current output before building a production alert.

The Shopping API is live. GET /api/shopping returns real product listings — title, price, currency, store, link, image, and rating where the listing shows one — on engine=google, yahoo, ddg or brave. Not every listing shows a price, so code for a missing one. Rates are on the Shopping API page.

TL;DR: Yahoo exposes no public API for its Shopping search results, but a product card’s commercial status needs its own evidence. The fastest reliable way to scrape Yahoo Shopping in Python is one HTTPS call to the Yahoo Shopping API with an X-API-Key header, then parse results.shopping. Below is the exact script, tested against the live endpoint.

Table of Contents

Why scrape Yahoo Shopping at all

Google Shopping gets nearly all the attention. Every SERP provider, scraper library, and tutorial covers Google Shopping prices. Yahoo Shopping is the quieter sibling — and that is exactly why it is worth a look. Inspect the Yahoo Search interface for the actual query and region; classify an ad from its label or returned indicator, not from its position.

Fewer people track it means less competition for the data you collect. If you run a price-monitoring or price intelligence workflow, adding a second product source gives you a cross-market check on what a shopper actually sees on another engine. That cross-engine view is the whole idea behind our Google vs Yahoo price comparison workflow.

Yahoo Shopping also surfaces real merchants — Macy's, Best Buy, Fleet Feet, Foot Locker, Walmart — with real prices, which makes it a genuine complement to a Google Shopping feed rather than a low-quality mirror.

What Yahoo actually exposes

First, the honest picture. Yahoo does not have a public API for reading Shopping search results. Its product search returns a compact set of listings. A card’s position alone does not establish whether it is an ad or how a click is monetized.

Those aren't bugs in an API — they are properties of the source. Any tool that scrapes Yahoo Shopping runs into the same ceiling, because the page itself only shows that much.

The fields the API returns

The Yahoo Shopping API returns each product with the fields below. Here is one real item from a live sony headphones query (August 4, 2026):

{
  "position": 2,
  "title": "Sony WF-1000XM6",
  "price": "$299.99",
  "extractedPrice": 299.99,
  "currency": "USD",
  "merchant": "Best Buy",
  "store": "Best Buy",
  "url": "https://www.bestbuy.com/product/sony-wf1000xm6-...",
  "thumbnail": "https://img.example.com/products/wf1000xm6.jpg",
  "rating": null,
  "reviews": null,
  "sponsored": true,
  "snippet": "These earbuds are ideal for users seeking a premium audio experience..."
}
FieldWhat it is
position1-based slot in the Yahoo rail.
titleProduct name.
priceDisplayed price as text, e.g. $299.99. May be null — see limits below.
extractedPriceThe same price as a number, ready for math. Present only when a price is.
currencyISO currency code, e.g. USD. Our API keeps this as a separate field.
merchant / storeSeller name, e.g. Best Buy.
urlDirect product URL on the merchant's site.
thumbnailProduct image.
rating / reviewsReview score and count when Yahoo shows them (often null).
sponsoredtrue when the listing is a paid placement.
snippetA short product description.

Working Python: one call to a product table

Here is a complete, runnable script. It queries Yahoo Shopping, prints a table, and handles the two things that trip people up: missing prices and the short result list.

Replace sk_live_your_key with your key from the dashboard. Authentication is the X-API-Key header.

import requests

API_KEY = "sk_live_your_key"
BASE_URL = "https://apiserpent.com/api/shopping"

def yahoo_shopping(query, num=10):
    resp = requests.get(
        BASE_URL,
        params={"q": query, "engine": "yahoo", "num": num},
        headers={"X-API-Key": API_KEY},
        timeout=60,
    )
    resp.raise_for_status()
    return resp.json()["results"]["shopping"]

def money(item):
    price = item.get("price")
    if not price:
        return "n/a"          # Yahoo sometimes shows the card without a price
    return price

products = yahoo_shopping("nike running shoes")

print(f"{'#':>2} {'title':38} {'price':10} {'merchant':22}")
print("-" * 76)
for p in products:
    print(f"{p['position']:>2} {p['title'][:38]:38} {money(p):10} {p['merchant'][:22]:22}")

priced = sum(1 for p in products if p.get("price"))
print(f"\n{len(products)} products, {priced} with a price, "
      f"{len(products) - priced} without.")

Run it and you get a table like this (trimmed):

 # title                                       price      merchant
 1 Nike Vomero 18                              $155.00    Macy's
 2 Nike Pegasus 41                             n/a        Macy's
 3 Nike Pegasus 42                             $145.00    Fleet Feet
 4 Nike Vaporfly 4                             $270.00    Fleet Feet

10 products, 8 with a price, 2 without.

Notice two things. First, the result list is short — that is Yahoo's rail, not a missing feature. Second, one product came back without a price. The script treats that honestly instead of pretending a number exists.

Honest limits: what Yahoo won't give you

Scraping Yahoo Shopping has hard ceilings, and a good scraper plans around them:

If you need deep catalogs, delivery data, or discount history, a dedicated product feed or a marketplace's own API is the right tool. For a fast, clean read of what Yahoo Shopping shows for a query — which is the realistic use case — a shopping API is the sweet spot.

What it costs

Yahoo Shopping searches are billed per 1,000 calls, pay-as-you-go. Tiers:

TierPer 1,000 callsPer call
Default$0.35$0.00035
Growth$0.32$0.00032
Scale$0.25$0.00025
Enterprise$0.21$0.00021
Enterprise Plus$0.18$0.00018

There is no per-page multiplier on shopping and no subscription — credits never expire. See the pricing page for the full table. If you want the Google-shaped view of the same product data instead, the Google Shopping API engine returns link/source/product_rating fields.

Next step: pull your key from the dashboard, hit the live playground to see the raw response for your own query, then wire the script above into your daily price monitoring job. Start from $0.18 per 1,000.

FAQ

Is there an official Yahoo Shopping API?

No. Yahoo does not offer a public API that reads its Shopping search results. A shopping API that returns the product rail as JSON is the standard workaround.

Are Yahoo Shopping results organic or paid?

Do not assume every Yahoo product card is paid. Use an explicit ad label or supported sponsored indicator and leave unclassified cards separate.

Why is my result list so short?

Yahoo shows a compact product rail per query — typically around a dozen listings. Requesting a larger num returns as many as the source shows; it cannot exceed what Yahoo surfaces.

Why is the price sometimes null?

Yahoo loads the price footer after the card renders, so a share of listings can lack a displayed price at read time. The API returns price: null rather than inventing a number.

Can I scrape Yahoo Shopping without a browser?

Yes — that is the whole point of the API. One HTTPS request with an X-API-Key header returns parsed JSON. You never run a headless browser, proxy, or consent flow yourself.