# Best Buy Scraper \[Only $1/1k💰] | Price Data | Deals & Savings (`ahmed_jasarevic/bestbuy-scraper`) Actor

Scrape Best Buy product data without an API key: prices, savings %, ratings, availability, SKU/model and images. For price monitoring, deal tracking and electronics market research. Fast HTTP-only scraper, no browser needed.

- **URL**: https://apify.com/ahmed\_jasarevic/bestbuy-scraper.md
- **Developed by:** [Ahmed Jasarevic](https://apify.com/ahmed_jasarevic) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 Scraper — Product Data, Price & Deal Tracking

Scrape Best Buy product data without a browser or API key: title, SKU/model, current and original price, savings %, rating, review count, availability, brand, category and images — for price monitoring, deal tracking, retail arbitrage, and electronics market research.

### Main Use Cases

- **Best Buy price monitoring** — track `currentPrice` vs `regularPrice` and `totalSavingsPercent` over time to catch price drops the day they appear
- **Deal and clearance tracking** — run on a schedule around promos and Black Friday to capture sale flags and savings as they change
- **Retail arbitrage sourcing** — identify discounted electronics (clearance, sale items) for resale with structured savings data
- **Electronics price comparison** — join on `modelNumber` across retailers to compare Best Buy vs Amazon and Walmart prices
- **Affiliate content enrichment** — titles, brands, model numbers, ratings, review counts and image URLs for buying guides
- **Stock and availability monitoring** — ZIP-level `availability`/`inStock` states for restock alerts and local store checks

### What Product Data Does the Best Buy Scraper Extract?

One structured row per product from server-rendered search JSON — no browser, no DOM scraping. Fields include `title`, `brand`, `skuId`, `bsin`, `modelNumber`, `currentPrice`, `regularPrice`, `totalSavings`, `totalSavingsPercent`, `onSale`, `currency`, `averageRating`, `reviewCount`, `availability`, `inStock`, `categoryPath`, `primaryImage`, `images`, `sellerName`, `url`, `detailLevel`, `scrapedAt`.

The data comes from the SSR JSON anchored at `"buyingOptions":[{...}]` that Best Buy embeds in every search result page — extracted with bounded-window parsing. That's why the actor is HTTP-only and fast: a search page returns in ~3 seconds with its product rows.

### Best Buy API Alternative — No Approval, No Rate-Limit Firehose

Best Buy does offer a developer/affiliate Products API (`api.bestbuy.com`), but it is **approval-gated, rate-limited, and not a live-price firehose**. This actor reads the live storefront directly instead: no API key, no approval process, no account — just search keywords in, structured product rows out, with real-time storefront prices and savings.

### Track Best Buy Prices And Sales Automatically

Each row carries the full pricing block: `currentPrice`, `regularPrice`, `totalSavings`, `totalSavingsPercent`, and `onSale`. Schedule **hourly runs during deal windows** (Black Friday, Cyber Monday, Prime Day alternatives) and diff prices across snapshots to build your own Best Buy price tracker with savings history. Prices and availability update live, so `zipCode` lets you scope stock to a real store area.

### Find Best Buy Deals And Clearance Items For Resale

Search terms like `clearance`, `deal of the day`, and `open box` surface discounted listings with structured `totalSavingsPercent` and `onSale` flags. For retail arbitrage, combine with the `modelNumber` join key to check resale value on other marketplaces — or pull a broad electronics dataset for market analysis.

### Input

| Field | Type | Required | Default | Notes |
|-------|------|----------|---------|-------|
| `searchQueries` | string\[] | No | 12 queries (airpods, laptop, oled tv, ...) | Keywords searched on bestbuy.com; volume scales with query count |
| `maxResults` | integer | No | `10` | Cap on product rows per result page (max 200) |
| `maxPages` | integer | No | `5` | Result pages per query; stops early when no new products appear (max 30) |
| `zipCode` | string | No | `10001` | US ZIP sent as location cookie so availability reflects a real store area |
| `maxConcurrency` | integer | No | `2` | Parallel requests; keep 1–3, Akamai throttles aggressive IPs |
| `maxRequestsPerCrawl` | integer | No | `200` | Hard cap on total HTTP requests per run |
| `proxyConfiguration` | object | No | US residential (BUYPROXIES94952) | US residential strongly recommended; datacenter IPs are blocked/tarpitted |
| `debugDumpHtml` | boolean | No | `false` | Diagnostic only: dump raw HTML to key-value store instead of scraping |

### Output

One JSON row per product. Key fields:

| Field | Type | Description |
|-------|------|-------------|
| `skuId` / `bsin` | string | Best Buy SKU + 10-char canonical variant-group ID |
| `title` / `brand` / `modelNumber` | string | Product identity; `modelNumber` is the cross-retailer join key |
| `currentPrice` / `regularPrice` / `totalSavings` / `totalSavingsPercent` / `onSale` | number/bool | Full pricing block for repricers and deal trackers |
| `averageRating` / `reviewCount` | number | Social proof for affiliates and researchers |
| `availability` / `inStock` | string/bool | Normalized stock state + boolean |
| `categoryPath` | string\[] | Breadcrumb taxonomy for assortment analysis |
| `primaryImage` / `images` | string/string\[] | Product image URL(s) |
| `sellerName` | string | `Best Buy` for 1P offers, marketplace seller class otherwise |
| `url` / `detailLevel` / `scrapedAt` | string | Product URL, `listing` level, timestamp |

### Example Input

```json
{
  "searchQueries": ["airpods", "oled tv", "headphones"],
  "maxResults": 10,
  "maxPages": 5,
  "zipCode": "10001",
  "maxConcurrency": 2,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["BUYPROXIES94952"],
    "apifyProxyCountry": "US"
  }
}
```

### Example Output

```json
{
  "url": "https://www.bestbuy.com/product/apple-airpods-pro-3-wireless-active-noise-cancelling-earbuds-with-heart-rate-sensing-feature-white/JJGCQLYK5F/sku/6376563",
  "detailLevel": "listing",
  "skuId": "6376563",
  "bsin": "JJGCQLYK5F",
  "title": "Apple - AirPods Pro 3, Wireless Active Noise Cancelling Earbuds with Heart Rate Sensing Feature - White",
  "brand": "Apple",
  "modelNumber": "MFHP4LL/A",
  "currentPrice": 249.99,
  "regularPrice": 249.99,
  "totalSavings": 0,
  "totalSavingsPercent": 0,
  "currency": "USD",
  "onSale": false,
  "averageRating": 4.8,
  "reviewCount": 10819,
  "availability": "InStock",
  "inStock": true,
  "categoryPath": ["Headphones", "Wireless Headphones"],
  "primaryImage": "https://pisces.bbystatic.com/image2/BestBuy_US/images/products/c3abe0d2-3129-4e47-8904-aadaf47eb4af.jpg",
  "sellerName": "Best Buy",
  "scrapedAt": "2026-09-05T13:53:07.299Z"
}
```

### Cost of Scraping Best Buy

Pay-per-event: **$0.005 per actor start + $0.001 per product row** (≈ $1.00 per 1 000 products). The actor is HTTP-only — roughly one page fetch per result page, each in ~3 seconds. The main variable cost is **US residential proxy traffic** (Best Buy's Akamai setup tarpits datacenter and burned IPs). Free Apify users get a 10-product preview per run.

### Integrations & Automation

Every run writes to an Apify dataset:

- Download as **JSON, CSV, Excel, XML**, or **HTML**
- Push to **Google Sheets**, **Airtable**, **PostgreSQL**, **Snowflake**, or **BigQuery** via Apify integrations
- Trigger via **Zapier**, **Make**, or Apify **webhooks**
- Call from the Apify **REST API** (any language) or **Python/JS SDKs**

Prices move fast around promos — schedule **hourly runs during deal windows** and **daily runs** otherwise to keep price, deal, and restock data fresh. Recurring usage also improves the actor's Apify Store ranking.

### Related Actors

- [Best Buy Scraper by crawlerbros](https://apify.com/crawlerbros/bestbuy-scraper) — direct category peer: keyword/URL Best Buy scraping
- [Amazon Product Scraper](https://apify.com/junglee/Amazon-crawler) — official Apify actor for the US retail benchmark (22k+ users)
- [Amazon Products Scraper with Sales Data](https://apify.com/automly/amazon-products-scraper---fast-efficient-with-sales-data) — Amazon prices, BSR and sales estimates (⭐ 5.00)
- [Walmart Product Detail Scraper](https://apify.com/e-commerce/walmart-product-detail-scraper) — official Apify actor for the other US big-box peer
- [Walmart Fast Product Scraper](https://apify.com/e-commerce/walmart-fast-product-scraper) — fast HTTP Walmart search/category scraping (⭐ 5.00)

Together these cover the US retail price-data cluster: Best Buy, Amazon, and Walmart — with `modelNumber` / SKU as the cross-retailer join keys.

### FAQ

#### Does Best Buy have a public API, and how do I use it?

Best Buy has a developer/affiliate Products API (`api.bestbuy.com`), but it requires approval, is rate-limited, and is not designed as a live-price firehose. This actor is the practical alternative: no API key, no approval — it reads the live storefront's server-rendered product data directly.

#### How do I track Best Buy prices and get alerts when they drop?

Run this actor on a schedule (hourly during promos), and diff `currentPrice`/`totalSavingsPercent` across dataset snapshots. Combine with Apify webhooks or Zapier to build your own price-drop alert pipeline.

#### Is there a price history tracker for Best Buy like CamelCamelCamel for Amazon?

No dedicated CamelCamelCamel-style service covers Best Buy well. This actor gives you the raw data to build one: periodic snapshots keyed by `skuId` give you your own price history database for any Best Buy product.

#### Is it legal to scrape Best Buy product data?

Scraping publicly visible catalog data is broadly lawful, but Best Buy's Terms of Service apply — keep request volumes reasonable (low concurrency, polite pacing) and take your own legal advice for your use case.

#### How do I build a Best Buy price tracker with Python?

Run this actor via the Apify REST API or `apify-client` Python SDK, paginate the dataset, and store rows keyed by `skuId`. Hourly runs + a simple SQLite/Postgres table give you a complete price-history tracker.

#### What anti-bot protection does Best Buy use, and how does this scraper work around it?

Best Buy uses Akamai Bot Manager. Datacenter IPs are blocked or tarpitted (socket hang-ups, 90s+ stalls). The actor stays on the fast server-rendered search surface, uses the US residential proxy group, keeps concurrency at 1–3, and rotates sessions around flaky residential peers.

#### How do I compare Best Buy prices with Amazon and other retailers?

Match on `modelNumber`/SKU: scrape Best Buy with this actor and Amazon/Walmart with the related actors above, then join rows on the model key. `currentPrice`, `regularPrice`, and `totalSavingsPercent` are consistent across sources.

#### When are the best times to buy electronics at Best Buy for the lowest prices?

Seasonal events — Black Friday, Cyber Monday, and competing deal weeks — show the deepest `totalSavingsPercent`. Scheduling deal-window runs and diffing snapshots captures the lows empirically instead of guessing.

#### How do retail arbitrage sellers find and flip Best Buy clearance deals?

Search `clearance` and `open box` queries, filter rows where `onSale` is true and `totalSavingsPercent` is high, then check resale value on other marketplaces using the model number. Structured savings data makes sourcing repeatable.

#### What are the best ecommerce price monitoring tools and APIs for tracking competitor prices?

For Best Buy specifically, this actor is the direct data source. For cross-retailer monitoring, combine it with the Amazon and Walmart actors in Related Actors — or use hosted tools like Prisync/Keepa for managed tracking.

#### How does Best Buy's price match guarantee work, and can I use it with Amazon's prices?

Best Buy price-matches select online retailers including Amazon on identical in-stock items (with exceptions during Black Friday). The `modelNumber` data this actor returns is exactly what you need to verify matchable identical products.

#### What data can I extract from Best Buy using scraping or the official API?

Title, brand, SKU/BSIN, model number, current + original price, savings amount and %, sale flag, currency, rating, review count, availability, in-stock state, category path, image gallery, seller name, URL, and price-availability timestamp.

### For AI Agents & LLM Apps

**Purpose:** Returns structured Best Buy product rows (title, SKU, current/original price, savings %, rating, stock, images) from search keywords — for price tracking, deal hunting, and electronics market data.

**Minimal input:**

```json
{ "searchQueries": ["oled tv"], "maxResults": 10 }
```

**Variant inputs:**

```json
{ "searchQueries": ["airpods", "laptop", "headphones"], "maxResults": 10, "maxPages": 5, "zipCode": "10001" }
```

```json
{ "searchQueries": ["clearance", "deal of the day"], "maxResults": 20, "maxPages": 10 }
```

**Output fields (subset notable):** `title`, `brand`, `skuId`, `bsin`, `modelNumber`, `currentPrice`, `regularPrice`, `totalSavings`, `totalSavingsPercent`, `onSale`, `currency`, `averageRating`, `reviewCount`, `availability`, `inStock`, `categoryPath`, `primaryImage`, `images`, `sellerName`, `url`.

**Behaviors an agent should know:**

- Volume scales with **query count**, not `maxResults` — each search page yields a handful of featured products (~4), so for broad sweeps pass many `searchQueries`.
- `maxPages` pagination stops early when pages return no new SKUs — harmless, but don't mistake early stop for failure.
- Pricing fields are numeric typed (`currentPrice`: number); `onSale`/`totalSavingsPercent` identify deal items. There is **no price history** in a single row — history requires scheduled snapshots joined on `skuId`.
- `zipCode` changes availability/in-stock results — pass the ZIP of interest, not a random one.
- Keep `maxConcurrency` at 1–3 and proxy on `BUYPROXIES94952` (US residential) — datacenter egress gets Akamai-blocked.
- Billing: $0.005 per start + $0.001 per result row ≈ $0.015 for a 10-item run (plus residential proxy GB traffic; free users capped at 10 items).

### Competitive Positioning

| Capability | Competitor Best Buy scrapers | This actor |
|---|---|---|
| Price per 1 000 products | $2–$4 (cirkit $0.002/product, sovereign $0.004/product, datascrapers $3.00/1k) | **$1.00/1k** |
| Engine | Some use GraphQL/browser (heavier, tarpitted by Akamai) | HTTP-only CheerioCrawler on the fast SSR surface |
| No browser / no API key | Mixed | Yes — embedded-JSON extraction only |
| Dedupe by SKU, early-stop pagination | Mixed | Built in |

### Legal & Compliance Disclaimer

This actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Best Buy Co., Inc. It accesses only publicly visible search-result pages on bestbuy.com and their embedded structured data — no login bypass, no CAPTCHA solving, no order or account data. Users are responsible for complying with Best Buy's Terms of Service, robots.txt, and applicable law.

### SEO Keywords

best buy scraper, best buy product scraper, best buy price scraper, best buy api, best buy price tracker, scrape best buy products, best buy product data, best buy deal tracker, best buy price monitoring, electronics price scraper, retail price scraping, best buy sku data, best buy availability checker, ecommerce product scraper, price comparison scraper, electronics market research data, best buy sale price tracker, retail arbitrage tools electronics, amazon price tracker alternative, best buy restock alerts, dynamic pricing ecommerce data, best buy black friday scraper

# Actor input Schema

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

Keywords to search on bestbuy.com. Each query returns the SSR-rendered product rows (price, rating, stock, images). Volume scales with the number of queries — add more for more products.

## `maxResults` (type: `integer`):

Cap on product rows pushed per search result page (each page holds a handful of fully-rendered items).

## `maxPages` (type: `integer`):

Result pages fetched per search query (page 1 plus follow-ups while new products appear). Search pages are fast; raise for more products. The chain stops early when a page yields nothing new.

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

US ZIP code sent as location cookie so availability reflects a real store area (e.g. 10001).

## `maxConcurrency` (type: `integer`):

Parallel requests. Keep low (1-3): Best Buy Akamai Bot Manager throttles aggressive IPs.

## `maxRequestsPerCrawl` (type: `integer`):

Hard cap on total HTTP requests per run (loop safety).

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

Proxy settings. The BUYPROXIES94952 residential group is default: Best Buy Akamai-tarpits datacenter and burned IPs (socket hang-ups).

## `debugDumpHtml` (type: `boolean`):

Temporary diagnostic: store raw page HTML (up to 3 pages) to the key-value store instead of scraping. Do not use in production.

## Actor input object example

```json
{
  "searchQueries": [
    "airpods",
    "laptop",
    "oled tv",
    "headphones",
    "tablet",
    "smart watch",
    "monitor",
    "speaker",
    "keyboard",
    "ps5",
    "dyson",
    "air fryer"
  ],
  "maxResults": 10,
  "maxPages": 5,
  "zipCode": "10001",
  "maxConcurrency": 2,
  "maxRequestsPerCrawl": 200,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "BUYPROXIES94952"
    ],
    "apifyProxyCountry": "US"
  },
  "debugDumpHtml": false
}
```

# Actor output Schema

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

No description

# 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": [
        "airpods",
        "laptop",
        "oled tv",
        "headphones",
        "tablet",
        "smart watch",
        "monitor",
        "speaker",
        "keyboard",
        "ps5",
        "dyson",
        "air fryer"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("ahmed_jasarevic/bestbuy-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": [
        "airpods",
        "laptop",
        "oled tv",
        "headphones",
        "tablet",
        "smart watch",
        "monitor",
        "speaker",
        "keyboard",
        "ps5",
        "dyson",
        "air fryer",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("ahmed_jasarevic/bestbuy-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": [
    "airpods",
    "laptop",
    "oled tv",
    "headphones",
    "tablet",
    "smart watch",
    "monitor",
    "speaker",
    "keyboard",
    "ps5",
    "dyson",
    "air fryer"
  ]
}' |
apify call ahmed_jasarevic/bestbuy-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ahmed_jasarevic/bestbuy-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/1mn76xnXcWjz1WgqS/builds/ZW7TvGTKZTfI8rsRT/openapi.json
