# Best Buy Product Scraper (`scraptivo/best-buy-scraper`) Actor

Collects Best Buy US and Canada product data — prices, savings, ratings, availability, and seller info — by search query, category URL, or SKU ID. Optionally enriches each item with full product-page details including descriptions, specifications, and sample reviews.

- **URL**: https://apify.com/scraptivo/best-buy-scraper.md
- **Developed by:** [Scraptivo](https://apify.com/scraptivo) (community)
- **Categories:** E-commerce, MCP servers, Agents
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.70 / 1,000 product scrapeds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

**Best Buy Product Scraper** collects product records from Best Buy US and Canada — prices, savings, ratings, availability, and seller details — and turns them into structured data for price monitoring, competitive research, and catalog building. Enter a search query, category URL, or SKU ID, run the Actor, and export records to JSON, CSV, Excel, or your own integration. Use it to track deals, compare assortments, and monitor stock. Pay per event: $3 per 1,000 products, or $4 per 1,000 with full product details.

### What can you automate with Best Buy Product Scraper?

- **Search by any method** — run search queries, paste category URLs, or provide SKU IDs across Best Buy US and Canada.
- **Track pricing and deals** — capture current price, regular price, savings amount and percentage, and deal badges.
- **Monitor ratings and reviews** — collect rating averages, review counts, and sample reviews with user nicknames and text.
- **Enrich with full product details** — optionally add descriptions, feature bullets, specifications, gallery images, and included items.
- **Cover both markets** — pull country-specific pricing and availability using a US ZIP or Canadian postal code.
- **Export anywhere** — download structured data as JSON, CSV, or Excel, or stream it through the Apify API.

### Who is this scraper for?

| Team | Workflow |
|---|---|
| Price-monitoring teams | Track Best Buy prices, savings, and deal frequency daily |
| Market researchers | Analyze product assortments, brands, and categories across electronics and appliances |
| E-commerce catalog builders | Build product databases with titles, images, prices, and identifiers |
| Competitive analysts | Compare ratings, feature sets, and seller types across brands |

### What data can you collect from Best Buy?

| Data group | Example fields | How it helps |
|---|---|---|
| Product identity | `skuId`, `title`, `brand`, `modelNumber`, `url` | Match and deduplicate products by their SKU |
| Price & deals | `price`, `regularPrice`, `savings`, `savingsPercent`, `priceMessage`, `currency` | Spot discounts and promotional context |
| Ratings & availability | `ratingAverage`, `ratingCount`, `availability`, `condition` | Gauge popularity and stock status |
| Enrichment | `description`, `features`, `specifications`, `color`, `badges` | Add full product-page detail when enabled |
| Reviews & sellers | `sampleReviews`, `countryCode` | Capture sample review text and market |

*Detail and review fields are only returned when `fetchProductDetails` is enabled.*

### How to use Best Buy Product Scraper

1. Open the Actor on Apify.
2. Add a search query (for example "laptop"), paste a Best Buy category URL, or enter SKU IDs.
3. Set the country (US or Canada) and a ZIP or postal code.
4. Toggle `fetchProductDetails` if you need full descriptions and specifications.
5. Run the Actor and export the dataset to JSON, CSV, or Excel.

```json
{
    "searchQueries": ["laptop"],
    "countryCode": "US",
    "zipCode": "55423",
    "maxItems": 25,
    "fetchProductDetails": true
}
```

### Example workflow

#### Track competitor pricing across a product category

1. Run a category URL or search query every day for the categories you watch.
2. Keep records where `savings` or `savingsPercent` changed, or where the price moved.
3. Send changed records to Google Sheets or a pricing dashboard.
4. Deduplicate using the stable `skuId` value.

### Automate and integrate your results

- **Schedules** — run daily for price monitoring, or hourly during major sales events; keep `maxItems` bounded to control cost.
- **Webhooks** — trigger a webhook on run completion to update a database, spreadsheet, or notification pipeline automatically.
- **Integrations** — push results to Google Sheets, Make, Zapier, Slack, a CRM, or cloud storage, or call the Actor from the Apify API.
- **Deduplication** — each product is identified by its `skuId`; deduplicate runs on `skuId` before ingesting.

### Input reference

| Field | Type | Required | Default | What it controls |
|---|---|---|---:|---|
| `searchQueries` | array | optional | — | Product search terms, e.g. "laptop", "airpods" |
| `startUrls` | array | optional | — | Best Buy category, search, or product URLs |
| `skuIds` | array | optional | — | Best Buy SKU IDs to collect directly |
| `fetchProductDetails` | boolean | optional | false | Fetch full product-page details (descriptions, specs, reviews) |
| `countryCode` | string | optional | US | Market: `US` (bestbuy.com) or `CA` (bestbuy.ca) |
| `zipCode` | string | optional | 55423 | ZIP or postal code for pricing and availability context |
| `storeId` | string | optional | "" | Preferred store location for pickup context |
| `maxItems` | integer | optional | 0 | Maximum products to collect (0 = unlimited) |
| `proxyConfiguration` | object | optional | residential | Proxy settings for reliable Best Buy access |

#### Which country does the Actor use?

`countryCode` controls the market for `searchQueries` and bare SKU or category IDs: `US` uses bestbuy.com and `CA` uses bestbuy.ca. When you provide a `startUrls` URL, the host in the URL takes priority and `countryCode` is ignored.

### Output example

```json
{
    "skuId": "6667474",
    "title": "HP - 14\" Laptop - Intel N150 Processor - 4GB Memory - 128GB UFS - Natural Silver",
    "brand": "HP",
    "modelNumber": "14-dq6101dx",
    "url": "https://www.bestbuy.com/product/hp-14-laptop-intel-n150-processor-4gb-memory-128gb-ufs-natural-silver/JJGW3FGFPZ/sku/6667474",
    "image": "https://pisces.bbystatic.com/image2/BestBuy_US/images/products/3bd638b3-4542-4115-8e43-34faa18a2382.jpg",
    "price": 189.99,
    "regularPrice": 349.99,
    "currency": "USD",
    "priceMessage": "Black Friday in July Deal",
    "savings": 160,
    "savingsPercent": 45,
    "ratingAverage": 4.4,
    "ratingCount": 269,
    "availability": "active",
    "condition": "new",
    "countryCode": "US",
    "detailsFetched": true,
    "badges": ["Trending Deal", "Core essentials PC"],
    "features": [
        { "title": "14-in HD display", "description": "Watch videos and create colorful presentations" },
        { "title": "Intel N150 Processor", "description": "Improved graphics and performance for everyday tasks" }
    ],
    "specifications": [
        { "group": "Key Specs", "name": "Screen Size", "value": "14 inches" },
        { "group": "Key Specs", "name": "Processor Model", "value": "Intel Processor N150" }
    ],
    "sampleReviews": [
        { "rating": 5, "title": "Hp lapstop", "text": "working great for what i need love the color of it", "userNickname": "Blkbama" }
    ]
}
```

### How much does it cost to scrape Best Buy?

The Actor uses pay-per-event billing, so you pay only for the data you receive:

- **$3 per 1,000 products** — charged as a `dataset-item` event for listing-level data (title, price, rating, SKU, availability).
- **$4 per 1,000 products** — charged as a `product-details` event when `fetchProductDetails` is enabled, adding descriptions, specifications, gallery images, and sample reviews.

A run also charges a one-time $0.00005 actor-start event. Higher Apify plans (Bronze, Silver, Gold) apply discounted per-event rates.

### Reliability and responsible use

- **Proxy** — a residential proxy is recommended for reliable access; the default configuration enables Apify Residential.
- **Enrichment controls** — full product details are only collected when `fetchProductDetails` is enabled, keeping listing-only runs faster and cheaper.
- **Conditional fields** — description, features, specifications, and sample reviews are empty unless details are enabled.
- **Public data** — the Actor collects publicly listed product and review information.
- **Lawful use** — you are responsible for using collected data in line with Best Buy's terms and applicable laws.

### Frequently asked questions

#### Can I scrape both Best Buy US and Canada?

Yes. Set `countryCode` to `US` or `CA`, or provide `startUrls` from either host. `zipCode` accepts a US ZIP or Canadian postal code for local pricing context.

#### What is the difference between listing data and full details?

Listing data returns card-level fields such as price, rating, SKU, and availability. Enable `fetchProductDetails` to also collect descriptions, features, specifications, gallery images, and sample reviews, billed at a higher per-event rate.

#### What counts as one result?

Each product saved to the dataset bills one `dataset-item` event. With `fetchProductDetails` enabled, the same product also bills a `product-details` event.

#### Why are some fields empty?

Description, features, specifications, and sample reviews only appear when `fetchProductDetails` is enabled. Some products may also lack ratings, savings, or a regular price when Best Buy does not publish them.

#### How do I avoid duplicate records?

Deduplicate by `skuId`, which is stable across runs. You can also cap output with `maxItems`.

#### Do I need a proxy?

Best Buy may block requests without one. Keep the default Apify Residential proxy enabled in `proxyConfiguration` for reliable results.

### Related Scraptivo automations

- **[Amazon Product Scraper](https://apify.com/scraptivo/amazon-product-scraper)** — collect Amazon product data, prices, and seller details.
- **[Amazon Search Scraper](https://apify.com/scraptivo/amazon-scraper)** — extract Amazon search results by query.
- **[Costco Product Scraper](https://apify.com/scraptivo/costco-scraper)** — collect Costco products, prices, ratings, and availability.
- **[HomeDepot Scraper](https://apify.com/scraptivo/homedepot-scraper)** — extract HomeDepot product data by collection URL and ZIP code.
- **[Target.com Product Scraper](https://apify.com/scraptivo/target-scraper)** — collect Target products, prices, ratings, and reviews.

### Support and custom workflows

Need a different field, source, or delivery workflow? Contact Scraptivo at scraptivo@gmail.com. Include the Actor name, a sample URL, the required fields, and expected volume so we can assess the request.

# Actor input Schema

## `searchQueries` (type: `array`):

Product search terms (e.g. "laptop", "airpods"). Uses the selected country shop. Provide searchQueries and/or startUrls and/or skuIds.

## `startUrls` (type: `array`):

Best Buy category, search, or product URLs (e.g. https://www.bestbuy.com/site/all-electronics-on-sale/all-apple-on-sale/pcmcat1688758488330.c?id=pcmcat1688758488330). Country is inferred from the host when possible.

## `skuIds` (type: `array`):

Best Buy SKU IDs to scrape directly (optional).

## `fetchProductDetails` (type: `boolean`):

When enabled, loads full product-page details (description, features, specifications, gallery images, sample reviews) and charges the product-details event. When disabled, returns listing/card fields only (faster).

## `countryCode` (type: `string`):

Best Buy market used for searchQueries and bare SKU/category ids when no start URL sets the host. Ignored for startUrls (host wins).

## `zipCode` (type: `string`):

Destination ZIP/postal code used for pricing and availability context (US ZIP or Canadian postal).

## `storeId` (type: `string`):

Optional preferred Best Buy store location id for pickup/availability context.

## `maxItems` (type: `integer`):

Maximum number of products to scrape (0 = unlimited)

## `proxyConfiguration` (type: `object`):

Proxy settings for anti-bot protection. Residential proxies are recommended.

## Actor input object example

```json
{
  "searchQueries": [
    "laptop"
  ],
  "startUrls": [
    {
      "url": "https://www.bestbuy.com/site/all-electronics-on-sale/all-apple-on-sale/pcmcat1688758488330.c?id=pcmcat1688758488330"
    }
  ],
  "fetchProductDetails": false,
  "countryCode": "US",
  "zipCode": "55423",
  "storeId": "",
  "maxItems": 25,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Dataset containing scraped Best Buy products

## `runStats` (type: `string`):

Aggregate scrape statistics for this run

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchQueries": [
        "laptop"
    ],
    "startUrls": [
        {
            "url": "https://www.bestbuy.com/site/all-electronics-on-sale/all-apple-on-sale/pcmcat1688758488330.c?id=pcmcat1688758488330"
        }
    ],
    "zipCode": "55423",
    "maxItems": 25,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scraptivo/best-buy-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchQueries": ["laptop"],
    "startUrls": [{ "url": "https://www.bestbuy.com/site/all-electronics-on-sale/all-apple-on-sale/pcmcat1688758488330.c?id=pcmcat1688758488330" }],
    "zipCode": "55423",
    "maxItems": 25,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("scraptivo/best-buy-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQueries": [
    "laptop"
  ],
  "startUrls": [
    {
      "url": "https://www.bestbuy.com/site/all-electronics-on-sale/all-apple-on-sale/pcmcat1688758488330.c?id=pcmcat1688758488330"
    }
  ],
  "zipCode": "55423",
  "maxItems": 25,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call scraptivo/best-buy-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scraptivo/best-buy-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/4ZglI2v6W6M6veikN/builds/Inbs804z7p39Lil3e/openapi.json
