Cheapest Brave Shopping API for Developers

Brave product results as JSON — titles, prices with currency, stores, links, images and ratings.

Get an API Key API Documentation View Pricing
engine=brave From $0.18/1K calls Price and currency fields Four engines, one endpoint

Run a live shopping search

One free run per day without signing up — a free account adds 10 free calls shared across services.

Brave Shopping API: Product Results as JSON

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=brave 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).

cURL — Brave Shopping (engine=brave)
# Brave Shopping: "4k monitor"
curl "https://apiserpent.com/api/shopping?q=4k+monitor&engine=brave&num=10&country=us" \
  -H "X-API-Key: YOUR_API_KEY"
Python (requests)
import os
import requests

resp = requests.get(
    "https://apiserpent.com/api/shopping",
    params={"q": "4k monitor", "engine": "brave", "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.js (fetch)
// Node 18+ has fetch built in. Save as shopping.mjs and run: node shopping.mjs
const params = new URLSearchParams({ q: "4k monitor", engine: "brave", 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);
JSON Response (engine=brave, partial, values illustrative)
{
  "success": true,
  "query": "4k monitor",
  "type": "shopping",
  "engine": "brave",
  "country": "us",
  "results": {
    "shopping": [
      {
        "position": 1,
        "title": "27-inch 4K UHD IPS Monitor",
        "price": "$279.99",
        "extractedPrice": 279.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=brave) 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=brave: every row is shaped as a product, and a priced row carries its currency code in its own field.

Structured Brave 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=brave
  • num (1–100; up to num)
  • country (2-letter code)
  • language (2-letter code)
  • format (full | simple)

Use Cases

  • Price monitoring
  • Product & SKU matching
  • Store coverage checks
  • 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

Brave Shopping API Questions

One call to /api/shopping with engine=brave 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.
Shopping search is $0.35 per 1,000 calls on the Default tier, $0.32 per 1,000 on Growth after one $100 deposit, $0.25 per 1,000 on Scale after one $500 deposit, $0.21 per 1,000 on Enterprise after one $1,000 deposit and $0.18 per 1,000 on Enterprise Plus after one $1,250 deposit. All four engines cost the same within each tier, there is no monthly subscription, and credits never expire. One free run per day without signing up — a free account adds 10 free calls shared across services.
No. A row carries a price when the product listing shows one, and then 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.
Four: google (the default), yahoo, ddg and brave, all on the same /api/shopping endpoint and the same price. 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). Switching engine is a one-parameter change.
The Shopping API (/api/shopping?engine=brave) 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=brave) returns organic search results and the other blocks of a results page. Use the Shopping endpoint when you want product data specifically.
Yes. Pass a 2-letter 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 Brave Shopping API

One free run per day without signing up — a free account adds 10 free calls shared across services. Brave Shopping product results from $0.18 per 1,000 calls, the same rate on every engine.

Get an API Key API Documentation

Related guides

More shopping and search APIs.

Shopping APIFour-engine product search (google · yahoo · ddg · brave) in one endpoint. DuckDuckGo Shopping APIDuckDuckGo product search via /api/shopping?engine=ddg. Price Monitoring with SERP APIBuild a price monitoring tool with a SERP API. All SERP APIsWeb, news, images, and video across five engines.