# Home Depot Scraper - SKU Lookup, Prices & Stock API (`parseforge/home-depot-products-scraper`) Actor

Search Home Depot or look up item IDs and get structured rows: title, brand, model number, price, original price, discount, rating, review count and the stock quantity at the store you choose. Specifications, variants, media and delivery are opt-in blocks.

- **URL**: https://apify.com/parseforge/home-depot-products-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** E-commerce, Lead generation
- **Stats:** 7 total users, 5 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.45 / 1,000 products

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
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?

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

[![ParseForge](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner.jpg)](https://apify.com/parseforge?fpr=vmoqkp)

### Home Depot Scraper - SKU Lookup, Prices & Stock API

**Search homedepot.com or look up item IDs straight from a SKU list, and get every product back as a structured row: title, brand, model number, current price, original price, discount, rating, review count, and the quantity actually sitting on the shelf at the store you name.** Every row carries the identity, price and availability fields Home Depot publishes, no login and no API key. Exports to CSV, JSON, Excel or XML.

Home Depot has no public product API, and its search pages are behind Akamai, so the usual route is a headless browser that costs fifty times as much and breaks whenever the markup shifts. This Actor reads Home Depot's own GraphQL service instead, which is why a product comes back in well under a second and why the prices and stock are the ones your store really shows rather than a national average.

| Who uses it | What they scrape Home Depot for |
|---|---|
| Brands and manufacturers | Where their SKUs rank, at what price, and whether the shelf is running empty |
| Price intelligence teams | Price and promotion tracking store by store, not nationally |
| Contractors and trade buyers | Which nearby store has the item in stock right now, and how many |
| Retail analysts | Assortment, discount depth and rating spread across a whole category |
| Marketplace sellers | Competitive pricing against the same model number |

### What it does

- 🏷️ **Identity:** item ID, title, brand, model number, store SKU, UPC, parent ID, product type, super SKU flag, canonical URL and primary image.
- 💵 **Price:** current price, original price, discount in dollars and percent, an on-sale flag, promotion type and tag, price message, unit of measure, unit price, units per case, bulk price and bulk threshold, special buy flag.
- ⭐ **Reviews:** average rating, total review count and how many shoppers favourited the item.
- 📦 **Availability:** availability type, buyable and discontinued flags, returnable policy, quantity limit, option count, department, class and subclass.
- 🗂️ **Context:** breadcrumbs, collection name and URL, badges, sponsored flag, eco rebate and augmented reality flags.
- 🧰 **Opt-in blocks:** store inventory and delivery, key features, variants, images and video, subscribe and save, installation services.
- 🔎 **Two sidecar datasets:** the category facets Home Depot offers for your search with a product count behind each, and the related search terms it suggests.

### What you can do with Home Depot data

**🏪 Check stock at one store, by SKU.**

Paste a list of item IDs, tick Store inventory and delivery, and every row comes back with the quantity on hand at the store ID you chose, the store name, the fulfilment services and the delivery timeline. The IDs go to Home Depot in batches in a single request each, so a SKU list is the cheapest thing this Actor can do.

**💸 Track promotions store by store.**

Prices and badges at Home Depot are per store, not national. Set `storeId` and every row is priced against that location, with the dollar and percent discount and the original price as their own columns rather than something you compute afterwards.

**📊 Map a category and its filters.**

Search a term, sort by top sellers, and read brand, price band and rating across the result set. Tick Category facets and you also get Home Depot's own filter tree, with the number of products behind every brand, price band and feature.

**🔁 Watch a shelf over time.**

Schedule the same search on a timer and diff the runs. Because the row carries `storeQuantity` and not just an in-stock boolean, you can see a shelf draining before it hits zero.

### Why choose this scraper

| | What you get |
|---|---|
| No browser | Home Depot's own GraphQL service, not a rendered page, so a page of 48 products lands in about a second |
| Real per-store data | Prices, badges and stock read against your `storeId`, with the quantity on hand |
| SKU lookup built in | Item IDs go up in batches, and each row carries the same fields a search returns |
| Pay for what you take | A cheap base row plus eight optional blocks, each billed only when it actually returned something |
| Filters that do not cost extra | Price, brand, rating and sale filters run on the full row before it is projected, so they never add a charge |
| Honest ceilings | Home Depot stops yielding new rows at 696 per search term and refuses a start index past 720, and this Actor says so in the log instead of looping |

### How it compares

Seventeen Home Depot Actors are listed on the Apify Store. The ones with real users are cheap and thin: `maplerope44/home-depot-product-lookup` charges $5 per 1,000 rows with a single event, `crawlerbros/homedepot-scraper` charges $2 per 1,000 plus a $5 run fee, and `sian.agency/home-depot-product-scraper` splits into $6 per 1,000 overview rows and $22 per 1,000 detail rows. This Actor sits at the same $5 per 1,000 as the leader, and the difference is what the row carries and what you can leave out.

| | This Actor | Typical rival |
|---|---|---|
| Base row price | $5 per 1,000 | $2 to $6 per 1,000 |
| Fields in the base row | 50 | Usually 10 to 15 |
| Per-store stock quantity | Yes, opt-in | Rare, and usually just a boolean |
| SKU lookup by item ID | Yes, batched | Rare |
| Optional blocks you can skip | 8 | 0 to 1 |
| Category facets and related keywords | Yes, own datasets | No |

### What a Home Depot product looks like

### Configure the run

Give it search terms, item IDs, or Home Depot URLs. A `/s/` URL is read as a search, a `/b/.../N-xxxx` URL as a category, and a `/p/.../123456789` URL as an item ID lookup. Single-word searches return the widest result sets; if a phrase comes back empty, the log prints the category URL Home Depot redirects it to so you can paste that in instead.

Search a keyword at one store:

```json
{ "searchTerms": ["drill"], "storeId": "134", "maxItems": 100 }
```

Look up a SKU list with stock at your store:

```json
{ "itemIds": ["204279858", "204373168", "317987598"], "storeId": "134", "includeStoreInventory": true }
```

Find discounted DEWALT tools over 4 stars, cheapest first:

```json
{ "searchTerms": ["drill"], "brand": "DEWALT", "onlyOnSale": true, "minRating": 4, "sortBy": "price_low", "maxItems": 200 }
```

### Pricing

This Actor is pay per event. The base row is $0.005, and every optional block is billed separately and only when it actually returned data. Reading a page of up to 48 products costs $0.004, charged once per page and only when that page produced at least one row you kept.

| Event | Price |
|---|---|
| Actor start | $0.002 |
| Product (base row) | $0.005 |
| Search page (up to 48 products) | $0.004 |
| Store inventory and delivery | $0.004 |
| Key features, variants, images and video, category facet | $0.002 each |
| Subscribe and save, installation services, related keyword | $0.001 each |

| Products | Base rows only | With store inventory |
|---|---|---|
| 100 | $0.52 | $0.92 |
| 1,000 | $5.09 | $9.09 |
| 10,000 | $50.84 | $90.84 |

Volume discounts follow your Apify plan: Bronze pays 3.8% less, Silver 7.4% less, Gold and above 11% less.

### Free users

Free Apify accounts get a 10 row preview per run, which is enough to see every column and decide. Paid accounts get the full result set. [Upgrade your plan](https://apify.com/pricing?fpr=vmoqkp) to lift the cap.

### Run it

1. [Create a free Apify account](https://apify.com/?fpr=vmoqkp). New accounts come with $5 in free credit.
2. Open the Actor, type a search term or paste a list of item IDs, and set your store ID.
3. Tick only the optional blocks you actually need, then press Start.
4. Download the results as CSV, JSON, Excel or XML, or pull them from the dataset API.

### Use with AI agents (MCP)

```
claude mcp add apify --transport http https://mcp.apify.com --header "Authorization: Bearer <YOUR_APIFY_TOKEN>"
```

Then ask in plain language:

- "What does a DEWALT cordless drill cost at Home Depot store 134, and how many are on the shelf?"
- "List every discounted drill under $100 at Home Depot with at least a 4 star rating."
- "Look up Home Depot item IDs 204279858 and 204373168 and tell me which one is cheaper."

### Troubleshooting

**No results at all.** Home Depot throttles its own service from time to time and refuses requests before they reach the data. The log says so in as many words when it happens. The same run usually succeeds a few minutes later.

**Fewer rows than I asked for.** A Home Depot search stops yielding new rows at 696, whatever total it reports, and it refuses a start index past 720 outright. Split a broad term into narrower ones, or add a category URL, to go past that.

**A phrase search returns nothing.** Home Depot answers multi-word keywords with an empty result and a redirect instead. The log prints the category URL it redirects to; paste that URL into Start URLs.

**A column says Not Disclosed or N/A.** Not Disclosed means Home Depot publishes nothing there for that item; N/A means the field does not apply to it. Neither is a scraping failure, and no column is ever a bare null.

**The stock filter drops everything.** Only products in stock survive Only products in stock at the store, and that filter needs Store inventory and delivery ticked, because that is the block carrying the stock flag.

### FAQ

| Question | Answer |
|---|---|
| Do I need a Home Depot account or API key? | No. Everything this Actor reads is public. |
| Are the prices national? | No. They are read against the `storeId` you set, which is how Home Depot prices in real life. |
| How do I find my store ID? | It is in the store URL on homedepot.com, and it is the number Home Depot shows next to "Your Store". The default 134 is Atlanta, GA. |
| Can I get the stock quantity, not just in stock or not? | Yes. Tick Store inventory and delivery and the row carries `storeQuantity`. |
| How many products can one search return? | Home Depot stops serving new rows at 696 and refuses a start index past 720. Use several terms or category URLs for more. |
| Can I scrape a whole category? | Yes. Paste the category URL into Start URLs and it is read as a category. |
| Can I look products up by SKU? | Yes. Put the item IDs into Item IDs and they are looked up in batches. |
| Does it scrape reviews? | It returns the average rating and the review count, not the individual review texts. |
| Why is there a charge for a search page? | Paginating costs a request whether the page has one useful row or forty-eight. It is charged once per page and only when that page produced a row you kept. |
| Is this affiliated with Home Depot? | No. See the disclaimer below. |

### Related actors

- [Ace Hardware Scraper](https://apify.com/parseforge/ace-hardware-scraper?fpr=vmoqkp)
- [Walmart Scraper](https://apify.com/parseforge/walmart-scraper?fpr=vmoqkp)
- [Costco Scraper](https://apify.com/parseforge/costco-scraper?fpr=vmoqkp)
- [Overstock Scraper](https://apify.com/parseforge/overstock-scraper?fpr=vmoqkp)
- [eBay Scraper](https://apify.com/parseforge/ebay-scraper?fpr=vmoqkp)

Browse the full [ParseForge collection](https://apify.com/parseforge?fpr=vmoqkp) for more scrapers.

Need help? Email parseforge@protonmail.com with your run ID, your input, and what you expected.

Disclaimer: this is an unofficial scraper and is not affiliated with, endorsed by, or connected to The Home Depot. It collects only publicly available product information, no personal data. You are responsible for using the data in line with GDPR, CCPA, PIPL and Home Depot's own terms.

# Actor input Schema

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

Keywords to search on homedepot.com, one per line. Single words return the widest result sets; if a phrase returns nothing the log prints the category URL Home Depot redirects it to, which you can paste into Start URLs.

## `itemIds` (type: `array`):

Home Depot item IDs to look up directly, one per line, for example 204279858. This is the cheapest path: up to 24 IDs come back in a single request, with the same fields a search returns.

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

Home Depot search, category or product URLs. A /s/ URL is read as a search, a /b/.../N-xxxx URL as a category and a /p/.../123456789 URL as an item ID lookup.

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

Maximum number of products to return across every search term. Free users: limited to 10 items (preview). Paid users: up to 1,000,000. Facets and related keywords have their own separate caps and do not consume this budget.

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

The Home Depot store the prices, badges and stock are read against. Prices at Home Depot are per store, not national. Defaults to 134 (Atlanta, GA).

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

Delivery ZIP code used for delivery dates and shipping charges. Only has an effect when Store inventory and delivery is ticked.

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

Result order. Home Depot applies this server side, so it also decides which products fall inside Max Items.

## `storeFilter` (type: `string`):

Which Home Depot catalogue to search. All is everything, In store keeps only what the store stocks, Online keeps only what ships. Home Depot applies this server side and it changes the result set, not just the rows you keep.

## `minPrice` (type: `number`):

Drop products priced below this amount in US dollars.

## `maxPrice` (type: `number`):

Drop products priced above this amount in US dollars.

## `brand` (type: `string`):

Keep only products whose brand name contains this text, for example DEWALT. Case insensitive.

## `minRating` (type: `number`):

Keep only products rated at or above this value, from 1 to 5. Decimals work, so 4.5 is a valid threshold. Products with no reviews are dropped.

## `onlyOnSale` (type: `boolean`):

Keep only products whose current price is below their original price.

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

Keep only products in stock at the store ID above. Requires Store inventory and delivery to be ticked, because that is the block carrying the stock flag.

## `includeStoreInventory` (type: `boolean`):

Adds the quantity on hand at your store, the store name and number, fulfilment services, delivery timeline, delivery charge and free shipping flag.

## `includeKeyFeatures` (type: `boolean`):

Adds the bulleted key features Home Depot shows above the specification table.

## `includeVariants` (type: `boolean`):

Adds every colour, size or finish variant of the item, each with its own item ID, label, URL and swatch image.

## `includeMedia` (type: `boolean`):

Adds every product image at 1000 px and the product videos with their titles and IDs, rather than just the primary image.

## `includeSubscription` (type: `boolean`):

Adds whether the item can be subscribed to, the default delivery frequency and the subscription discount.

## `includeInstallServices` (type: `boolean`):

Adds the installation and measurement service flags Home Depot attaches to the item.

## `includeFacets` (type: `boolean`):

Writes the filter facets Home Depot offers for the search into a facets dataset: brand, price band, rating and more, each with the number of products behind it. Capped at 200 rows per run.

## `includeRelatedKeywords` (type: `boolean`):

Writes the related search terms Home Depot suggests for each search into a related-keywords dataset. Capped at 50 rows per run.

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

Home Depot answers 403 to datacenter exits, so this Actor needs residential US proxies. Leave the default unless you know what you are changing.

## Actor input object example

```json
{
  "searchTerms": [
    "drill"
  ],
  "maxItems": 10,
  "storeId": "134",
  "zipCode": "30301",
  "sortBy": "best_match",
  "storeFilter": "ALL",
  "onlyOnSale": false,
  "onlyInStock": false,
  "includeStoreInventory": false,
  "includeKeyFeatures": false,
  "includeVariants": false,
  "includeMedia": false,
  "includeSubscription": false,
  "includeInstallServices": false,
  "includeFacets": false,
  "includeRelatedKeywords": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "countryCode": "US"
  }
}
```

# Actor output Schema

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

No description

## `csv` (type: `string`):

No description

## `excel` (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 = {
    "searchTerms": [
        "drill"
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/home-depot-products-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 = {
    "searchTerms": ["drill"],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/home-depot-products-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 '{
  "searchTerms": [
    "drill"
  ],
  "maxItems": 10
}' |
apify call parseforge/home-depot-products-scraper --silent --output-dataset

```

## MCP server setup

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