Best Buy Price Drop & Stock Tracker avatar

Best Buy Price Drop & Stock Tracker

Pricing

from $0.49 / 1,000 results

Go to Apify Store
Best Buy Price Drop & Stock Tracker

Best Buy Price Drop & Stock Tracker

Search Best Buy by keyword or product URL to get current and regular price, savings, rating, review count, brand, model and stock status for each item in one structured record.

Pricing

from $0.49 / 1,000 results

Rating

0.0

(0)

Developer

Dataspryva

Dataspryva

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Features

Limited permissions

Share

Watch Best Buy prices and availability without opening a browser tab for every product. Give this actor a few keywords, a category link, product links or SKU numbers, and it returns one structured row per product: what the item is, what it costs now, what it used to cost, whether it is in stock, how shoppers rated it, and where it sits in the result grid.

The actor runs without a Best Buy account, API key, cookie or proxy setup. It reads the public Best Buy storefront and its public price endpoint, then writes clean product records to the Apify dataset.

Four ways to build a product list

ModeFieldBest for
Keyword searchsearchQueriesExploring a category, brand or product idea
Category or search URLcategoryUrlsReusing a Best Buy browse/search link you already trust
Product URLproductUrlsWatching exact items you found on the site
SKUskuIdsFeeding a restock or price watchlist from another system

All four modes can be combined in a single run. Results are de-duplicated by SKU, filtered, sorted and capped by maxResults.

What you can do with it

  • Price-drop watchlist — run the same skuIds or productUrls on a schedule and compare currentPrice between datasets. A lower value is a drop; regularPrice tells you the reference price.
  • Restock monitor — keep inStockOnly off and watch availability flip from OutOfStock to InStock.
  • Category deal scan — pass a category URL with sortBy: "Best-Discount" or condition: "open-box" to surface markdowns and open-box units.
  • Competitive snapshot — collect brand, model, rating and review count for every product in a search grid.
  • Rank tracking — position, searchPage and isSponsored preserve the grid order Best Buy returned, so you can compare placement across runs.

Input

FieldTypeDefaultWhat it does
searchQueriesarray–One or more keyword searches (the input form prefills ["sony headphones"]). Each is paginated until the global result cap is reached.
categoryUrlsarray[]Best Buy category, browse or search-result links. cp pagination, sort and condition filters are added automatically.
productUrlsarray[]Exact product links in new /product/.../sku/... or legacy /site/.../<sku>.p?skuId=... form.
skuIdsarray[]Best Buy SKUs (6–9 digits). Product links are accepted here too.
maxResultsinteger24Total records across all modes, 1–1000.
maxPagesinteger50Page guard per keyword or category link, 1–100.
sortByselectBest-MatchOne of Best-Match, Best-Selling, Best-Discount, Price-Low-To-High, Price-High-To-Low, Customer-Rating, New-Arrivals.
conditionselectallall, new, open-box or refurbished.
minPriceinteger0Minimum current price in dollars; 0 disables the bound.
maxPriceinteger0Maximum current price in dollars; 0 disables the bound.
inStockOnlybooleanfalseDrop products Best Buy marks sold out, out of stock or unavailable.
includeDetailsbooleanfalseOpen each product page to add description, model, GTIN/UPC and seller where Best Buy publishes them. Slower.

Every field in the input form is used by the actor. Older saved tasks that still send keyword, searchQuery, categoryUrl, skus, maxItems, sort, skipOutOfStock or openBoxOnly keep working: those legacy keys are mapped onto the current fields in code.

Example: exact-product watchlist

{
"skuIds": ["6505727", "6620467", "6689192"],
"inStockOnly": false,
"maxResults": 10
}

Example: open-box deals in a category

{
"categoryUrls": [
"https://www.bestbuy.com/site/headphones/wireless-headphones/pcmcat331200050015.c?id=pcmcat331200050015"
],
"condition": "open-box",
"sortBy": "Price-Low-To-High",
"maxResults": 60
}

Example: keyword search with a price window

{
"searchQueries": ["sony headphones", "noise cancelling earbuds"],
"minPrice": 100,
"maxPrice": 400,
"inStockOnly": true,
"sortBy": "Customer-Rating",
"maxResults": 50
}
{
"productUrls": [
"https://www.bestbuy.com/product/sony-wh1000xm5-wireless-noise-canceling-over-the-ear-headphones-black/J7XSRH5CXG/sku/6505727"
],
"includeDetails": true
}

Output fields

FieldTypeMeaning
skustringBest Buy SKU.
urlstringCanonical product page URL.
bsinstringBest Buy canonical product-family identifier, when the URL exposes it.
namestringProduct title.
descriptionstringProduct description, from the optional detail pass.
brandstringManufacturer brand.
modelstringModel number or MPN, from the optional detail pass.
gtin13stringGTIN/UPC, from the optional detail pass.
image, imageUrlstringPrimary product image (same value under both keys).
currentPricenumberPrice shown to a shopper now.
regularPricenumberNon-sale reference price.
salePricenumberCurrent price when it is below the regular price.
savingsnumberRegular price minus current price.
savingsPercentnumberSavings as a percentage of the regular price.
onSalebooleanTrue when the current price is below the regular price.
currency, currencySymbolstringISO currency code and display symbol.
availabilitystringNormalized stock state, e.g. InStock, OutOfStock, PreOrder, BackOrder, LimitedAvailability.
availabilityTextstringBest Buy's own button text, e.g. Add to Cart or Sold Out.
buttonStatestringRaw Best Buy button state.
priceTypestringBest Buy price event type, e.g. onSale or clearance.
conditionstringnew, open-box or refurbished when known.
productTypestringBest Buy product type, e.g. hardgood.
department, productClass, subclassstringBest Buy taxonomy labels.
categoryPatharrayDepartment → class → subclass path.
ratingnumberAverage customer rating.
reviewCountintegerNumber of customer reviews.
sellerstringSeller name, from the optional detail pass.
isSponsoredbooleanTrue when the result card is labelled Sponsored.
dealBadgestringBest Buy promotional badge, e.g. Trending Deal or Holiday Deal.
positioninteger1-based position in this run's output after sorting.
searchPageintegerResult page where a search/category product was found.
searchTotalResultsintegerBest Buy's reported result count for that query or category.
searchQuerystringKeyword or category URL that produced the record.
sourcestringsearch, category, productUrl or sku.
scrapedAtstringISO-8601 UTC collection timestamp.

Fields Best Buy does not publish for a product are omitted rather than sent as null or an empty string. Missing price, rating or detail fields therefore mean “not available on this page”, not zero.

How it works

  1. Keyword and category modes load Best Buy's result grid in a real headless browser, scroll it to hydrate lazy cards, and read the rendered product cards. A direct-HTML fallback reads the server-rendered product data if the browser grid is empty.
  2. Product URL and SKU modes skip search and go straight to Best Buy's public price endpoint, batching up to 20 SKUs per request.
  3. Every mode merges the card data with the price/stock response, so price, savings and availability come from Best Buy's current price source rather than a cached grid tile. If that endpoint omits a SKU, the price shown on the hydrated result card fills the row.
  4. Optional detail enrichment opens each product page and reads its structured product data for description, model, GTIN and seller.
  5. Filters and sorting are applied once the merged records exist; duplicates are removed by SKU.

The actor adds intl=nosplash to every request. That tells Best Buy to serve the US storefront instead of its international country selector.

Limitations and honest notes

  • Online availability only. Best Buy's per-store, per-ZIP inventory needs a location-bound fulfillment session. This actor reports the national online stock state and does not claim store-level counts.
  • No stored price history. The actor is stateless. Schedule it and keep each dataset, or write the rows to a spreadsheet, to build a price timeline.
  • Detail fields are best-effort and often unavailable. Best Buy resets product-page requests from many datacenter IPs. In cloud runs description, model, gtin13 and seller are therefore usually omitted; the price and stock row still ships, and includeDetails never blocks it.
  • SKUs with no usable data are skipped. If Best Buy returns neither a name nor a price for a product (retired, region-locked, or a price-endpoint miss), that row is not emitted. maxResults is a cap, not a guarantee, so a run can return fewer rows. A run that finds no product at all returns one bestbuy_error row with reason: "no_results".
  • Full specification sheets are not included. The detail pass reads structured product data, not the interactive spec table.
  • Individual reviews are not included. Use rating and reviewCount for reception; review text belongs to a dedicated reviews actor.
  • Marketplace offers are summarized, not enumerated. The record follows the primary offer Best Buy displays.

FAQ

Do I need a Best Buy API key? No. The actor reads public storefront and price data. It does not use the gated developer API.

Do I need a proxy? No. There is no proxy field and no proxy setup step. The actor uses a normal browser session and the public price endpoint.

Why does a SKU sometimes have no rating or image? Those values come from the search card. Direct SKU and product-URL lookups skip the grid, so the actor can fill price, stock, name, brand and taxonomy but may not see the card-only fields. Add a keyword search for the richest row.

Why is availability different from what I see in a store? The field tracks Best Buy's online button state. Store pickup and nearby inventory depend on a ZIP code and a different fulfillment call, which this actor does not make.

Can I get more than 24 results? Yes. Raise maxResults and, if needed, maxPages. Best Buy caps a search at roughly 200 results for many queries; category pages can expose more.

What happens when a keyword finds nothing? The dataset receives a single bestbuy_error row with reason: "no_results" and the inputs that produced it, so a failed run is visible instead of silently empty.

How do I track a price drop? Run the same skuIds or productUrls daily, keep the datasets, and compare currentPrice or savingsPercent between consecutive runs.

Is this affiliated with Best Buy? No. It reads publicly visible product information and is not endorsed by Best Buy.