# Best Buy Stock Checker: In-Store Inventory & Restock Alerts (`s_actors/best-buy-stock-checker`) Actor

Check Best Buy stock in the stores near any US ZIP code: in stock or not, units when 3 or fewer are left, pickup date, price and online status. Only Best Buy's own offer, no marketplace resellers. Scheduled runs return restocks, sell-outs and price drops for Pokémon cards, GPUs, consoles.

- **URL**: https://apify.com/s\_actors/best-buy-stock-checker.md
- **Developed by:** [Superior Actors](https://apify.com/s_actors) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### Best Buy Stock Checker: In-Store Inventory by ZIP & Restock Alerts

Check **Best Buy stock in the stores near any US ZIP code**: in stock or not, **how many are left when 3 or fewer**, pickup date, price and online status, for every product of a search or your own list of SKUs. Only **Best Buy's own offer**: marketplace resellers never hide a sold-out item. Scheduled runs with **Only report changes** return just restocks, sell-outs and price drops, with the **restock history of each store**.

Built for hard-to-find items: **Pokémon cards**, graphics cards (RTX 5090), consoles, LEGO, trading cards.

No login, no browser. Use it as a **Best Buy inventory API**: one call returns clean JSON.

#### What makes it different

| | |
| --- | --- |
| 🏬 **Stock in each store near you** | One row per product and store: in stock, stock level, **exact units when 3 or fewer are left**, pickup date, distance. Up to 25 stores around a ZIP code, or exact store numbers |
| 🛡️ **Best Buy's own offer only** | Best Buy's marketplace shows resellers first on hot items: the Pokémon *Chaos Rising* Elite Trainer Box appears at **$97.99** from a reseller while Best Buy's own offer is **$49.99** (and sold out). This Actor checks Best Buy's own SKU, so "in stock" means Best Buy has it at Best Buy's price |
| 🔔 **Restock alerts with history** | Only-changes mode returns `back_in_stock`, `out_of_stock`, `low_stock`, `online_back_in_stock`, `now_available`, `price_drop`. Every change row carries how many restocks this monitor has seen at that store, the last one, and the **usual restock weekday** |
| 🌐 **Online status too** | Button state as on the site (Add to Cart, Sold Out, In-Store Only, Coming Soon, Pre-Order) and whether it ships |
| 🔎 **Any input** | Keywords, bestbuy.com search or category links (with filters), SKUs or product links |

#### Use cases

- **Pokémon card restock tracker**: Elite Trainer Boxes, booster bundles and tins Best Buy sells itself (in-store only), in your stores, every 15-30 minutes
- **GPU and console restocks**: RTX 50-series, PlayStation, Nintendo Switch 2: back in stock at a store near you or online
- **Stock checker before you drive**: which of the 5 nearest stores has the item and how many are left
- **Price tracking**: Best Buy price drops on a watchlist of SKUs
- **Resellers and deal sites**: store-level availability for many products in one run, as API, CSV or Excel

#### Example

Input: SKU `6680948` (Panini Prizm FIFA World Cup 2026 Soccer Mega Box), ZIP `11374`, 4 stores. Real run, Sept 2026:

| Store | Miles | In store | Stock | Price |
| --- | --- | --- | --- | --- |
| Rego Park | 0.6 | ✅ | in\_stock | $44.99 |
| Flushing | 2.4 | ✅ | in\_stock | $44.99 |
| Long Island City | 3.3 | ✅ | in\_stock | $44.99 |
| Gateway Brooklyn | 5.2 | ✅ | in\_stock | $44.99 |

The same run for Pokémon *Chaos Rising* Elite Trainer Box (`6673725`, $49.99, In-Store Only): out of stock in all 4 stores.

#### Input

| Field | What it does |
| --- | --- |
| **What to do** | *Search products* (keywords or links), *Check products* (SKUs or links), *Find stores near a ZIP code* |
| **Keywords** | e.g. `pokemon elite trainer box`, `rtx 5090`, `nintendo switch 2` |
| **Search or category links** | bestbuy.com search or category pages, filters included (`qp=brand_facet=Brand~Pokémon`) |
| **Products** | SKUs (7 digits, on every product page) or product links |
| **ZIP code** | Stores nearest to it. Empty = online status only |
| **Number of stores / Search radius** | Up to 25 stores within the radius |
| **Store numbers** | Exact stores instead of the nearest ones |
| **Only Best Buy's own offer** | On by default (see above) |
| **Only in stock**, **Maximum price** | Filters: you pay only for returned rows |
| **Only report changes**, **Monitor name** | Restock alerts for scheduled runs |

#### Output

| Field | Example |
| --- | --- |
| `title`, `sku`, `upc`, `model`, `brand` | Pokémon - Trading Card Game: Mega Evolution - Chaos Rising Elite Trainer Box, 6673725, 196214154117 |
| `price`, `regularPrice`, `discountPercent` | 49.99, 49.99, 0 |
| `soldBy` | Best Buy |
| `availability`, `buttonState`, `onlineAvailable` | In-store only, IN\_STORE\_ONLY, false |
| `storeId`, `storeName`, `storeCity`, `storeState`, `storeZip`, `storeDistanceMiles` | 483, Rego Park, Rego Park, NY, 11374, 0.6 |
| `inStockAtStore`, `stockLevel`, `storeQuantity` | true, low\_stock, 2 |
| `pickupDate` | 2026-09-27 |
| `change`, `changes`, `previousPrice` | back\_in\_stock, \[back\_in\_stock, price\_drop], 29.99 (monitoring) |
| `restocksSeen`, `lastRestockAt`, `usualRestockDay` | 3, 2026-09-27T14:24:55Z, Thursday (2 of 3) (monitoring) |
| `category`, `releaseDate`, `rating`, `reviewsCount`, `image`, `url` | Trading Card, 2026-05-22, 4.9, 430 |

**Stock levels.** Best Buy shows the exact count only when stock is low: `storeQuantity` is 1-3 with `stockLevel: low_stock`; with more units, or when Best Buy shows no count, `stockLevel` is `in_stock` and `storeQuantity` is empty. `out_of_stock` = the store has none.

#### Pokémon card restocks

Best Buy sells Pokémon TCG products **in stores only** (button *In-Store Only*); online you mostly see marketplace resellers. Track them like this:

| Goal | Input |
| --- | --- |
| Every Pokémon product Best Buy sells, in your stores | **Search products**, keyword `pokemon`, your ZIP, **Only in stock** |
| Alert when an Elite Trainer Box comes back near you | **Search products**, keyword `pokemon elite trainer box`, your ZIP, **Only report changes**, schedule every 15-30 minutes |
| A watchlist of exact products | **Check products**, SKUs such as `6673725`, `6685559`, **Only report changes** |

#### Pricing

Pay per event: **$0.002** per run, **$0.0005** per Best Buy request, **$0.001** per returned row (product in a store), **$0.0005** per store in *Find stores*.

| Example | Cost |
| --- | --- |
| 30 Pokémon products x 5 stores (150 rows, 60-90 requests) | ~$0.20 |
| Restock alerts: 20 items in 5 stores, every 30 minutes, only changes | ~$0.013 per run with no changes (requests only) |
| 50 products, online status only | ~$0.08 |

#### Tips

- One request checks a product in a store **and ~27 stores around it**, so more stores cost almost nothing extra in requests; you pay for the rows you get.
- Use **Only in stock** to get just the stores that have the item.
- Use a separate **Monitor name** for each scheduled task.
- Store numbers: run *Find stores near a ZIP code* once.

#### Limits

- US stores only (932 Best Buy stores, Sept 2026 list).
- Exact units are shown only when 3 or fewer are left, as on bestbuy.com.
- Some products are sold only online or only in stores: `availability` tells which.

#### Ready-made tasks

| Task | What it does |
| --- | --- |
| [Best Buy Stock Checker: In-Store Inventory Near a ZIP Code](https://apify.com/s_actors/best-buy-stock-checker/examples/best-buy-stock-checker) | Your SKUs in the 5 nearest stores |
| [Best Buy Pokémon Restock Tracker](https://apify.com/s_actors/best-buy-stock-checker/examples/best-buy-pokemon-restock-tracker) | Only Pokémon restocks in your stores, with the usual restock day |
| [Best Buy Pokémon ETB Stock Checker](https://apify.com/s_actors/best-buy-stock-checker/examples/best-buy-pokemon-etb-stock-checker) | Newest Elite Trainer Boxes at Best Buy's own $49.99 |

#### Related

- [GameStop Inventory Checker: exact units by store, Pro price](https://apify.com/s_actors/gamestop-inventory-checker)
- [Target Scraper: store stock with units, BrickSeek alternative](https://apify.com/s_actors/target-scraper)
- [Walmart Restock Tracker: online stock at Walmart's price](https://apify.com/s_actors/walmart-restock-tracker)
- [Home Depot inventory and clearance](https://apify.com/s_actors/home-depot-scraper)
- Send results to email, Slack or [Google Sheets](https://apify.com/s_actors/google-sheets-import-export) with integrations.

#### For AI agents and API

```json
{
    "mode": "products",
    "products": ["6673725", "6680948"],
    "zipCode": "10001",
    "maxStores": 5,
    "onlyChanges": true,
    "monitorName": "pokemon-etb"
}
```

# Actor input Schema

## `mode` (type: `string`):

Search: keywords or bestbuy.com search/category links, every product with price, online status and stock in your stores. Check products: exact items by SKU or link (best for a restock watchlist). Find stores: Best Buy stores near a ZIP code with their numbers.

## `keywords` (type: `array`):

Search mode: what to search on bestbuy.com, one per line (e.g. "pokemon elite trainer box", "rtx 5090", "nintendo switch 2").

## `searchUrls` (type: `array`):

Search mode: bestbuy.com search or category links, with filters (brand...) if you set them on the site. The page number is added automatically.

## `products` (type: `array`):

Check products mode: Best Buy SKUs (7 digits, shown on every product page) or product links, one per line. A marketplace seller's SKU is replaced by Best Buy's own offer of the same product when "Only Best Buy's own offer" is on.

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

US ZIP code: stock is checked in the Best Buy stores nearest to it. Empty = online status only.

## `maxStores` (type: `integer`):

How many of the nearest stores to check (one row per product and store).

## `radiusMiles` (type: `integer`):

Only stores within this distance of the ZIP code.

## `storeIds` (type: `array`):

Exact Best Buy store numbers instead of the nearest stores (find them with "Find stores near a ZIP code"; up to 25).

## `onlySoldByBestBuy` (type: `boolean`):

On: only products Best Buy sells itself, at Best Buy's price. Best Buy's marketplace lists resellers first on many hot items (a $49.99 Pokémon Elite Trainer Box shows as $97.99); this keeps them out. Off: marketplace listings too.

## `maxProductsPerSearch` (type: `integer`):

Search mode: how many products to take from each keyword or link.

## `sortBy` (type: `string`):

Search mode: order of the products, as on bestbuy.com.

## `onlyInStock` (type: `boolean`):

Return only rows where the store has the product (or, without a ZIP code, products you can buy now).

## `maxPrice` (type: `integer`):

Return only products at or below this price. Empty = any price.

## `onlyChanges` (type: `boolean`):

For scheduled runs. The first run saves stock and prices; later runs return only what changed: back in stock at a store, sold out, low stock (3 or fewer left), back online, price changes, new products. Each row also carries the restock history seen by this monitor and the usual restock weekday. You pay only for the changes returned.

## `monitorName` (type: `string`):

Separate monitors keep separate memory. Use a different name for each scheduled task.

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

How many requests run at the same time.

## Actor input object example

```json
{
  "mode": "search",
  "keywords": [
    "pokemon elite trainer box"
  ],
  "products": [
    "6673725"
  ],
  "zipCode": "10001",
  "maxStores": 5,
  "radiusMiles": 30,
  "onlySoldByBestBuy": true,
  "maxProductsPerSearch": 50,
  "sortBy": "best_match",
  "onlyInStock": false,
  "onlyChanges": false,
  "monitorName": "default",
  "maxConcurrency": 4
}
```

# Actor output Schema

## `overview` (type: `string`):

One row per product and store: price, status, stock in the store.

## `products` (type: `string`):

Product details: price, discount, seller, UPC, model, rating.

## `changes` (type: `string`):

Monitoring: back in stock, sold out, low stock, price changes, restock history.

## `stores` (type: `string`):

Find stores mode: Best Buy stores near the ZIP code.

## `all` (type: `string`):

Every field of every row.

# 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 = {
    "keywords": [
        "pokemon elite trainer box"
    ],
    "products": [
        "6673725"
    ],
    "zipCode": "10001"
};

// Run the Actor and wait for it to finish
const run = await client.actor("s_actors/best-buy-stock-checker").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 = {
    "keywords": ["pokemon elite trainer box"],
    "products": ["6673725"],
    "zipCode": "10001",
}

# Run the Actor and wait for it to finish
run = client.actor("s_actors/best-buy-stock-checker").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 '{
  "keywords": [
    "pokemon elite trainer box"
  ],
  "products": [
    "6673725"
  ],
  "zipCode": "10001"
}' |
apify call s_actors/best-buy-stock-checker --silent --output-dataset

```

## MCP server setup

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

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/a0UYsNR5c5X7hwrzK/builds/a2jP9V5kLlFkiWmio/openapi.json
