# Home Depot Prices Scraper (`1mp/home-depot-prices`) Actor

Give Home Depot item ids, product URLs, search terms or category URLs, and a store or ZIP; get one row per product: store price, was-price, clearance price, store stock and quantity, rating, UPC, brand and model. $5 per 1,000 products.

- **URL**: https://apify.com/1mp/home-depot-prices.md
- **Developed by:** [Jesse Hawkins](https://apify.com/1mp) (community)
- **Categories:** E-commerce
- **Stats:** 7 total users, 1 monthly users, 94.4% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$5.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?

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 Prices Scraper

Prices and stock from **The Home Depot (US)** for the store you
choose. Give it item ids, product URLs, search terms or category
URLs, and a store number or a ZIP code. It returns one row per
product: the store's price, the was-price and saving, the store's
clearance price, whether the store has it on the shelf and how many,
the rating, the UPC, the brand and the model.

**Measured on Apify, 2026-10-03.** Three test runs of 10 item ids,
04:48 to 09:24 UTC: 10 of 10 each time, 30 of 30, every one on its
first try. In the last run, a search term and a category URL: 2
pages of 2 read on the first try, 5 products each, as asked. The
Actor asks Home Depot's own product and search API, the one its
pages use, so it gets the same totals and order as the site. An item
that does not come back is skipped, and you are not charged for it.

No browser, so runs are fast and cheap. Public, logged-out data
only.

### Which store the prices are for

Home Depot prices, clearance and stock differ by store. Every row
records the store it was priced for, in `storeId` and `storeName`.

- **storeId** set: that store.
- **zipCode** set, no storeId: the Home Depot store nearest that ZIP.
  The run log names it and its distance.
- Neither: store **121, Cumberland (Atlanta, GA 30339)**.

### What you get

One row per product:

| Field | Example |
|---|---|
| `productId`, `parentId` | `204373168`, `317483796` |
| `name` | `20V MAX Cordless Drill/Impact 2 Tool Combo Kit ...` |
| `brand`, `modelNumber` | `DEWALT`, `DCK240C2` |
| `storeSku`, `upc` | `1000024563`, `885911343046` |
| `price` | `179.0` (USD) |
| `wasPrice`, `dollarOff`, `percentOff` | `239.0`, `60.0`, `25.0`; `null` when not reduced |
| `promotion` | `Special Buys` |
| `clearancePrice`, `isClearance` | `74.21`, `true`: the store's clearance price |
| `storeStatus` | `ACTIVE`, `CLEARANCE`, `INACTIVE` or `DELETED` at the store |
| `unitPrice`, `unitMeasure`, `unitsPerCase` | `2.98`, `sq. ft.`, `20.1` (flooring, tile) |
| `rating`, `reviewCount` | `4.57`, `8467` |
| `inStock` | `true`: pickup or delivery is possible |
| `storeInStock`, `storeQuantity` | `true`, `18`: on the store's shelf |
| `shipToHome` | `true` |
| `storeId`, `storeName` | `121`, `Cumberland` |
| `category`, `categoryPath` | `Power Drills`, `Tools > Power Tools > Drills > Power Drills` |
| `isSponsored` | `false` |
| `imageUrl`, `url` | product photo, Home Depot product page |
| `sourceUrl`, `scrapedAt` | the page it came from, UTC |

`storeInStock` and `storeQuantity` are `null` when Home Depot lists
no store pickup for the product (ship-to-store or online-only items).

### Input

```json
{
  "productIds": ["204373168", "317987598"],
  "startUrls": [
    "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",
  "dealsOnly": false,
  "clearanceOnly": false,
  "inStockOnly": false
}
```

- **productIds** — item ids, the number at the end of a product URL.
  One row each. Good for watching a fixed list of products.
- **startUrls** — `homedepot.com` product pages (`/p/...`), search
  pages (`/s/...`) and category pages (`/b/.../N-...`). A category is
  known by the `N-...` code in its URL; a filter in the URL's query
  string is not applied.
- **searchTerms** — searched one at a time, paged until `maxResults`,
  in Home Depot's best-match order.
- **storeId** or **zipCode** — the store, as above.
- **maxResults** — per search term and per URL. Each product returned
  is one billed result, so this is your cost control.
- **dealsOnly** — only products with a was-price or a clearance price.
- **clearanceOnly** — only products marked clearance at the store.
- **inStockOnly** — skip products with no stock for pickup or delivery.

Input names used by other Home Depot Actors also work: `searchQuery`,
`keywords`, `productId`, `zip` and `maxItems`.

### Output

```json
{
  "retailer": "The Home Depot",
  "productId": "317987598",
  "name": "ONE+ 18V Cordless 1/2 in. Drill/Driver Kit with (1) Compact Battery and Charger",
  "brand": "RYOBI",
  "modelNumber": "PCL206K1",
  "storeSku": "1006703281",
  "price": 89.0,
  "wasPrice": null,
  "promotion": "Special Buys",
  "clearancePrice": null,
  "isClearance": false,
  "storeStatus": "ACTIVE",
  "rating": 4.67,
  "reviewCount": 4192,
  "inStock": true,
  "storeInStock": true,
  "storeQuantity": 18,
  "shipToHome": true,
  "storeId": "121",
  "storeName": "Cumberland",
  "category": "Power Drills",
  "categoryPath": "Tools > Power Tools > Drills > Power Drills",
  "url": "https://www.homedepot.com/p/RYOBI-ONE-18V-Cordless-1-2-in-Drill-Driver-Kit-with-1-Compact-Battery-and-Charger-PCL206K1/317987598",
  "scrapedAt": "2026-10-03T03:02:00+00:00"
}
```

### Price

**$5.00 per 1,000 products** ($0.005 each), charged per product
returned. Nothing else is charged: no per-run fee, no charge for
pages that return nothing, and a product with no price, or an item
id Home Depot does not show, is skipped rather than billed.
Duplicates across pages are returned once.

### Limits, honestly

- **Home Depot sometimes refuses a request.** In one test, 3
  requests in 10 from Apify's servers came back without data, and 7
  to 9 in 10 through residential proxies; in the runs above, none
  did. The Actor tries each request up to six times and charges only
  for products it returns, so a run that gets nothing back costs you
  nothing.
- **The Home Depot US only.** Not Home Depot Canada or Mexico, not
  Lowe's.
- **One store per run.** For several stores, run once per store.
- **Up to 50 pages per target**: about 1,200 products for a search
  or a category. For more, split the category.
- **Clearance prices are what Home Depot reports for the store.**
  They are usually in-store only, and the shelf may differ.
- **No specifications, descriptions or reviews text.** Counts and
  ratings only.
- **Where requests come from.** Each request goes first from Apify's
  own servers, which Home Depot answered most often in our tests;
  every third try goes through the proxy in the input, Apify's
  RESIDENTIAL proxy, country US, by default. Apify's data-centre
  proxy got no data in our tests. The proxy is included in the price.

### What it will not do

No login, no Pro Xtra or member pricing, no CAPTCHA solving, no
reviewer names or other personal data, and no faster-than-polite
request rate.

### FAQ

**Which store are the prices for?** The store you set in `storeId`,
or the store nearest your `zipCode`. With neither, store 121,
Cumberland (Atlanta, GA). Every row names its store.

**Can I watch a fixed list of products?** Yes. Put the item ids in
`productIds` and run the Actor on an Apify schedule. Each run gives
one row per product.

**Can I get only deals or clearance?** Yes. Set `dealsOnly` or
`clearanceOnly`. `clearancePrice` is the price Home Depot reports for
that store, usually in-store only.

**Am I charged when Home Depot refuses a request?** No. You pay only
for products returned.

**Can I price several stores in one run?** No. Run once per store.

**Does it cover Home Depot Canada or Mexico?** No. The Home Depot US
only.

**Do I need a login or an API key?** No. Public, logged-out data
only.

### Use with AI agents (MCP)

Add this Actor to Apify's MCP server as a tool:

```
https://mcp.apify.com?tools=1mp/home-depot-prices
```

An MCP client, for example Claude or Cursor, can then ask for a
product's store price and stock. A run needs an Apify account; the
client signs in when it first connects.

### Support

Open an issue on this Actor's **Issues** tab. Reported issues are
fixed within 14 days.

# Actor input Schema

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

Home Depot item ids, the number at the end of a product URL, e.g. 204373168. One row per id, priced for the chosen store, through Home Depot's own product lookup. Ids Home Depot does not show are skipped and not billed.

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

homedepot.com pages: a product (/p/.../204373168), a search (/s/...) or a category (/b/.../N-...). A product URL returns that one product; a search or category is paged until maxResults. A category is known by the N-... code in its URL; filters in the URL's query string are not applied.

## `searchTerms` (type: `array`):

What to search on homedepot.com, e.g. "cordless drill". Each term is searched separately, in Home Depot's best-match order, and paged until maxResults is reached.

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

The Home Depot store whose prices and stock you want, e.g. 121 or 6612. It is on the store's page at homedepot.com/l/. Overrides zipCode. Blank and no zipCode: store 121.

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

A 5-digit US ZIP code. The Actor uses the Home Depot store nearest to it and logs which one. Ignored when storeId is set.

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

Stop each search term or URL after this many unique products. Each product returned is one billed result. Pages hold 24 products. Item ids are not capped by this.

## `dealsOnly` (type: `boolean`):

On: return only products with a was-price or a clearance price at the store.

## `clearanceOnly` (type: `boolean`):

On: return only products Home Depot marks as clearance at the store.

## `inStockOnly` (type: `boolean`):

On: skip products with no stock for pickup or delivery. Products with no price are always skipped and never billed.

## `requestTimeoutSecs` (type: `integer`):

Timeout for one request. A failed request is tried again, up to six times.

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

The fallback route. Each request goes first from Apify's own servers, which Home Depot answered most often (tested 2026-10-03); every third try goes through this proxy. RESIDENTIAL, country US, by default. Apify's data-centre proxy got no data in that test.

## Actor input object example

```json
{
  "productIds": [
    "204373168",
    "317987598"
  ],
  "maxResults": 100,
  "dealsOnly": false,
  "clearanceOnly": false,
  "inStockOnly": false,
  "requestTimeoutSecs": 30,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

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

Every product found, one item each, as JSON from the run's default dataset.

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

The same products in the dataset's overview view: photo, name, brand, model, price, was-price, clearance price, store stock, store and link.

# 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 = {
    "productIds": [
        "204373168",
        "317987598"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("1mp/home-depot-prices").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 = {
    "productIds": [
        "204373168",
        "317987598",
    ],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("1mp/home-depot-prices").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 '{
  "productIds": [
    "204373168",
    "317987598"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call 1mp/home-depot-prices --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,1mp/home-depot-prices"
        }
    }
}
```

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/LA2HHh24IxDWBFA4F/builds/yGwballY2uNve12Hv/openapi.json
