Best Buy Product Scraper avatar

Best Buy Product Scraper

Pricing

from $2.70 / 1,000 product scrapeds

Go to Apify Store
Best Buy Product Scraper

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

Farhan Ali

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

3 days ago

Last modified

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

PropertyValue
SourceBest Buy (bestbuy.com, bestbuy.ca)
Record unitOne product
Input methodssearchQueries, startUrls, skuIds
Main identifiersskuId, bsin, url
DeliveryApify Dataset and API
Export formatsJSON, CSV, Excel, XML, HTML
Update modelFresh 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 queriessearchQueries accepts terms like "laptop" or "airpods", resolved against the selected market.
  • Start URLsstartUrls accepts category, search, or product URLs; the country is inferred from the host.
  • Direct SKUsskuIds scrapes specific products by Best Buy SKU.
  • Market selectioncountryCode selects US (bestbuy.com) or CA (bestbuy.ca) for query-based input.
  • Availability contextzipCode and optional storeId provide pricing/availability context for the destination area.
  • Listing-only vs. detailsfetchProductDetails (default false) returns listing/card fields only; when enabled, each product is enriched with description, features, specifications, gallery images, and sample reviews, adding the product-details charge event.
  • Result limitmaxItems caps 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):

FieldTypeNullableDescriptionExample
skuIdstringnoBest Buy SKU; recommended deduplication key12349296
bsinstringyesBest Buy internal item identifier...
titlestringnoProduct titleHP - 14" Laptop - Intel N150...
brandstringyesBrand nameHP
modelNumberstringyesManufacturer model number...
urlstringyesProduct page URLhttps://www.bestbuy.com/...
imagestringyesPrimary image URLhttps://pisces.bbystatic.com/...jpg
pricenumberyesCurrent sale price249.0
regularPricenumberyesRegular/list price299.0
currencystringyesCurrency codeUSD
priceMessagestringyesDisplay price message...
savingsnumberyesAbsolute savings50.0
savingsPercentnumberyesSavings percentage17
ratingAveragenumberyesAverage rating4.5
ratingCountintegeryesNumber of ratings1200
conditionstringyesProduct conditionNew
availabilitystringyesDisplay availability statusIn Stock
sellerId / sellerClassificationstringyesSeller identifiers...
badgesarrayyesPromotional badge labels["Top Rated"]
countryCodestringyesMarket codeUS
sourceQuerystringyesQuery or source usedlaptop
detailsFetchedbooleannoWhether detail enrichment succeededfalse
scrapedAtstringyesISO timestamp2026-07-27T10:03:14.296336+00:00

Detail fields (present when fetchProductDetails is enabled and the page yields them):

FieldTypeNullableDescriptionExample
descriptionstringyesLong or short product description...
featuresarrayyesFeature objects with title and description[{"title":"...","description":"..."}]
specificationsarrayyesSpec objects with group, name, value, definition[{"group":"Display","name":"Size","value":"14\""}]
imagesarrayyesGallery image URLs["https://...jpg"]
colorstringyesColor display nameNatural Silver
includedItemsarrayyesItems included in the box["Power adapter"]
whatItIsstringyesShort product blurb...
disclaimersarrayyesProduct disclaimers[...]
manualsarrayyesManual objects with url, type, language[{"url":"...","type":"Manual"}]
dimensionobjectyesdepth, height, width, weight{"weight":"2.0 lb"}
sampleReviewsarrayyesReview 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

InputTypeRequiredDefaultAccepted valuesDescription
searchQueriesarrayno["laptop"]product termsSearch terms against the selected market
startUrlsarraynocategory/search/product URLsCountry inferred from host
skuIdsarraynoBest Buy SKU IDsScrape specific products directly
fetchProductDetailsbooleannofalsetrue / falseEnrich with details; adds product-details event
countryCodestringnoUSUS, CAMarket for query-based input
zipCodestringno55423US ZIP or CA postalPricing/availability context
storeIdstringno""store idPreferred store for pickup context
maxItemsintegerno00 = unlimitedMaximum products to scrape
proxyConfigurationobjectnoresidential proxyproxy settingsResidential 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

  1. Start the Actor with a JSON input (see above).
  2. Wait for the run to finish.
  3. Retrieve items from the run's default dataset.
  4. Paginate or export the dataset.

Python example:

import json
import urllib.request
API_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 fetchProductDetails is enabled and Best Buy exposes them.
  • Nullable valuesratingAverage, ratingCount, and regularPrice may be absent for some products.
  • DeduplicationskuId is the stable, recommended unique key. bsin and url are also unique.
  • Retries and errors — requests are retried; a product that fails to load is skipped rather than partially written.
  • Normalizationprice and regularPrice are numeric; currency is 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

DestinationRecommended methodTypical use
PostgreSQL/SupabaseDataset API or webhook consumerProduct catalog keyed by skuId
Google SheetsApify integrationReview a small result set
S3/cloud storageScheduled export or integrationDaily price/availability snapshots
BI toolsCSV/JSON exportPrice 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 when fetchProductDetails is enabled (in addition to the listing event).

Apify plan discounts (Bronze/Silver/Gold) reduce these rates.

RecordsEstimated 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.

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.