Brave Shopping API: What Product Data It Returns
Search “iphone 15 case” on Brave and the top of the results page is a grid of product cards — a photo, a title, a price, a store name, and a rating. These product-listing placements are the shopping SERP's equivalent of PLA (product listing ads) results, and for ecommerce research they are often more useful than organic links: each card is a concrete offer from a specific merchant at a specific price.
Nearly every Shopping API on the market is Google-only. Brave is the newest major engine, and its product listings are rarely exposed as data at all — which is a shame, because Brave's coverage is strongest for US product queries. The Serpent Brave Shopping API turns those product cards into structured JSON through a single REST endpoint, /api/shopping with engine=brave.
TL;DR: A call to /api/shopping?q=PRODUCT&engine=brave returns Brave product listings as JSON. Each result has position, title, price, merchant/store, url, thumbnail, rating, and reviews. Prices are returned where the merchant placement renders them — some placements omit a price, so price can be null.
What Brave product listings look like
Product-listing placements — the cards you see at the top of a shopping SERP — are compact offers rather than organic blue links. Each one bundles the product's name, a thumbnail, the merchant selling it, and usually a price. Some also carry a rating and a review count. They are exactly the data a price-monitoring or competitive-research pipeline wants: a normalized set of offers for one product, ranked by position.
Brave is the newest of the four Shopping engines (Google, Yahoo, DuckDuckGo, and Brave), and its product coverage is strongest for US product queries. If the shoppers you care about are in the US market, Brave is a natural first engine to query — the merchants and prices it surfaces are the ones a US shopper actually sees.
The endpoint: /api/shopping with engine=brave
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=brave explicitly to pull the Brave product grid through the same normalized shape, and switch to engine=google or engine=ddg for the other product indexes.
| Parameter | What it does |
|---|---|
q | The product query (“iphone 15 case”) |
engine | yahoo (default), google, ddg, or brave |
num | Number of products per call, up to 20 (default 10) |
country | Two-letter ISO code to localize product results |
language | Optional two-letter language code |
format | full or simple |
A first request looks like this:
https://apiserpent.com/api/shopping?q=iphone+15+case&engine=brave&num=10&country=us
A working Node.js example
Here is the whole thing in Node.js with fetch — query Brave Shopping, then print each product's title, price, and merchant:
const res = await fetch(
'https://apiserpent.com/api/shopping?q=iphone+15+case&engine=brave&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: position, title, price, currency, merchant, store, url, thumbnail, rating, reviews, sponsored, and snippet. A typical item looks like this:
{
"position": 1,
"title": "Spigen Mag Armor MagFit for iPhone 15",
"price": "$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..."
}
One honest caveat: a price is not returned for every placement. Some product cards render without a visible price, so price (and rating/reviews) can be null on individual results. This is not a bug — the shopping index itself simply does not show a price for that placement. Build your pipeline to treat null prices as expected (use p.price ?? 'no price', or skip nulls when averaging) rather than assuming every result has one.
Brave's strength for US product queries
Brave's product coverage is strongest for US product queries. Pass country=us (or the two-letter code for your market) to localize the merchants and prices that come back. For a US-focused price monitor, that makes Brave a high-value addition: a second, independent view of what a US shopper is offered, on top of the other engines.
Because each result is a merchant offer at a specific price, Brave data slots directly into the price-drop alert and price-monitoring playbook patterns — query on a schedule, normalize the price strings, and track the lowest offer per product over time.
Four engines, one endpoint
The Shopping API spans four independent product indexes: Google, Yahoo, DuckDuckGo, and Brave. The same query can surface different merchants, different prices, and different product availability in each. All four flow through the same /api/shopping endpoint with the same normalized fields, so switching between them is a one-parameter change: engine=brave vs. engine=yahoo. Querying more than one engine is the foundation of cross-engine price comparison — see the Shopping API hub for the full picture.
Pricing
Brave Shopping search costs $0.60 per 1,000 requests on the Default tier, $0.06 per 1,000 on Growth, and $0.03 per 1,000 on Scale. New accounts get 10 shared free calls on every endpoint, then pay-as-you-go — credits never expire and there is no monthly subscription. The flat per-call model keeps monitoring predictable: the bill scales with how many product queries you actually run, not with how many SKUs you track.
Brave product cards, as JSON.
Serpent returns Brave product listings — titles, prices, merchants, URLs, and thumbnails — through one endpoint, with Google, Yahoo, and DuckDuckGo one parameter away. Pay-as-you-go, credits never expire, no subscription.
Get Your Free API KeyExplore: Brave Shopping API · Shopping API · Docs · Playground
FAQ
What Brave Shopping data does the API return?
The Brave Shopping API returns product listings as structured JSON with position, title, price (where available), merchant and store names, product URL, thumbnail, rating, and review count. Use num to request up to 20 products per call.
Which engine is the default for the Shopping API?
Yahoo is the default engine, so a bare call returns Yahoo Shopping results. You can switch to Brave product listings at any time by passing engine=brave — the same normalized card fields, one parameter away.
Is a price always returned for every product?
No. Prices, ratings, and review counts are returned when the shopping source provides them. Some product placements render without a visible price, so the price field can be null. Always handle null prices in your pipeline rather than assuming every result has one.
How much does the Brave Shopping API cost?
Brave Shopping search costs $0.60 per 1,000 requests on the Default tier, $0.06 per 1,000 on Growth, and $0.03 per 1,000 on Scale. New accounts get 10 shared free calls on every endpoint, then pay-as-you-go. Credits never expire and there is no monthly subscription.


