How it will work: 3 steps
- Follow us on ApifyThe tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run.
- Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example:
cordless drillin Search terms. Each start is one run. - Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.
This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.
What it does
Good for
- You sell or resell products and want to watch Home Depot prices and clearance items.
- You want to know which nearby store has a product, how many units it has and where the product is in the store.
- You want reviews or customer questions for a list of products.
- You want a list of Home Depot stores near a ZIP code, with phone and hours.
- You run the same check every day and want only the products that changed.
Who uses it
Online sellers
Watch Home Depot prices and clearance items.
Local buyers
Find which nearby store has a product and where it sits.
Analysts
Compare one product across many stores.
Price
Prices will be shown after release.
Questions
Do I need a Home Depot account or API key?
No. The tool reads public pages of homedepot.com with no login.
Which Home Depot sites does it cover?
Only homedepot.com in the US. No Canada or Mexico.
Is the stock live?
It is what the site showed at the time in fetchedAt, for one store.
Which store does the price come from?
From storeId. If it is empty, the Actor uses the store nearest to zipCode. With no ZIP code, it uses store 121. Each row shows the store it used.
What does an empty run cost?
The start fee and one page-scan for each source check. A ZIP code with no stores costs only the start fee. See the Pricing section for real amounts.
How do I get stock for one product across stores?
Add the item ID to productUrls, your zipCode and a nearbyStores value. Read quantity, aisle and bay in storeAvailability.
Does the Actor return every product and every review?
It returns what the source shows, up to your limits. A very large listing can end early with stopReason: PAGE_LIMIT. A review can belong to a sibling variant, and reviewedItemId shows which one.
How fresh is the data?
The Actor reads the source during the run. fetchedAt shows the time. Prices and stock can change after that.
Is a null stock value the same as zero?
No. quantity: 0 means the store has none. null means the source did not say.
Details
Step by step on Apify
- Open the Input tab. Keep Search and category results in Data to collect (box 1 in the picture).
- Keep
cordless drillin Search terms or type your own (box 2). - Keep
10in Maximum products for a first run (box 3). - Click Start (box 4).
- Open the Output tab and choose the Products view. Check
priceandwasPrice(box 5). - Click Export to get JSON, CSV or Excel (box 6).
Use cases
| Task | Input | You get | Key fields | Next step |
|---|---|---|---|---|
| Watch prices and discounts | searchQueries or categoryUrls, with onlyOnSale if you want | Product | price, wasPrice, percentOff, isClearance | Google Sheets or a price database |
| Check stock in your stores | productUrls, storeId, zipCode, nearbyStores | Product | storeAvailability, availability, delivery | Stock alert in Slack |
| Report only what changed | searchQueries or productUrls, onlyChanges, monitorName | Product | change, price, storeAvailability | Daily schedule and a webhook |
| Read customer opinions | mode: reviews or mode: questions, productUrls | Review, question | rating, text, question, answers | Sentiment or support analysis |
| Build a store list | mode: stores, zipCode | Store | storeId, name, phone, hours | CRM or a map |
Tips for better results
- Start with 10 products and the Products view.
- Add a store ID or ZIP code to get stock, aisle and bay.
- Turn on change tracking and run daily to get only the products that changed.
Limits and good to know
- Source: only homedepot.com in the US. No Canada or Mexico sites, no account data, no orders
- Size: up to 5000 products in one run and 1000 values in each list. Up to 2000 reviews or questions per product
- Stores: up to 30 rows in
storesmode, 29 nearby stores and 50extraStoreIds - Time: the default timeout is 300 seconds. Real runs took about 10 seconds for 10 products, 1 to 2.5 minutes for 500 products, and about 3.5 minutes for 2000 products. Two runs of 5000 products took about 10 and 14 minutes. At the slowest speed we saw, 5000 products would take about 17 minutes. Speed depends on the source. For a run over 1000 products, set the timeout to 900 seconds. For 5000 products, set 1500 seconds. Item IDs are slower: 100 IDs with details took about 3 minutes, so 1000 IDs would take about 30 minutes. For a long ID list, set a timeout of 1200 seconds and send up to 500 IDs per run. The timeout must be more than 40 seconds, because the Actor keeps 40 seconds to save its data
- Deep listings: the Actor can stop before the end of a very large listing. It then saves what it has and sets
stopReason: PAGE_LIMIT. A single run reads up to 20000 pages or 512 MB - Large pages: a source page over 4 MB is skipped. You get a free
errorrow, and the rest of the run goes on - Slow source: if no page answers for 90 seconds, the run stops with
stopReason: DEADLINE. Rows saved earlier stay
For developers
Sample result
One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.
{
"type": "product",
"itemId": "317987598",
"title": "ONE+ 18V Cordless 1/2 in. Drill/Driver Kit with (1) Compact Battery and Charger",
"brand": "RYOBI",
"model": "PCL206K1",
"storeId": "121",
"zipCode": null,
"price": 59,
"wasPrice": 89,
"currency": "USD",
"percentOff": 34,
"isClearance": false,
"clearancePrice": null,
"rating": 4.6722,
"reviewsCount": 4311,
"availability": "in_stock",
"onlineQuantity": 2245,
"storeAvailability": [
{
"storeId": "121",
"storeName": "Cumberland",
"state": "GA",
"price": 59,
"quantity": 84,
"inStock": true,
"pickupAvailable": true,
"aisle": "11",
"bay": "EC1",
"locationText": "Aisle 11 - Endcap"
}
],
"category": "Power Drills",
"query": "cordless drill",
"position": 3,
"url": "https://www.homedepot.com/p/RYOBI-ONE-18V-Cordless-1-2-in-Drill-Driver-Kit-with-1-Compact-Battery-and-Charger-PCL206K1/317987598",
"source": "homedepot.com"
}Data fields (40)
| Field | Type | Meaning |
|---|---|---|
type | string | Row kind: product, review, question, store or status. |
itemId | string | Home Depot item ID. |
title | string | Product title or review title. |
brand | string | Brand name. |
model | string | Model number. |
storeSku | string | Store SKU number. |
upc | string | UPC or GTIN barcode. |
parentId | string | Parent product ID that groups variants. |
storeId | string | Store number used for this row. |
zipCode | string | ZIP code from the input. |
price | number | Current price in the chosen store. Null when the source hides or omits it. |
wasPrice | number | Previous price. Null when there is no discount. |
currency | string | Price currency. |
unitOfMeasure | string | Unit the price applies to, for example each. |
dollarOff | number | Discount in dollars. |
percentOff | number | Discount in percent. |
savingsCenter | string | Home Depot savings label. |
isSpecialBuy | boolean | True for a Special Buy. |
isClearance | boolean | True for a clearance product. |
clearancePrice | number | Clearance price in the chosen store. Null when this store has none. |
bulkPrice | number | Price per unit when buying in bulk. |
bulkQuantity | number | Quantity needed for the bulk price. |
unitPrice | number | Alternate price per unit. |
unitsPerCase | number | Units in one case. |
rating | number | Average rating, or the rating of this review. |
reviewsCount | number | Number of reviews. |
reviewStats | object | Rating distribution and recommendation counts. |
availability | string | in_stock, limited_stock, out_of_stock, backordered or discontinued. Null when the source did not say. |
discontinued | boolean | True when the product is discontinued. |
backordered | boolean | True when the product is backordered. |
onlineQuantity | number | Units available for shipping. |
storeAvailability | array | Price, quantity, aisle and bay per store. |
delivery | object | Delivery availability, charge and dates. |
images | array | Image links. |
videos | array | Video titles and links. |
documents | array | Manuals and guides. Filled by product details. |
description | string | Product description. Filled by product details. |
highlights | array | Short product highlights. |
specifications | array | Specification groups, names and values. Filled by product details. |
keyFeatures | array | Key product features. |
Input settings (25)
The main fields of the input form. With the API you send them as JSON.
| Setting | Name in the API | Type | Example value |
|---|---|---|---|
| Data to collect | mode | string | "search" |
| Search terms | searchQueries | array | ["cordless drill"] |
| Category links | categoryUrls | array | |
| Product links or item IDs | productUrls | array | |
| Store number | storeId | string | |
| ZIP code | zipCode | string | |
| Nearby stores to compare | nearbyStores | integer | 0 |
| Store radius in miles | radiusMiles | number | |
| More stores to compare | extraStoreIds | array | |
| Sort results by | sortBy | string | "best_match" |
| Only products sold in this store | inStoreOnly | boolean | false |
| Only products in stock | onlyInStock | boolean | false |
| Only products on sale | onlyOnSale | boolean | false |
| Only clearance products | onlyClearance | boolean | false |
| Minimum price | minPrice | number | |
| Maximum price | maxPrice | number | |
| Minimum discount percent | minDiscountPercent | number | |
| Maximum products | maxItems | integer | 10 |
| Maximum products per search | maxItemsPerQuery | integer | |
| Add full product details | includeDetails | boolean | false |
| Add customer reviews | includeReviews | boolean | false |
| Maximum reviews per product | maxReviews | integer | 20 |
| Sort reviews by | reviewsSort | string | "newest" |
| Only these star ratings | reviewStars | array | |
| Only verified purchases | verifiedOnly | boolean | false |



