---
title: "Home Depot scraper"
description: "Scrape Home Depot product pages as JSON: price, model number, store SKU, GTIN, dimensions, rating and review count. One API request from Python, Node.js or MCP."
canonical: https://www.zenrows.com/scrape/home-depot
updated: 2026-10-20
---

# Home Depot scraper

The Zenrows Home Depot scraper turns Home Depot product pages into structured JSON: name, brand, Internet number, store SKU, model number, GTIN, price, order limit, dimensions, weight, highlights, rating, review and question counts, return window and category path. Fetch in Adaptive Stealth Mode opens the page and Extract returns the fields. Run it from an API call, the CLI or an AI agent.

- Site: homedepot.com
- Returns: Prices, model numbers, SKUs, specs and ratings

## Run it: one Home Depot product in, JSON out

```json Input
{
  "url": "https://www.homedepot.com/p/DEWALT-20V-MAX-Cordless-Drill-Driver-Kit-DCD771C2/204279858",
  "mode": "auto",
  "extract": "auto",
  "proxy_country": "us"
}
```

```json Output
{
  "product": {
    "product_id": "204279858",
    "sku": "1000014677",
    "model_number": "DCD771C2",
    "gtin13": "0885911325905",
    "brand": "DEWALT",
    "name": "20V MAX Cordless 1/2 in. Drill/Driver, (2) 20V 1.3Ah Batteries, Charger and Bag",
    "weight": "6.75 lb"
  },
  "pricing": {
    "currency": "USD",
    "price": 179,
    "order_limit": 5,
    "price_valid_until": "10/20/2026"
  },
  "ratings_summary": {
    "average_rating": 4.7,
    "review_count": 17383,
    "questions_count": 815
  },
  "return_policy": { "return_window_days": 90 },
  "highlights": [
    { "text": "(2) 20-Volt Batteries 1.3Ah & Charger" }
  ]
}
```

Request and output of a live call to a Home Depot product page from the US on Oct 20, 2026, trimmed for length. A field is returned when the page shows it.

## What data can you scrape from Home Depot?

Home Depot product pages carry three different IDs, the manufacturer's model number, a barcode, the physical dimensions buyers filter on, and the price with its order limit. Extract returns them in named groups.

| Field | What it holds | Example |
|---|---|---|
| `product.product_id` | Home Depot's Internet number, the ID at the end of the `/p/` URL | `204279858` |
| `product.sku` | The store SKU used on shelf labels and in stores | `1000014677` |
| `product.model_number` | The manufacturer's model number | `DCD771C2` |
| `product.gtin13` | The 13-digit barcode, to match the product at other retailers | `0885911325905` |
| `product.brand` | Brand | `DEWALT` |
| `product.name` | Product title without the brand | `20V MAX Cordless 1/2 in. Drill/Driver…` |
| `product.description` | The short product description | `This DEWALT MAX Lithium-Ion Cordless Drill…` |
| `product.width`, `product.height`, `product.depth` | Product dimensions | `9.875 in`, `4.25 in`, `13.875 in` |
| `product.weight` | Product weight | `6.75 lb` |
| `pricing.price` | The price on the page | `179` |
| `pricing.order_limit` | Maximum units per order | `5` |
| `pricing.price_valid_until` | The date the shown price is valid through | `10/20/2026` |
| `ratings_summary.average_rating` | Star rating out of 5 | `4.7` |
| `ratings_summary.review_count` | Number of reviews | `17383` |
| `ratings_summary.questions_count` | Number of customer questions | `815` |
| `highlights[]` | The short highlight lines under the title | `Includes Drill Driver & Tool Bag` |
| `return_policy.return_window_days` | Days allowed for returns | `90` |
| `breadcrumbs[]` | The category path, with each category URL | `Tools > Power Tools > Drills > Power Drills` |

## How to scrape Home Depot with Zenrows

1. **Create a free Zenrows account** and copy your API key from the dashboard.
2. **Copy the product URL.** Home Depot product pages follow `/p/<name>/<Internet number>`, such as `/p/DEWALT-20V-MAX-Cordless-Drill-Driver-Kit-DCD771C2/204279858`.
3. **Send it from the US** with the default configuration: Adaptive Stealth Mode to open the page and Extract to return the fields. Home Depot serves US shoppers, and its prices follow the visitor's location.
4. **Read `parsed`** and store the Internet number, the store SKU and the model number together. To keep only some fields, list their paths.
5. **Run your product list in Batch** once one URL returns what you need.

```python Python
# pip install requests
import json
import requests

params = {
    "apikey": "YOUR_ZENROWS_API_KEY",
    "url": "https://www.homedepot.com/p/DEWALT-20V-MAX-Cordless-Drill-Driver-Kit-DCD771C2/204279858",
    "mode": "auto",          # Adaptive Stealth Mode
    "extract": "auto",       # structured JSON
    "proxy_country": "us",
}
response = requests.get("https://api.zenrows.com/v1/", params=params, timeout=180)
response.raise_for_status()

data = response.json()["parsed"]
product, pricing = data["product"], data["pricing"]
print(product["model_number"], product["sku"], pricing["price"], pricing["price_valid_until"])
print(json.dumps(data, indent=2))
```

```javascript Node.js
// Node 18+ (built-in fetch)
const params = new URLSearchParams({
  apikey: "YOUR_ZENROWS_API_KEY",
  url: "https://www.homedepot.com/p/DEWALT-20V-MAX-Cordless-Drill-Driver-Kit-DCD771C2/204279858",
  mode: "auto",
  extract: "auto",
  proxy_country: "us",
});

const response = await fetch(`https://api.zenrows.com/v1/?${params}`, {
  signal: AbortSignal.timeout(180_000),
});
if (!response.ok) throw new Error(`${response.status}: ${await response.text()}`);

const { parsed } = await response.json();
console.log(parsed.product.gtin13, parsed.pricing.price, parsed.ratings_summary.average_rating);
```

```bash cURL
curl "https://api.zenrows.com/v1/?apikey=YOUR_ZENROWS_API_KEY&url=https%3A%2F%2Fwww.homedepot.com%2Fp%2FDEWALT-20V-MAX-Cordless-Drill-Driver-Kit-DCD771C2%2F204279858&mode=auto&extract=auto&proxy_country=us"

# Only the fields you need
curl "https://api.zenrows.com/v1/?apikey=YOUR_ZENROWS_API_KEY&url=https%3A%2F%2Fwww.homedepot.com%2Fp%2FDEWALT-20V-MAX-Cordless-Drill-Driver-Kit-DCD771C2%2F204279858&mode=auto&extract=auto&proxy_country=us&extract_fields=product.model_number%2Cproduct.sku%2Cpricing.price%2Cratings_summary.review_count"
```

```python Python SDK
# pip install zenrows
from zenrows import ZenRowsClient

client = ZenRowsClient("YOUR_ZENROWS_API_KEY")
response = client.get(
    "https://www.homedepot.com/p/DEWALT-20V-MAX-Cordless-Drill-Driver-Kit-DCD771C2/204279858",
    params={"mode": "auto", "extract": "auto", "proxy_country": "us"},
)
parsed = response.json()["parsed"]
print(" > ".join(crumb["name"] for crumb in parsed["breadcrumbs"]))
```

## Input

The scraper takes one Home Depot URL per request with the options below. A Batch job applies the same settings to every task, so a product list is a set of URLs and one configuration.

| Parameter | Type | Default | Description |
|---|---|---|---|
| `url` | string | required | A Home Depot product page, `https://www.homedepot.com/p/<name>/<Internet number>` |
| `mode` | string | `auto` | Adaptive Stealth Mode: starts with the lightest setup and adds rendering and protected-site handling only when the page needs them |
| `extract` | string | `auto` | Returns the page's fields as JSON in `parsed`, next to the raw `html` |
| `extract_fields` | string | all fields | Comma-separated paths to keep, such as `product.model_number,pricing.price` |
| `proxy_country` | string | any | Two-letter country code. Use `us` so the page shows Home Depot's US prices |
| `wait_for` | string | none | A CSS selector to wait for before the page is read. |
| `session_id` | integer | none | Keep the same session for several requests, up to 10 minutes |

```json Batch input
{
  "type": "regular",
  "status": "closed",
  "zenrows_params": {
    "mode": "auto",
    "extract": "auto",
    "proxy_country": "us"
  },
  "tasks": [
    { "url": "https://www.homedepot.com/p/DEWALT-20V-MAX-Cordless-Drill-Driver-Kit-DCD771C2/204279858", "external_id": "204279858" },
    { "url": "https://www.homedepot.com/b/Tools-Power-Tools-Drills-Power-Drills/DEWALT/N-5yc1vZc7jjZ4j2", "external_id": "dewalt-power-drills" }
  ]
}
```

## Output

Every response is JSON with two keys: `html`, the page as Home Depot served it, and `parsed`, the structured record. The sample below is the trimmed output of a live request to a product page.

```json Product page
{
  "product": {
    "brand": "DEWALT",
    "canonical_url": "https://www.homedepot.com/p/DEWALT-20V-MAX-Cordless-1-2-in-Drill-Driver-2-20V-1-3Ah-Batteries-Charger-and-Bag-DCD771C2/204279858",
    "color": null,
    "depth": "13.875 in",
    "description": "This DEWALT MAX Lithium-Ion Cordless Drill and Driver Kit with Batteries Charger and Tool Bag is ideal for completing a wide range of applications.",
    "gtin13": "0885911325905",
    "height": "4.25 in",
    "model_number": "DCD771C2",
    "name": "20V MAX Cordless 1/2 in. Drill/Driver, (2) 20V 1.3Ah Batteries, Charger and Bag",
    "product_id": "204279858",
    "sku": "1000014677",
    "weight": "6.75 lb",
    "width": "9.875 in"
  },
  "pricing": { "currency": "USD", "order_limit": 5, "price": 179, "price_valid_until": "10/20/2026" },
  "ratings_summary": { "average_rating": 4.7, "questions_count": 815, "review_count": 17383 },
  "return_policy": { "applicable_country": null, "return_window_days": 90 },
  "highlights": [
    { "text": "Includes Drill Driver & Tool Bag" },
    { "text": "(2) 20-Volt Batteries 1.3Ah & Charger" },
    { "text": "Compatible w/ All (200+) DEWALT 20-Volt MAX Batteries & Chargers" }
  ],
  "breadcrumbs": [
    { "name": "Home", "position": 1, "url": "/" },
    { "name": "Tools", "position": 2, "url": "/b/Tools/N-5yc1vZc1xy" },
    { "name": "Power Drills", "position": 5, "url": "/b/Tools-Power-Tools-Drills-Power-Drills/N-5yc1vZc7jj" },
    { "name": "DEWALT Power Drills", "position": 6, "url": "/b/Tools-Power-Tools-Drills-Power-Drills/DEWALT/N-5yc1vZc7jjZ4j2" }
  ]
}
```

| Group | What it gives you |
|---|---|
| `product` | Identity and physical specs: three IDs, barcode, brand, name, description, dimensions, weight |
| `pricing` | Price, currency, order limit and the date the price is valid through |
| `ratings_summary` | Rating, review count and question count |
| `highlights` | The short selling points under the title |
| `return_policy` | The return window in days |
| `breadcrumbs` | The category path with URLs, the starting points for a Crawl |

Load `parsed` into pandas with `pd.json_normalize(...)` for a spreadsheet, or ask for Markdown when an LLM will read the page.

## Scrape Home Depot from your coding agent

Claude Code, Cursor, Codex and any MCP client can scrape Home Depot from a prompt.

The agent sends the same Fetch and Extract request as the code above and reads the same JSON. Connect the Zenrows MCP server once, or install the CLI and let the agent run it in the terminal.

```bash Connect the MCP server (Claude Code)
claude mcp add zenrows -e ZENROWS_API_KEY=YOUR_ZENROWS_API_KEY -- npx -y @zenrows/mcp
```

```json MCP config (Cursor, Claude Desktop, Windsurf)
{
  "mcpServers": {
    "zenrows": {
      "command": "npx",
      "args": ["-y", "@zenrows/mcp"],
      "env": { "ZENROWS_API_KEY": "YOUR_ZENROWS_API_KEY" }
    }
  }
}
```

```bash Or run the CLI
npx -y @zenrows/cli init
zenrows extract "https://www.homedepot.com/p/DEWALT-20V-MAX-Cordless-Drill-Driver-Kit-DCD771C2/204279858" --proxy-country us
```

```text Then ask your agent
Use Zenrows to open this Home Depot product from the US and return the
model number, store SKU, GTIN, price, the date the price is valid through,
rating, review count and the category path:
https://www.homedepot.com/p/DEWALT-20V-MAX-Cordless-Drill-Driver-Kit-DCD771C2/204279858
```

## Scrape Home Depot at scale with Batch and Crawl

**Batch** runs a list of Home Depot product URLs as one job, with your own ID on each result. Use the Internet number as the `external_id` and run the job daily: `price_valid_until` tells you how long each price was set to hold.

**Crawl** collects the product URLs in a category or brand page. Start it on a `/b/` page, such as one from the `breadcrumbs` of a product you already have, keep links that contain `/p/`, and it returns every product page it reaches. Send that list to Batch.

```bash Batch (cURL)
curl -X POST "https://async.api.zenrows.com/v1/jobs" \
  -H "X-API-Key: YOUR_ZENROWS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "regular",
    "status": "closed",
    "zenrows_params": { "mode": "auto", "extract": "auto", "proxy_country": "us" },
    "tasks": [
      { "url": "https://www.homedepot.com/p/DEWALT-20V-MAX-Cordless-Drill-Driver-Kit-DCD771C2/204279858", "external_id": "204279858" }
    ]
  }'

# Read the results when the job finishes
curl "https://async.api.zenrows.com/v1/jobs/JOB_ID/results?status=successful" \
  -H "X-API-Key: YOUR_ZENROWS_API_KEY"
```

```bash Batch (CLI)
# products.jsonl: one {"url": "https://www.homedepot.com/p/...", "external_id": "INTERNET_NUMBER", "extract": "auto"} per line
zenrows batch create products.jsonl --proxy-country us --wait
zenrows batch results <job-id> --out homedepot-products.jsonl
```

```bash Crawl (cURL)
curl -X POST "https://api.zenrows.com/v1/crawls" \
  -H "X-API-Key: YOUR_ZENROWS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://www.homedepot.com/b/Tools-Power-Tools-Drills-Power-Drills/DEWALT/N-5yc1vZc7jjZ4j2",
    "depth": 2,
    "max_pages": 200,
    "include_patterns": ["/p/"]
  }'
```

**Scheduled jobs** run the same Batch job on a timetable, on Zenrows' side: every few hours, once a day, at set times on chosen days, or once at a future date. Each run keeps its own results, a webhook can tell your app when a run finishes, and you can pause or resume the schedule at any time, with no cron server to keep alive.

```bash Scheduled job (cURL)
# Runs every day on Zenrows' side; each run keeps its own results
curl -X POST "https://async.api.zenrows.com/v1/jobs" \
  -H "X-API-Key: YOUR_ZENROWS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
      "type": "scheduled",
      "status": "closed",
      "schedule": {
        "rate": {
          "every": 1,
          "unit": "day"
        }
      },
      "zenrows_params": {
        "mode": "auto",
        "extract": "auto",
        "proxy_country": "us"
      },
      "tasks": [
        {
          "url": "https://www.homedepot.com/p/DEWALT-20V-MAX-Cordless-Drill-Driver-Kit-DCD771C2/204279858",
          "external_id": "home-depot"
        }
      ]
    }'

# Or at set times: "schedule": { "calendar": { "times_of_day": ["09:00"],
#   "cadence": { "weekly": { "days": ["mon", "thu"] } } }, "timezone": "Europe/Madrid" }
```

## What teams do with Home Depot data

| Use case | Data they pull | Who runs it |
|---|---|---|
| Price monitoring for tools and building supplies | Price, price end date and order limit per product, daily | Retail pricing teams and manufacturers |
| Cross-retailer matching | Model number and GTIN to join Home Depot with Lowe's, Amazon and Walmart | Price comparison sites and analysts |
| Brand content audits | Name, description, highlights and dimensions against the brand's product data | Manufacturers and channel teams |
| Rating and demand signals | Average rating, review count and question count over time | Product and market research teams |
| Assortment research | Category paths and the products listed under each brand | Category managers and suppliers |
| Product data for AI assistants | The full product record, or the page as Markdown | AI and data teams |

## Tips for scraping Home Depot

- **Keep all three IDs.** The Internet number (`product_id`, also at the end of the URL), the store SKU (`sku`) and the model number each identify the same product in a different system. Store them together.
- **Match other retailers on GTIN or model number.** `gtin13` is the barcode, and `model_number` is what the manufacturer prints. Titles differ between retailers, these do not.
- **Note `price_valid_until`.** It is the date through which the shown price holds. Record it with every price so your history shows when each price was set to end.
- **Request from the US.** homedepot.com serves US shoppers, and its prices can differ by location. Keep the same country on every run so prices compare like for like.
- **Use breadcrumbs to reach the category.** The `/b/` URLs in `breadcrumbs[]` are category and brand pages, the right starting points for a Crawl that finds similar products.
- **Parse dimensions into numbers.** `width`, `height`, `depth` and `weight` come as text with units, such as `9.875 in` and `6.75 lb`. Split the value and unit before you filter or sort.

## Frequently asked questions

### Is it legal to scrape Home Depot?

Collecting publicly available data from Home Depot, such as prices, specs, ratings and product details shown to every visitor, is common practice for price monitoring and market research. Reviews and questions can include personal data, which is protected by laws such as the GDPR and the CCPA, so collect only what you have a legitimate reason to use. Check Home Depot's terms for your use case and ask your lawyer if you are unsure.

### Is there an official Home Depot API?

Home Depot does not publish a public API for product and price data. Its integrations serve suppliers and business partners. Teams that need the prices, specs and ratings on the product page read them from the page with a scraper.

### What Home Depot pages can I scrape?

Product pages ( /p/<name>/<Internet number> ) return the full record above. Category and brand pages ( /b/… ) list products with links to their pages, which you can collect with Crawl and then scrape with Batch.

### Can I scrape Home Depot prices?

Yes. Product pages return the price, the currency, the order limit and the date the price is valid through. Run your product list in Batch each day to build a price history.

### What is the difference between the Internet number, the store SKU and the model number?

The Internet number identifies the product on homedepot.com and ends every product URL. The store SKU is the number used in Home Depot stores. The model number comes from the manufacturer and matches the product at other retailers. The scraper returns all three.

### How do I scrape Home Depot with Python?

Send a GET request to https://api.zenrows.com/v1/ with your API key, the product URL, Adaptive Stealth Mode and Extract turned on, and the US as the country, as in the Python example. response.json()["parsed"] holds the product as a Python dictionary.

### How many Home Depot products can I scrape?

Send one URL per request, or a whole list as a Batch job that runs the URLs in parallel and keeps your own ID on each result. One Batch job accepts more than 10,000 URLs, sent inline or as a CSV file.

### Can AI agents scrape Home Depot with Zenrows?

Yes. Connect the Zenrows MCP server to Claude, Cursor, Codex or any MCP client, or give your agent the Zenrows CLI. Ask for the products you want in plain language and the agent calls Fetch and Extract for you.

### Can I scrape Home Depot on a schedule?

Yes. Create a scheduled Batch job with your Home Depot URLs and the same settings as a single request, and Zenrows runs it on its side: every few hours, once a day, at set times on chosen days, or once at a future date. Each run keeps its own results, a webhook can notify your app when a run finishes, and the schedule can be paused or resumed at any time.

### Which integrations work with the Home Depot scraper?

Zenrows works with n8n, Make, Zapier, Clay, Dify, LangChain, LlamaIndex, CrewAI and Mastra, plus the Python, Node.js and Go SDKs and any HTTP client. Send results to Google Sheets, a database or a data warehouse from the workflow tool you already use. See the integrations page for the full list.

### What format does the data come in?

JSON by default, with the structured record in parsed and the original page in html . You can also ask for the page as Markdown or plain text for LLM pipelines.

### Can I compare Home Depot prices with other retailers?

Yes. Scrape each retailer with the same request format and join on GTIN or model number. The Walmart scraper , the Best Buy scraper and the Amazon price scraper return the matching prices.

All scrapers: https://www.zenrows.com/scrape. Start free: https://app.zenrows.com/register. Docs: https://docs.zenrows.com
