# Home Depot Scraper: Inventory, Clearance & Price Tracker (`s_actors/home-depot-scraper`) Actor

Scrape Home Depot products with the price, clearance price and units on the shelf in each store near a ZIP code. Check stock of any item in nearby stores (a BrickSeek alternative) and get only-changes alerts: price drops, new clearance, back in stock.

- **URL**: https://apify.com/s\_actors/home-depot-scraper.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

### Home Depot Scraper: Inventory, Clearance & Price Tracker

Get Home Depot products with the **price, clearance price and units on the shelf in each store** near a ZIP code. Search by keyword or category, or paste item IDs and **check stock in the 1-25 nearest stores**, like BrickSeek but pay-per-result and ready for automation.

Schedule it with **Only report changes** and get just the news: **price drops, new clearance, back in stock, sold out**.

Export as **JSON, CSV, Excel or HTML**, or use it as a **Home Depot API**. No browser, no login, no proxy costs.

#### How it works

1. Choose what to do: **Search products in stores**, **Check stock of products in nearby stores** or **Find stores near a ZIP code**
2. Add keywords (`cordless drill`), homedepot.com category links, or item IDs (the number at the end of a product link)
3. Add a US **ZIP code** and how many of the nearest stores to check (or exact store numbers)
4. Optional: filters (**Only clearance**, **Only in stock**, **Minimum discount %**, **Maximum price**) and **Only report changes** for scheduled alerts (see [Monitoring](#only-report-changes-how-monitoring-works))

#### Why this Actor

| | |
|---|---|
| 🏬 **Stock by store** | Units on the shelf in each store, not just "available online": one row per product and store |
| 📍 **Stores near a ZIP** | The 1-25 nearest Home Depot stores, with distance in miles, or your own store numbers |
| 🏷️ **Clearance & deals** | Clearance price, % off, was price and special buys for the store you pick |
| 🔔 **Only changes** | Scheduled runs return only price drops, new clearance, back in stock and sold out |
| 🔎 **Search & categories** | Any keyword or category, brand or "Special Values" page, up to 744 products per search (Home Depot's own limit), top sellers first |
| 🧾 **SKU lookup** | Title, brand, model, store SKU, UPC, rating, reviews and image for any item ID |
| 💰 **Cheaper than BrickSeek** | BrickSeek Premium costs $14.99 a month; tracking 20 items daily here costs about $0.20 a month |

#### Use cases

- **Inventory checker**: which of the stores near you has an item on the shelf, and how many units
- **Price tracker**: daily alerts when an item drops in price or goes on clearance
- **Retail arbitrage and resale**: find discounted items in stock across stores in your area
- **Contractors**: check stock of tools and materials before driving to a store
- **Price comparison and catalogs**: product data with UPC, model and store SKU for any category
- **AI agents**: give your assistant live Home Depot stock and prices through the Apify MCP server

#### Products by store

One row per product and store. Real example, "cordless drill" in the 3 stores nearest to ZIP 30339 (Atlanta), September 2026: 48 products × 3 stores in 11 seconds.

| Product | Price | Cumberland | Buckhead | Sandy Springs |
|---|---|---|---|---|
| RYOBI ONE+ 18V 3/8 in. Drill/Driver Kit | $49.97 | 32 on shelf | 73 | 0 |
| RYOBI ONE+ 18V 1/2 in. Drill/Driver Kit | $89 | 20 | 82 | 27 |
| Milwaukee M18 FUEL 1/2 in. Hammer Drill (Tool-Only) | $229 | 14 | 7 | 5 |

A clearance row from the same store: Milwaukee M12 Drill/Impact Combo Kit, `clearancePrice` **$85**, `regularPrice` $169, `discountPercent` 50.

| Field | Description |
|---|---|
| `itemId`, `title`, `brand`, `model`, `storeSku`, `upc` | The product |
| `price` | Price you pay in this store today (the clearance price when there is one) |
| `regularPrice`, `discountPercent` | Was price and % off, when discounted |
| `isClearance`, `clearancePrice`, `isSpecialBuy`, `promotion` | Deal type |
| `storeQuantity`, `inStockAtStore`, `limitedStockAtStore` | Units on the shelf in this store |
| `pickupAvailable`, `deliveryAvailable`, `onlineQuantity` | Online availability (ship to home) |
| `storeId`, `storeName`, `storeCity`, `storeState`, `storeZip`, `storeDistanceMiles` | The store |
| `rating`, `reviewsCount`, `department`, `image`, `url` | Product page data |
| `query`, `queryType`, `redirectedTo` | The keyword or link this row came from; popular searches like "cordless drill" open a category page, shown in `redirectedTo` |

**Search products in stores** takes the products from the first (nearest) store and checks the same products in the other stores. **Check stock** takes your item IDs or links (up to thousands) and checks each in every store.

#### Find stores near a ZIP code

| Field | Description |
|---|---|
| `storeId`, `storeName` | Store number (use it in **Store numbers**) and name |
| `street`, `city`, `state`, `zip`, `phone`, `distanceMiles` | Address and distance from the ZIP code |

#### Only report changes: how monitoring works

Monitoring turns a scheduled run into alerts. It works in three steps:

1. **Switch on** **Only report changes** and pick a **Monitor name** (one name per list of items or searches)
2. **Save as a task and schedule it**, for example every morning (Actor page → Save as a new task → Schedule)
3. **First run** saves prices and stock and returns everything marked `change: new`. **Every later run** compares with the previous run and returns only the differences. An empty result means nothing changed

| `change` | When |
|---|---|
| `price_drop`, `price_increase` | The price in the store changed (`previousPrice` shows the old one) |
| `clearance_started`, `clearance_price_drop`, `clearance_ended` | The item went on clearance, got cheaper on clearance, or left clearance |
| `back_in_stock`, `out_of_stock` | The store has it on the shelf again, or sold out |
| `quantity_change` | Units on the shelf changed by at least **Report stock count changes of at least** (off by default) |
| `new_item` | A new product appeared in the search or category |

Filters apply to the reported rows, so **Only clearance** with monitoring returns only items that went on clearance or got cheaper. Use a different **Monitor name** for each task, otherwise two tasks overwrite each other's memory. You pay for the page scans and for the changes returned, not for unchanged items.

#### Pricing

Pay per result, no subscription:

| Event | Price |
|---|---|
| Run start | $0.002 |
| Store page scan (one request: a search page of 24 products or a stock check of 16 products in one store) | $0.0005 |
| Product in a store (a returned row; rows removed by filters and unchanged rows in monitoring are free) | $0.001 |
| Store (Find stores near a ZIP code) | $0.0005 |

| Task | Cost |
|---|---|
| 100 products for a keyword in 1 store | ~$0.10 |
| Stock of 10 items in the 5 nearest stores | ~$0.05 |
| Price tracker: 20 items in 1 store, checked daily for 30 days | ~$0.20 per month |
| Deals hunt: a 480-product category in 3 stores, daily, only changes | ~$1.60 per month |

#### Ready-made tasks

Open one, change the ZIP code, keywords or items, and run:

| Task | What you get |
|---|---|
| [Home Depot Inventory Checker: Stock in Stores Near a ZIP](https://apify.com/s_actors/home-depot-scraper/examples/home-depot-inventory-checker) | Units on the shelf in the 5 nearest stores |
| [Home Depot SKU Lookup: Price, Stock and UPC by Item ID](https://apify.com/s_actors/home-depot-scraper/examples/home-depot-sku-lookup) | Product data for a list of item IDs |
| [Home Depot Price Tracker: Daily Price Drop Alerts](https://apify.com/s_actors/home-depot-scraper/examples/home-depot-price-tracker) | Only price drops and new clearance, daily |
| [Home Depot Back in Stock Alerts in Nearby Stores](https://apify.com/s_actors/home-depot-scraper/examples/home-depot-back-in-stock-alerts) | Only items back in stock or sold out |
| [Home Depot Clearance and Deals Finder by Store](https://apify.com/s_actors/home-depot-scraper/examples/home-depot-clearance-finder) | Items 20%+ off in your stores |
| [Home Depot Product Scraper: Prices, Ratings, Stock](https://apify.com/s_actors/home-depot-scraper/examples/home-depot-product-scraper) | Search results for any keyword |
| [Scrape a Home Depot Category with Store Prices](https://apify.com/s_actors/home-depot-scraper/examples/home-depot-category-scraper) | A whole category from its link |
| [Home Depot Store Locator: Store Numbers by ZIP Code](https://apify.com/s_actors/home-depot-scraper/examples/home-depot-store-locator) | Stores near a ZIP with their numbers |
| [Compare Home Depot Prices and Stock Across 10 Stores](https://apify.com/s_actors/home-depot-scraper/examples/home-depot-price-comparison-stores) | The same items in 10 stores |
| [Home Depot Tool Deals Monitor: Milwaukee and DeWalt](https://apify.com/s_actors/home-depot-scraper/examples/home-depot-tool-deals-monitor) | Tool deals and restocks, daily |

#### Input example

```json
{
    "mode": "stock_check",
    "productIds": ["203111686", "https://www.homedepot.com/p/RYOBI-ONE-18V-Cordless-1-2-in-Drill-Driver-Kit-with-1-Compact-Battery-and-Charger-PCL206K1/317987598"],
    "zipCode": "30339",
    "maxStores": 5,
    "onlyChanges": true,
    "monitorName": "my-items"
}
```

#### Tips

- **Item ID** is the number at the end of a product link: `homedepot.com/p/.../317987598` → `317987598`. Links work too.
- **Category links**: open any category, brand or "Special Values" page on homedepot.com and copy its address (it contains `/N-`). The "Special Values" pages of each department are the best place to hunt for deals; combine them with **Minimum discount %**.
- **Clearance** is what Home Depot's own data marks as clearance for that store. Some in-store-only clearance items show a price but no unit count; `storeQuantity` is then empty.
- Stock numbers are what Home Depot shows for store pickup; the shelf can differ by a few units.
- US stores only. Home Depot Canada is a different site.
- Send results to email, Slack or [Google Sheets](https://apify.com/s_actors/google-sheets-import-export) with integrations.

# Actor input Schema

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

Search products: keywords or category links, with price, clearance price and stock in each store. Check stock: specific products in the stores near a ZIP code (like BrickSeek). Find stores: Home Depot stores near a ZIP code with their store numbers.

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

Search mode: what to search on homedepot.com, one per line (e.g. "cordless drill", "milwaukee m18", "patio furniture").

## `categoryUrls` (type: `array`):

Search mode: homedepot.com category, brand or "Special Values" page links (they contain "/N-"), e.g. https://www.homedepot.com/b/Tools-Power-Tools-Drills/N-5yc1vZc27f.

## `productIds` (type: `array`):

Check stock mode: Home Depot item IDs (the number at the end of a product link) or the product links themselves, one per line.

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

US ZIP code. The nearest Home Depot stores are used (see "Stores to check").

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

How many of the nearest stores to the ZIP code to check (1-25). Each product is returned once per store.

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

Only stores within this distance from the ZIP code.

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

Optional: exact Home Depot store numbers (e.g. 121 or 0121) instead of the nearest stores. Find them with "Find stores near a ZIP code".

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

Search mode: how many products to take from each keyword or category (24 per page, sorted by top sellers). Home Depot shows at most 744 products per search: split big categories into subcategories.

## `onlyClearance` (type: `boolean`):

Return only products on clearance in the store.

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

Return only products the store has on the shelf.

## `minDiscountPercent` (type: `integer`):

Return only products at least this much off (clearance, special buy or was-price). 0 = all.

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

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

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

For scheduled runs. The first run saves prices and stock; later runs return only products whose price dropped or rose, went on clearance, came back in stock or sold out, and products new to the search. You pay only for the changes returned.

## `minQuantityChange` (type: `integer`):

Also report when the number of units on the shelf changes by at least this many. 0 = only in stock / sold out.

## `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": [
    "cordless drill"
  ],
  "productIds": [
    "203111686",
    "317987598"
  ],
  "zipCode": "30339",
  "maxStores": 1,
  "radiusMiles": 30,
  "maxProductsPerSearch": 48,
  "onlyClearance": false,
  "onlyInStock": false,
  "minDiscountPercent": 0,
  "onlyChanges": false,
  "minQuantityChange": 0,
  "monitorName": "default",
  "maxConcurrency": 3
}
```

# Actor output Schema

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

One row per product and store: price, clearance, stock on the shelf.

## `clearance` (type: `string`):

Discounted products: clearance price, % off, stock.

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

Monitoring: price drops, new clearance, back in stock, sold out.

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

Home Depot 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": [
        "cordless drill"
    ],
    "productIds": [
        "203111686",
        "317987598"
    ],
    "zipCode": "30339"
};

// Run the Actor and wait for it to finish
const run = await client.actor("s_actors/home-depot-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 = {
    "keywords": ["cordless drill"],
    "productIds": [
        "203111686",
        "317987598",
    ],
    "zipCode": "30339",
}

# Run the Actor and wait for it to finish
run = client.actor("s_actors/home-depot-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 '{
  "keywords": [
    "cordless drill"
  ],
  "productIds": [
    "203111686",
    "317987598"
  ],
  "zipCode": "30339"
}' |
apify call s_actors/home-depot-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,s_actors/home-depot-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/Snna5NnbZCPmRPxWg/builds/GFExMxcNJaAgBOYtD/openapi.json
