Best Buy Product Scraper
Pricing
from $2.70 / 1,000 product scrapeds
Best Buy Product Scraper
Scrape Best Buy products by search query, category URL, or SKU. Optional full details with description, features, specifications, and sample reviews.
Pricing
from $2.70 / 1,000 product scrapeds
Rating
0.0
(0)
Developer
Farhan Ali
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
3 days ago
Last modified
Categories
Share
Best Buy Product Scraper creates a structured dataset of product records collected from Best Buy (bestbuy.com and bestbuy.ca). Each dataset item can include the SKU, title, brand, price and regular price, currency, rating, availability, model number, and product URL. When product details are enabled, records are enriched with description, features, specifications, gallery images, and sample reviews. Query the source with searchQueries, startUrls, or skuIds, control the result limit with maxItems, and retrieve records through the Apify Dataset API or export them as JSON, CSV, Excel, XML, or another supported format.
Dataset at a glance
| Property | Value |
|---|---|
| Source | Best Buy (bestbuy.com, bestbuy.ca) |
| Record unit | One product |
| Input methods | searchQueries, startUrls, skuIds |
| Main identifiers | skuId, bsin, url |
| Delivery | Apify Dataset and API |
| Export formats | JSON, CSV, Excel, XML, HTML |
| Update model | Fresh records per Actor run |
| Pricing | $3.00 per 1,000 products; $4.00 per 1,000 additional for full product details |
Coverage and available records
The Actor collects product records from Best Buy search, category, and product pages. Supported behavior:
- Search queries —
searchQueriesaccepts terms like"laptop"or"airpods", resolved against the selected market. - Start URLs —
startUrlsaccepts category, search, or product URLs; the country is inferred from the host. - Direct SKUs —
skuIdsscrapes specific products by Best Buy SKU. - Market selection —
countryCodeselectsUS(bestbuy.com) orCA(bestbuy.ca) for query-based input. - Availability context —
zipCodeand optionalstoreIdprovide pricing/availability context for the destination area. - Listing-only vs. details —
fetchProductDetails(defaultfalse) returns listing/card fields only; when enabled, each product is enriched with description, features, specifications, gallery images, and sample reviews, adding theproduct-detailscharge event. - Result limit —
maxItemscaps total products (0 = unlimited).
Not currently collected: full review history (only a sample of reviews per product), seller inventory beyond Best Buy, and order/stock history over time.
Data dictionary
Listing fields (always present when available):
| Field | Type | Nullable | Description | Example |
|---|---|---|---|---|
skuId | string | no | Best Buy SKU; recommended deduplication key | 12349296 |
bsin | string | yes | Best Buy internal item identifier | ... |
title | string | no | Product title | HP - 14" Laptop - Intel N150... |
brand | string | yes | Brand name | HP |
modelNumber | string | yes | Manufacturer model number | ... |
url | string | yes | Product page URL | https://www.bestbuy.com/... |
image | string | yes | Primary image URL | https://pisces.bbystatic.com/...jpg |
price | number | yes | Current sale price | 249.0 |
regularPrice | number | yes | Regular/list price | 299.0 |
currency | string | yes | Currency code | USD |
priceMessage | string | yes | Display price message | ... |
savings | number | yes | Absolute savings | 50.0 |
savingsPercent | number | yes | Savings percentage | 17 |
ratingAverage | number | yes | Average rating | 4.5 |
ratingCount | integer | yes | Number of ratings | 1200 |
condition | string | yes | Product condition | New |
availability | string | yes | Display availability status | In Stock |
sellerId / sellerClassification | string | yes | Seller identifiers | ... |
badges | array | yes | Promotional badge labels | ["Top Rated"] |
countryCode | string | yes | Market code | US |
sourceQuery | string | yes | Query or source used | laptop |
detailsFetched | boolean | no | Whether detail enrichment succeeded | false |
scrapedAt | string | yes | ISO timestamp | 2026-07-27T10:03:14.296336+00:00 |
Detail fields (present when fetchProductDetails is enabled and the page yields them):
| Field | Type | Nullable | Description | Example |
|---|---|---|---|---|
description | string | yes | Long or short product description | ... |
features | array | yes | Feature objects with title and description | [{"title":"...","description":"..."}] |
specifications | array | yes | Spec objects with group, name, value, definition | [{"group":"Display","name":"Size","value":"14\""}] |
images | array | yes | Gallery image URLs | ["https://...jpg"] |
color | string | yes | Color display name | Natural Silver |
includedItems | array | yes | Items included in the box | ["Power adapter"] |
whatItIs | string | yes | Short product blurb | ... |
disclaimers | array | yes | Product disclaimers | [...] |
manuals | array | yes | Manual objects with url, type, language | [{"url":"...","type":"Manual"}] |
dimension | object | yes | depth, height, width, weight | {"weight":"2.0 lb"} |
sampleReviews | array | yes | Review objects with rating, title, text, userNickname | [{"rating":5,"text":"..."}] |
Example dataset record
{"skuId": "12349296","title": "HP - 14\" Laptop - Intel N150 Processor - 4GB Memory - 128GB UFS - Natural Silver","image": "https://pisces.bbystatic.com/image2/BestBuy_US/images/products/3bd638b3-4542-4115-8e43-34faa18a2382.jpg;maxHeight=256;maxWidth=384?format=webp","price": 249.0,"currency": "USD","countryCode": "US","sourceQuery": "laptop","detailsFetched": false,"scrapedAt": "2026-07-27T10:03:14.296336+00:00"}
The record above was produced by a run with searchQueries: ["laptop"], countryCode: "US", and fetchProductDetails: false.
Query and input reference
| Input | Type | Required | Default | Accepted values | Description |
|---|---|---|---|---|---|
searchQueries | array | no | ["laptop"] | product terms | Search terms against the selected market |
startUrls | array | no | — | category/search/product URLs | Country inferred from host |
skuIds | array | no | — | Best Buy SKU IDs | Scrape specific products directly |
fetchProductDetails | boolean | no | false | true / false | Enrich with details; adds product-details event |
countryCode | string | no | US | US, CA | Market for query-based input |
zipCode | string | no | 55423 | US ZIP or CA postal | Pricing/availability context |
storeId | string | no | "" | store id | Preferred store for pickup context |
maxItems | integer | no | 0 | 0 = unlimited | Maximum products to scrape |
proxyConfiguration | object | no | residential proxy | proxy settings | Residential proxies are recommended |
Minimal request:
{"searchQueries": ["laptop"],"countryCode": "US","maxItems": 25,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Advanced request (details enrichment):
{"startUrls": [{"url": "https://www.bestbuy.com/site/all-electronics-on-sale/all-apple-on-sale/pcmcat1688758488330.c?id=pcmcat1688758488330"}],"fetchProductDetails": true,"countryCode": "US","zipCode": "55423","maxItems": 5,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Retrieve the data through the API
- Start the Actor with a JSON input (see above).
- Wait for the run to finish.
- Retrieve items from the run's default dataset.
- Paginate or export the dataset.
Python example:
import jsonimport urllib.requestAPI_TOKEN = "<your Apify API token>"ACTOR_ID = "datascrapers/best-buy-scraper"payload = {"searchQueries": ["laptop"],"countryCode": "US","maxItems": 25,"proxyConfiguration": {"useApifyProxy": True, "apifyProxyGroups": ["RESIDENTIAL"]},}req = urllib.request.Request(f"https://api.apify.com/v2/acts/{ACTOR_ID}/runs?token={API_TOKEN}",data=json.dumps(payload).encode(),headers={"Content-Type": "application/json"},)with urllib.request.urlopen(req) as resp:run = json.loads(resp.read())["data"]dataset_id = run["defaultDatasetId"]with urllib.request.urlopen(f"https://api.apify.com/v2/datasets/{dataset_id}/items?token={API_TOKEN}") as resp:items = json.loads(resp.read())
For other languages, use the generated API tab on the Actor's page.
Data quality and record handling
- Conditional fields — detail fields (description, features, specifications, images, reviews) appear only when
fetchProductDetailsis enabled and Best Buy exposes them. - Nullable values —
ratingAverage,ratingCount, andregularPricemay be absent for some products. - Deduplication —
skuIdis the stable, recommended unique key.bsinandurlare also unique. - Retries and errors — requests are retried; a product that fails to load is skipped rather than partially written.
- Normalization —
priceandregularPriceare numeric;currencyis a separate field, so prices are already machine-readable.
The Actor reflects Best Buy's catalog at run time and does not provide price history.
Export and pipeline examples
| Destination | Recommended method | Typical use |
|---|---|---|
| PostgreSQL/Supabase | Dataset API or webhook consumer | Product catalog keyed by skuId |
| Google Sheets | Apify integration | Review a small result set |
| S3/cloud storage | Scheduled export or integration | Daily price/availability snapshots |
| BI tools | CSV/JSON export | Price and rating trend analysis |
Pricing and cost examples
The Actor uses pay-per-event billing. Two charge events apply:
dataset-item— $3.00 per 1,000 product records returned.product-details— $4.00 per 1,000 products whenfetchProductDetailsis enabled (in addition to the listing event).
Apify plan discounts (Bronze/Silver/Gold) reduce these rates.
| Records | Estimated base cost |
|---|---|
| 1,000 products | $3.00 |
| 10,000 products | $30.00 |
| 10,000 products + details | $70.00 |
Estimates assume the free-tier rate and no proxy markup; actual cost depends on your Apify plan and selected options.
Limitations and responsible data use
- The Actor collects publicly accessible product data only; it does not bypass login or paywalls.
- Results depend on Best Buy's current page structure; site changes can require Actor updates.
- Some fields are conditional or nullable (see Data dictionary).
- The Actor returns a sample of reviews per product, not the full review history.
- The Actor does not retain historical snapshots unless you store them yourself.
- You are responsible for complying with Best Buy's terms of service and applicable privacy and contractual obligations.
Dataset questions
What does one dataset item represent?
One Best Buy product, optionally enriched with full product-page details.
Which field should I use as a unique identifier?
skuId. bsin and url are also unique per product.
Are fields nullable or conditional?
Yes. Rating and regular price may be null. Detail fields appear only when fetchProductDetails is enabled.
Can I retrieve the records as CSV or JSON?
Yes. The default dataset supports JSON, CSV, Excel, and XML exports, and the Dataset API returns JSON.
How do I paginate large datasets?
Set maxItems to bound the run, or paginate the default dataset via the Dataset API.
What counts as a billable result?
Each product returned counts as one dataset-item. Enabling fetchProductDetails adds one product-details event per product.
Related datasets from Data Scrapers
- Amazon Search Scraper — Amazon product records for cross-retailer price comparison.
- HomeDepot Scraper — home-improvement product data with stock levels.
- Clutch.co Company Scraper — company ratings for joining with product brands and manufacturers.
- LinkedIn Company Scraper — company records for vendor and brand analysis.
Data Scrapers support
Need an additional field, record type, or export workflow? Contact Data Scrapers at stardustspotlight@gmail.com. Include a sample source URL, required fields, expected record volume, and preferred delivery format.