Best Buy Scraper: Prices, Deals, Open-Box & Stock avatar

Best Buy Scraper: Prices, Deals, Open-Box & Stock

Pricing

from $2.40 / 1,000 products

Go to Apify Store
Best Buy Scraper: Prices, Deals, Open-Box & Stock

Best Buy Scraper: Prices, Deals, Open-Box & Stock

Get Best Buy products with price, regular price and savings, deal labels, open-box prices by condition, pickup and shipping availability for your ZIP, SKU, model, UPC, brand, rating and reviews. Search, categories or product links. About $0.003 per product. No login.

Pricing

from $2.40 / 1,000 products

Rating

0.0

(0)

Developer

mogged

mogged

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Security

Limited permissions

Share

For price analysts, electronics brands, comparison services and resellers who need Best Buy prices and pickup stock in a repeatable dataset. Search for laptops, headphones or TVs, read a category or promotion page, or monitor a list of known SKUs at selected stores.

About $0.003 per saved product at one store. A run with 20 product/store rows costs about $0.06, and 1,000 rows cost about $3, plus the small start charge. Apify plan discounts apply. No Best Buy login or developer key is needed.

The core inputs and output fields match our Safeway & Albertsons Scraper for shared retail integrations.

What you get

Each PRODUCT row describes one SKU at one verified store. Prices are national USD quotes; pickup inventory belongs to that store. ZIPs select the nearest public pickup store, while store IDs select it directly.

DataFields
Readable resultverdict, recordType
Store contextretailer, country, currency, storeId, storeName, location, storeZip, storeDistance, requestedLocations
Product identityproductId, sku, gtin, upc, modelNumber, bsin, title, brand, condition, sellerType
Current and reference priceprice, regularPrice, onSale
Sale evidencepromoText, promoType, promoStart, promoEnd, badges, isDeal
Paid-member quotesmemberPrice, memberProgram, memberPrices
Open-box quotesopenBox, with source condition, condition code, price, SKU and URL
Store stockinStock, stockLevel, pickupAvailable, pickupDate, pickupType
ShippingshippingAvailable, shippingZip, shippingBackordered, buttonState
Product metadatarating, reviewCount, category, url, imageUrl, scrapedAt
Optional metadatadetails, with available source specifications, descriptions, features and images
Shared retail placeholderssize, unitPrice, unitOfMeasure remain null when unavailable

Missing information stays null; stock, dates and prices are never guessed.

Start in three steps

  1. Enter a search term, a public Best Buy URL or numeric SKUs. Leave the other source arrays empty when you only want a watchlist.
  2. Enter ZIP codes or exact store IDs. Set the global product limit and, for search jobs, the limit for each source at each store.
  3. Run the Actor and open the Overview dataset view. Export JSON, CSV or Excel, or read the dataset using the Apify API.

A bounded first search:

{
"searchTerms": ["laptop"],
"locations": ["10001"],
"maxItemsPerSearch": 20,
"maxItems": 20
}

The November 3, 2026 cloud suite passed 32 varied inputs across six ZIPs. Two large exports each delivered 1,100 products, including a real reboot check. Ten live comparisons matched prices, identity, stock and shipping; a changed pickup date matched on a fresh repeat.

Input reference

InputMeaning
searchTermsArray of terms such as laptop, wireless headphones or OLED TV. Default source: laptop.
startUrlsOptional Bestbuy.com search, category, promotion or SKU-specific product links. Legacy numeric .p product links are also accepted.
productIdsNumeric Best Buy SKUs. These are retailer product numbers, not UPCs or model numbers. Up to 5,000 input SKUs.
locationsUS ZIP codes. Each resolves to one nearest public pickup store. ZIP+4 values are reduced to five digits.
storeIdsExact numeric store IDs. Takes precedence over locations.
maxItemsPerSearchMaximum newly delivered rows for each search, category or promotion source at each store. Default 20; maximum 2,000.
maxItemsGlobal maximum across all products and stores. Default 20; maximum 10,000.
dealsOnlyKeep source sales, qualifying deal badges or lower publicly advertised paid-member quotes. Default false.
includeDetailsFetch optional specifications, descriptions, features and image metadata. Default false. No separate details fee.
proxyConfigurationOptional Apify or custom routing. Default uses datacenter, with fresh-session retries and US residential fallback for transport failures.

Empty location arrays use fallback store 7, Roseville. Use explicit locations for scheduled monitors and check SUMMARY.resolvedStores before importing.

Duplicates at one store are saved and charged once. ZIPs resolving to the same store are retained in requestedLocations. One SKU at two stores produces two rows.

Bad types, malformed ZIPs and unsupported external URLs produce a free NOTE row and an invalid-input summary. An unknown SKU or an unavailable source is reported without a product charge. Other valid source jobs can continue after a source failure.

Monitor prices every day

Known-SKU monitoring avoids changes in search rankings and is suitable for scheduled catalogs, comparison feeds and daily price observations:

{
"productIds": ["6671006", "6611536", "6671806"],
"storeIds": ["482", "1028"],
"maxItems": 6,
"includeDetails": false
}

Save a tested input as an Apify Task. In Apify Console, create a Schedule for that task and choose the cadence your data pipeline needs. Use storeId plus productId as the destination key, and retain scrapedAt to build history. A repeated scheduled run is a new observation and can charge for the same product again.

Compare consecutive datasets in a database, spreadsheet, Make or n8n workflow to build history or alerts. Check SUMMARY.status, freeFailures and stores before importing. Partial results should not erase a complete catalog.

After migration or reboot, saved dataset rows are recovered and reconciled with acknowledged charges before new delivery continues. Product/store keys prevent duplicate delivery within the run.

Categories, promotions and filters

A category export:

{
"startUrls": [
"https://www.bestbuy.com/site/laptop-computers/all-laptops/pcmcat138500050001.c"
],
"locations": ["90210"],
"maxItemsPerSearch": 100,
"maxItems": 100
}

A retailer promotion page:

{
"startUrls": ["https://www.bestbuy.com/site/promo/laptop-and-computer-deals"],
"locations": ["60601"],
"maxItems": 20
}

Use dealsOnly with keyword or category jobs. Search/category URLs retain qp facets. Best Buy controls ordering and featured marketplace offers. Keyword searches exclude source-declared unrelated fallbacks. Use SKUs for exact monitoring.

Bare canonical /product/.../BSIN links need a numeric SKU separately. Use /sku/NUMBER or productIds; unresolved identities produce free notes.

Understand price, stock and offer conditions

price is the current price for the row's exact SKU and source condition. regularPrice is the source reference price; it is not proof that shoppers previously paid that amount. Taxes, shipping fees, installation, protection plans and financing are not added to the price. Marketplace products may appear, and sellerType preserves the source classification. 1P denotes Best Buy's own offer.

Open-box prices are a separate array. For example, the November 3 check of SKU 6671006 returned a new-product price of $1,199.99 and distinct Excellent, Good and Fair quotes. An open-box quote is not substituted into the new-product price, and it does not establish that a unit of that condition is available at the requested store. Conditions and quantities can change independently.

Paid-member prices come from the signed-out page's public what-if quotes. memberPrices retains the source program codes and savings; memberPrice is the lowest lower quote. This does not establish your membership eligibility, apply an offer or clip a coupon. The main product price remains separate.

inStock reflects the selected store's reported in-store inventory flag. pickupAvailable can be true when an item can be shipped to the store, even when shelf inventory is false. Check pickupType and pickupDate alongside it. shippingAvailable uses the requested ZIP, shown as shippingZip; exact-store inputs use the store ZIP. When ZIPs collapse to one store, shipping uses the first ZIP.

Best Buy sometimes reports large quantity codes such as 9999; these are not audited physical counts. stockLevel is populated only for source counts from zero to three. Higher codes stay null. Stock and pickup dates are observations that can change; they do not reserve a product.

promoEnd is populated when the price response supplies a deal-expiration timestamp. promoStart remains null when the source gives no start date for the price promotion. General campaign badge dates remain in badges; a campaign running through a future year does not become the end date of today's sale. Size and unit-price fields stay null when Best Buy does not supply them.

Dataset views and run summary

Overview shows prices, promotions, stock and store. Deals exposes isDeal and offer columns. Full product data includes identifiers, condition quotes and details.

SUMMARY is a key-value store record with:

  • products, stores, dealsFound and chargedProducts;
  • status, freeFailures, spendingLimitReached and duplicateExclusions;
  • resolvedStores, per-source outcomes, source request counts and free notes.

The DEALS record contains the returned deal rows for ordinary-sized exports. For larger exports, its response points you to the dataset view and isDeal field. Notes and summaries have no product fee. A summary marked complete describes completed source processing, not an exhaustive export of Best Buy's entire catalog.

Pricing and spending limits

One primary Product charge applies to each distinct saved product/store row. Optional details, open-box quotes, retries and duplicate source hits have no additional product fee. Notes and empty results have no Product charge. Apify's configured start charge is $0.00005 per allocated GB, with a minimum of one start event.

Saved product/store rowsBase Product feesBronze Product fees
20$0.06$0.057
100$0.30$0.285
1,000$3.00$2.85
5,000$15.00$14.25

Bronze is 5% below the base Product price, Silver 10% below, and Gold and higher listed tiers 20% below. Apify displays the price applicable to your plan. The small start fee is additional. A product monitored at five stores is five rows; set maxItems and the run's maximum total charge to bound the job.

When the charge limit leaves no room for another Product, collection stops cleanly. The run summary reports that limit. Invalid input and missing products do not create paid empty product rows. Apify subscription and destination charges are separate.

API use

Use your own Apify token and keep it in an environment variable. Start a run, wait for it to finish, then read its dataset and summary. This Python example uses the official Apify client:

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("moggedhq/best-buy-scraper").call(run_input={
"productIds": ["6671006", "6611536"],
"storeIds": ["482"],
"maxItems": 2,
})
summary = client.key_value_store(run["defaultKeyValueStoreId"]).get_record("SUMMARY")
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
if row.get("recordType") == "PRODUCT":
print(row["storeId"], row["sku"], row["price"], row["inStock"])

Safeway/Albertsons integrations can reuse the core input and output names. Retailer SKU values and store numbers differ.

Use with AI agents (MCP)

Use Apify's MCP server at https://mcp.apify.com with an explicit request, for example: “Get Best Buy laptop prices, regular prices, UPCs, open-box condition quotes and pickup stock near ZIP 10001, up to 20 rows.” For a scheduled watchlist, provide exact SKUs and store numbers.

The agent should inspect the schema, set a charge cap and read SUMMARY before importing. Missing rows are coverage issues, never assumed zero prices or stock observations.

Coverage and limitations

Reads public signed-out US data without accounts or verification solving. It makes no purchases or reservations. Independently operated; not affiliated with or endorsed by Best Buy.

Public source access can change. A product may be retired, unpriced, unavailable or missing optional metadata. Search is not a complete inventory of every variant or marketplace offer. Promotion pages may include products without a numeric discount. Exact shelf counts, local open-box inventory, full promotion start dates and membership eligibility are not guaranteed. Use Best Buy's current terms and the requirements that apply to your workflow.

FAQ

Does the ZIP change the product price? Best Buy prices returned here are national. The ZIP selects a store and its pickup observation. The resolved store is always included.

Why are dates or exact stock counts null? Those values are not always published. The Actor keeps missing dates and non-exact quantity codes null rather than creating values.

What happens after a source failure? Missing rows have no Product charge. Existing rows remain in the dataset, notes explain coverage issues, and the summary identifies a partial result.

Aggregate ratings are included; individual reviewer profiles and account data are not exported.