# Home Depot Scraper: Products, Prices, Stock & Reviews (`northloop-labs/home-depot-scraper`) Actor

Scrape Home Depot products by search term, category or product URL: price, original price, discounts, ratings, review count, images, store and online stock for any ZIP code or store, optional full specs and customer reviews.

- **URL**: https://apify.com/northloop-labs/home-depot-scraper.md
- **Developed by:** [Northloop Labs](https://apify.com/northloop-labs) (community)
- **Categories:** E-commerce, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.10 / 1,000 product saveds

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

## Home Depot Scraper: Products, Prices, Stock & Reviews

**Get Home Depot product data from any search, category or product page.** Type a search such as `cordless drill`, paste a category URL or a list of product IDs, and get every product with its **price, original price, discount, rating, review count, brand, model number, images and link**. You also get **live stock for the Home Depot store you choose**: quantity on the shelf, pickup, delivery and ship-to-home availability.

Turn on **full details** to add the description, highlights, every specification, UPC and the category path. Set **reviews per product** to add customer reviews with rating, text, author, date, helpful votes and photos.

It's built for **price monitoring, retail and e-commerce analytics, resellers and arbitrage, brands checking their listings, contractors and procurement teams, and market research**. You don't need a Home Depot account, an API key or any proxy setup.

### What you can use it for

- **Price tracking:** schedule a daily run on your categories and follow price drops, discounts, clearance and Special Buy deals.
- **Store stock checks:** see how many units a store near any US ZIP code has and whether pickup or delivery is available.
- **Competitor and brand monitoring:** list every product of a brand or category with ratings, review counts and Best Seller / Top Rated badges.
- **Catalog and product research:** export specs, UPCs, model numbers and descriptions for thousands of products.
- **Review analysis:** collect the newest, most helpful or lowest-rated reviews to find product problems and selling points.

### What data you get

One row per product:

| Field | Description |
|---|---|
| `itemId`, `url`, `title`, `brand`, `modelNumber`, `storeSku` | Home Depot Internet number, product link, name, brand, model and store SKU |
| `price`, `originalPrice`, `discountPercent`, `currency`, `unitOfMeasure` | Current price at the selected store, the price before discount and the % off |
| `onClearance`, `specialBuy`, `priceMessage` | Deal flags |
| `rating`, `reviewCount` | Average star rating and number of reviews |
| `badges` | e.g. Best Seller, Top Rated, Exclusive, New |
| `storeId`, `storeName`, `storeState`, `inStoreQuantity`, `inStoreAvailable` | Stock on the shelf at the selected store |
| `pickupAvailable`, `deliveryAvailable`, `deliveryQuantity`, `shipToHomeAvailable` | Fulfillment options |
| `availabilityType`, `discontinued` | e.g. Shared (store + online), Online, Browse Only |
| `imageUrl`, `images` | Main image and all images in 1000 px |
| `searchTerm`, `sourceUrl`, `position`, `zipCode`, `scrapedAt` | Where the product came from and when |

With **Include full product details** (always on for product URLs and IDs):

| Field | Description |
|---|---|
| `description`, `highlights` | Product description and bullet points |
| `specifications` | All specifications as name → value, e.g. `"Battery Voltage (V)": "18V"` |
| `upc`, `parentId`, `categories` | Barcode, product family and category path |
| `returnPolicy`, `quantityLimit`, `buyable`, `videoCount` | Extra product info |

With **Reviews per product** above 0, each product gets a `reviews` list: `rating`, `title`, `text`, `author`, `location`, `date`, `recommended`, `helpfulVotes`, `verifiedPurchase`, `syndicatedFrom` and `photos`.

The dataset has two ready-made views: **Products** and **Store stock**.

### How to scrape Home Depot

1. Enter **Search terms** (e.g. `cordless drill`, `french door refrigerator`), paste **Home Depot URLs** (category `/b/…`, search `/s/…` or product `/p/…` pages), or add **Product IDs**.
2. Set **Max products per search or category** (default 48).
3. Optional: enter a **ZIP code** to get stock and prices from the nearest store, or a **Store number**.
4. Optional: turn on **Include full product details** and set **Reviews per product**.
5. Click **Start** and export the results as CSV, Excel, JSON or HTML, or connect them to Google Sheets, Make, Zapier or your own app through the API.

#### Input example

```json
{
  "searchTerms": ["cordless drill", "ceiling fan"],
  "startUrls": [{ "url": "https://www.homedepot.com/b/Appliances-Refrigerators/N-5yc1vZc3pi" }],
  "maxItemsPerSearch": 200,
  "sortBy": "top_sellers",
  "zipCode": "10001",
  "includeDetails": false,
  "maxReviewsPerProduct": 0
}
```

#### Output example

```json
{
  "itemId": "320326875",
  "url": "https://www.homedepot.com/p/Milwaukee-M18-FUEL-18V-Lithium-Ion-Brushless-Cordless-1-4-in-Hex-Impact-Driver-Tool-Only-2953-20/320326875",
  "title": "M18 FUEL 18V Lithium-Ion Brushless Cordless 1/4 in. Hex Impact Driver (Tool-Only)",
  "brand": "Milwaukee",
  "modelNumber": "2953-20",
  "price": 179,
  "originalPrice": 179,
  "discountPercent": 0,
  "rating": 4.7,
  "reviewCount": 2457,
  "badges": ["Best Seller", "Exclusive"],
  "storeId": "6175",
  "storeName": "Manhattan West 23rd St",
  "inStoreQuantity": 12,
  "inStoreAvailable": true,
  "pickupAvailable": true,
  "deliveryAvailable": true,
  "imageUrl": "https://images.thdstatic.com/productImages/3ca82630-d888-44f5-bd56-b2798a6d59f8/svn/milwaukee-impact-drivers-2953-20-64_1000.jpg",
  "searchTerm": "cordless drill",
  "position": 1,
  "zipCode": "10001"
}
```

### How much does it cost?

You pay only for what you get (pay per event, no monthly fee). Prices from the **Pricing** tab:

| Event | Price | When it is charged |
|---|---|---|
| Actor start | $0.005 per GB of memory | Once per run ($0.01 at the default 2 GB) |
| Home Depot session | $0.15 | Once per run, only after Home Depot accepts the browser session |
| Product saved | $0.003 | Per product (duplicates are free) |
| Full product details | $0.003 | Per product, only with **Include full product details** or product URLs/IDs |
| Customer review | $0.0005 | Per review saved |

**Examples:**

- Default run (1 search, 48 products, no details): about **$0.30**.
- 1,000 products from several searches in one run: about **$3.16** ($3.00 for products + $0.16 per run).
- 1,000 products with full details: about **$6.16**. Adding 10 reviews per product adds $5.00.

If Home Depot blocks every session attempt, the session fee is not charged. Because the session fee is paid once per run, **put many searches in one run** instead of many small runs.

Set **Maximum cost per run** in the run options to cap your spend. The Actor stops cleanly when it is reached.

### Tips

- A search Home Depot sends straight to a category (e.g. `refrigerator`) is followed automatically, so you get the same products you'd see on the site.
- To scrape a filtered list (brand, price range, rating), filter on homedepot.com and paste the resulting `/b/…/N-…` URL.
- Large runs are cheap per product: the cost of opening a session is paid once per run, so put many searches in one run instead of many small runs.
- Stock and prices are for one store per run. To compare stores, run once per ZIP code or store number.

### Use with AI agents, MCP, Make, Zapier, n8n and the API

#### AI agents and the Apify MCP server

Your AI agent can run this Actor as a tool through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp). In Claude, Cursor, VS Code or any other MCP client, add this server URL to load only this Actor:

```text
https://mcp.apify.com?tools=northloop-labs/home-depot-scraper
```

Pass `maxTotalChargeUsd` in `callOptions` to cap what one run may cost. Example prompt: *"Check the price and stock of the 20 best-selling cordless drills at the Home Depot nearest to ZIP 10001."*

#### Make, Zapier and n8n

Apify has official integrations for [Make](https://docs.apify.com/platform/integrations/make), [Zapier](https://docs.apify.com/platform/integrations/zapier) and [n8n](https://docs.apify.com/platform/integrations/n8n). Use "Run Actor", pick `northloop-labs/home-depot-scraper`, paste your input as JSON, and send the products to Google Sheets, Airtable or your database. Schedule the run daily in Apify to track prices and stock over time, or add a [webhook](https://docs.apify.com/platform/integrations/webhooks) that fires when a run finishes.

#### API

```bash
curl -X POST "https://api.apify.com/v2/acts/northloop-labs~home-depot-scraper/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchTerms": ["cordless drill"], "maxItemsPerSearch": 48, "zipCode": "10001"}'
```

Or with the Python client (`pip install apify-client`):

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("northloop-labs/home-depot-scraper").call(run_input={"searchTerms": ["cordless drill"], "zipCode": "10001"})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["title"], item["price"], item["inStoreQuantity"])
```

### Data & privacy

- The Actor collects **public product information** that any visitor of homedepot.com can see. Reviews can include a reviewer's display name and location; only keep what you need.
- Results are written **only to your own Apify account** (the run's dataset and a run summary). The Actor sends the data nowhere else and keeps no copy.

### Is it legal to scrape Home Depot?

The Actor reads public product pages without logging in and doesn't bypass any login or paywall. Home Depot's terms restrict automated access, and data protection laws apply to personal data in reviews, so check that your use fits your own legal and compliance requirements. This isn't legal advice.

### FAQ

**How many products can I get?** As many as Home Depot lists for a search or category (often 1,000+). Set **Max products per search or category** to the number you need.

**Which store's price and stock do I get?** The store nearest to your **ZIP code**, or the **Store number** you enter. Without either, Home Depot's default store is used.

**Can I track price changes?** Yes. Save your input as a task, schedule it daily, and compare `price` and `inStoreQuantity` between runs (for example in Google Sheets).

**Why do some products have no store quantity?** Online-only items and Browse Only items have no shelf stock, so `inStoreQuantity` is empty.

**Do you support other retailers?** This Actor covers homedepot.com (US). Check our other Actors for more sources.

**What if a run is blocked?** Home Depot uses bot protection. The Actor retries with a fresh browser and IP; if every attempt fails, the run ends without charging the session fee. Just run it again.

### How this Actor was made

This Actor was made with AI. An AI agent wrote and tested the code, this README and the store listing, and a human owns and maintains the Actor. It opens a real browser session on homedepot.com through US residential IPs and reads the same product data the website loads.

### More Actors from Northloop Labs

- [Luma, Eventbrite & Meetup Events Scraper](https://apify.com/northloop-labs/tech-events-finder): tech, AI and startup events from Luma, Eventbrite and Meetup.
- [Greenhouse, Lever, Ashby & Workable Jobs Scraper](https://apify.com/northloop-labs/company-jobs-finder): open jobs from company career pages.
- [Google Ads Transparency Center Scraper](https://apify.com/northloop-labs/google-ads-transparency-library): a company's ads from the Google Ads Transparency Center.
- [Meta Ads Library Scraper: Facebook & Instagram Ads](https://apify.com/northloop-labs/meta-ads-library-scraper): Facebook and Instagram ads from Meta's Ad Library.
- [X Ads Transparency Scraper: X (Twitter) Ads Repository](https://apify.com/northloop-labs/x-ads-transparency-scraper): X (Twitter) ads from the Ads Repository, guest access, no login.
- [Podcast Transcriber for RSS & Apple Podcasts](https://apify.com/northloop-labs/podcast-transcriber): podcast transcripts with timestamps and SRT subtitles.
- [EU TED & UK Find a Tender Scraper](https://apify.com/northloop-labs/public-tenders-monitor): UK and EU public tenders with daily alerts.
- [Google Trends Scraper: Keywords, Regions & Related Queries](https://apify.com/northloop-labs/google-trends-scraper): bulk Google Trends with comparisons and rising-query alerts.
- [YouTube Transcript Scraper: Captions, Subtitles & Text](https://apify.com/northloop-labs/youtube-transcript-scraper): YouTube transcripts with captions or Whisper, timestamps and SRT.
- [Google Maps Leads Scraper: Emails, Phones & Socials](https://apify.com/northloop-labs/google-maps-leads-scraper): local business leads with emails, phones, socials and a lead score.

### Feedback

Missing a field or a filter? Something doesn't work? Open an issue on the **Issues** tab with your run link and we'll fix it quickly.

# Actor input Schema

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

Words you would type into the Home Depot search box, e.g. "cordless drill" or "french door refrigerator". Searches that Home Depot sends straight to a category are followed automatically.

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

Paste category pages (/b/…/N-…), search pages (/s/…) or product pages (/p/…). Filters in category URLs are kept.

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

Home Depot Internet numbers (the 9-digit ID at the end of a product URL), e.g. 320326875. Product pages and IDs always include full details.

## `maxItemsPerSearch` (type: `integer`):

Stop after this many products for each search term or category URL. Home Depot pages hold 24 products.

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

Order of search and category results.

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

US ZIP code. The nearest Home Depot store is used for in-store stock, pickup and local prices. Leave empty for Home Depot's default store (Atlanta, GA #121).

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

Optional 3–4 digit Home Depot store number (overrides ZIP code lookup), e.g. 6175 for Manhattan West 23rd St.

## `includeDetails` (type: `boolean`):

Adds description, highlights, all specifications, UPC, category path, return policy and quantity limit. One extra request and charge per product.

## `maxReviewsPerProduct` (type: `integer`):

Number of customer reviews to add to each product (0 = none). Each review is charged separately.

## `reviewsSort` (type: `string`):

Which reviews to take first.

## Actor input object example

```json
{
  "searchTerms": [
    "cordless drill"
  ],
  "startUrls": [
    {
      "url": "https://www.homedepot.com/b/Appliances-Refrigerators/N-5yc1vZc3pi"
    }
  ],
  "productIds": [
    "320326875"
  ],
  "maxItemsPerSearch": 48,
  "sortBy": "best_match",
  "zipCode": "10001",
  "storeId": "6175",
  "includeDetails": false,
  "maxReviewsPerProduct": 0,
  "reviewsSort": "newest"
}
```

# Actor output Schema

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

Price, rating, reviews, stock and link for each product.

## `stock` (type: `string`):

In-store quantity, pickup and delivery availability for the selected store.

## `summary` (type: `string`):

Counts per search, store used and errors.

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

Every field, including details and reviews when requested.

# 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": [
        "cordless drill"
    ],
    "startUrls": [
        {
            "url": "https://www.homedepot.com/b/Appliances-Refrigerators/N-5yc1vZc3pi"
        }
    ],
    "productIds": [
        "320326875"
    ],
    "maxItemsPerSearch": 48,
    "zipCode": "10001",
    "storeId": "6175"
};

// Run the Actor and wait for it to finish
const run = await client.actor("northloop-labs/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 = {
    "searchTerms": ["cordless drill"],
    "startUrls": [{ "url": "https://www.homedepot.com/b/Appliances-Refrigerators/N-5yc1vZc3pi" }],
    "productIds": ["320326875"],
    "maxItemsPerSearch": 48,
    "zipCode": "10001",
    "storeId": "6175",
}

# Run the Actor and wait for it to finish
run = client.actor("northloop-labs/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 '{
  "searchTerms": [
    "cordless drill"
  ],
  "startUrls": [
    {
      "url": "https://www.homedepot.com/b/Appliances-Refrigerators/N-5yc1vZc3pi"
    }
  ],
  "productIds": [
    "320326875"
  ],
  "maxItemsPerSearch": 48,
  "zipCode": "10001",
  "storeId": "6175"
}' |
apify call northloop-labs/home-depot-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,northloop-labs/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/BVsHkrq2GHJm0sqd0/builds/JWMM5t6RHEFjwbwvE/openapi.json
