# Home Depot Product API: Search, Stock, Reviews, Stores (https://www.socialcrawl.dev/blog/home-depot-product-api) > Home Depot product API with four GET endpoints: keyword search, product detail with UPC and store stock, reviews, and ZIP to store id. See fields and credits. A Home Depot product API turns a keyword or an item id into structured product data: title, brand, UPC, price, rating, per-store stock and reviews. SocialCrawl offers four GET endpoints for it under `/v1/home_depot/`, on one API key and in the same response envelope as the rest of `/v1`. | Endpoint | Required | Returns | Credits | | --- | --- | --- | ---: | | `GET /v1/home_depot/search` | `query` | Matching products and the real match total | 5 | | `GET /v1/home_depot/product` | `item_id` or `url` | UPC, price, rating, per-location stock | 5 | | `GET /v1/home_depot/reviews` | `item_id` | The ten most relevant written reviews, plus the total | 5 | | `GET /v1/home_depot/stores` | `query` (a US ZIP) | Nearby stores with `store_id` | 1 | Send your key in an `x-api-key` header. Full parameter lists are on the [Home Depot platform page](/platforms/home_depot). Stacked square paver stones with a blank clay-amber price tag, the hardware catalog a Home Depot product API keyword search returns. ## How do you search Home Depot products by keyword? `GET /v1/home_depot/search` takes a `query` and returns 24 products per page. Each row has the item id, title, brand, price, rating, review count, images and availability, and `total` is the real match count. Add `page` (1 to 30) to walk further, and `store_id` to localise stock. ```bash curl -s -H "x-api-key: $SOCIALCRAWL_API_KEY" \ "https://www.socialcrawl.dev/v1/home_depot/search?query=paver" ``` ```json { "product": { "id": "100333077", "title": "12 in. x 12 in. x 1.5 in. Pewter Square Concrete Step Stone", "url": "https://www.homedepot.com/p/.../100333077", "price": { "current": 1.87, "original": 1.87, "currency": "USD" }, "rating": { "average": 4.6, "count": 12904 }, "reviews_count": 12904, "availability": "InStock" } } ``` The item id is the number at the end of a Home Depot product URL. Pass it to the product and reviews endpoints. Paginate while `pagination.has_more` is true. For the general pattern, see [how API pagination works](/blog/twitter-api-pagination). Search takes no sort or filter parameters. `sort_by`, `items_per_page`, `brand`, `min_price`, `max_price`, `in_stock` and `zipcode` are rejected with a 400 that names the parameter, and the call costs 0 credits. Filter and sort on the rows you got back: every row carries `price.current`, `brand`, `rating` and `availability`. Two isometric stock piles of different heights on a store shelf, the shelf counts a Home Depot product data call reports next to a blank UPC tile. ## How do you get Home Depot product data, UPC and in-store stock? `GET /v1/home_depot/product` takes an `item_id` or a product `url` and returns full detail: title, brand, model number, UPC, description, feature bullets, current and original price, rating, images and stock. Stock sits in `product.ext.store_inventory`, with a unit count for each location that can fulfil the item. ```bash curl -s -H "x-api-key: $SOCIALCRAWL_API_KEY" \ "https://www.socialcrawl.dev/v1/home_depot/product?item_id=326680222&store_id=0256" ``` ```json { "product": { "id": "326680222", "brand": "RYOBI", "price": { "current": 49.97, "original": 49.97, "currency": "USD" }, "rating": { "average": 4.6, "count": 1907 }, "availability": "InStock", "ext": { "store_inventory": [ { "store_id": "0256", "store_name": "Stadium", "state": "FL", "in_stock": true, "quantity": 34, "fulfillment": "pickup", "service": "bopis", "location_type": "store", "is_selected_store": true }, { "store_id": "0121", "in_stock": true, "quantity": 79, "fulfillment": "delivery", "service": "express delivery", "is_selected_store": false } ] } } } ``` A row in `store_inventory` can be a delivery path rather than a store. Read `fulfillment` (pickup or delivery) and `location_type` (store or online) before you treat a count as shelf stock. The row with `is_selected_store: true` is the store you passed as `store_id`. Compare store ids as exact strings, because a delivery node can share digits with a store number (`0121` is not store 121). Prices are Home Depot's online prices and do not change with the store, so in-store-only markdowns are not in the data. A markdown that Home Depot publishes online appears in `ext.promotion` with its label, `amount_off` and `percent_off`. When Home Depot withholds a price, `price.current` is null and `ext.price_note` explains why. The response uses the same unified Product shape as [other retailer product endpoints](/blog/best-amazon-product-data-apis-2026), so one parser covers several stores. ## Is there a Home Depot reviews API? Yes. `GET /v1/home_depot/reviews` takes an `item_id` and returns the ten most relevant written reviews for 5 credits. It is a single page with no cursor, and `total` gives the full review count on the product. ```bash curl -s -H "x-api-key: $SOCIALCRAWL_API_KEY" \ "https://www.socialcrawl.dev/v1/home_depot/reviews?item_id=100333077" ``` ```json { "review": { "id": "306350952", "text": "The majority of the 70 pavers were good but two had concrete bumps on their surfaces.", "rating": { "value": 4, "max": 5 }, "author": { "name": "KIP", "location": null }, "helpful_votes": 0, "verified": true, "language": "en_US", "published_at": "2026-09-04T01:04:17.000Z" } } ``` Each review has its text, a star rating out of 5, the author, helpful votes, a verified-purchase flag and a publish time. Review rows also carry judged labels in `computed.labels` (sentiment and issue type) by default, at no extra credits. See [Labels](/docs/labels) for how they are scored. The review total and the `reviews_count` on a product row can differ slightly, because they come from separate payloads. Treat each as the count for that response. ## How do you turn a ZIP code into a Home Depot store id? `GET /v1/home_depot/stores?query=95032` takes a five-digit US ZIP and returns the nearest stores in distance order for 1 credit. Each store has an `id`, name, address, phone number, coordinates and a store page link. The `id` is the `store_id` that search and product accept. ```bash curl -s -H "x-api-key: $SOCIALCRAWL_API_KEY" \ "https://www.socialcrawl.dev/v1/home_depot/stores?query=95032" ``` ```json { "place": { "id": "1009", "name": "Hillsdale", "address": "1855 Hillsdale Ave, San Jose, CA 95124", "phone": "(408)978-6807", "latitude": 37.263343, "longitude": -121.921355, "url": "https://www.homedepot.com/l/Hillsdale/CA/San-Jose/95124/1009" } } ``` The local-stock flow is three calls. Turn the ZIP into a `store_id` with stores, then call product with `item_id` and `store_id`, and read the row with `is_selected_store: true`. Pass the id as a string exactly as stores returns it, with leading zeros. An unknown store number is rejected. ## What does the Home Depot API not do? `GET /v1/home_depot/category` is withdrawn while its data source is re-established. It answers 503 and costs 0 credits, so use keyword search to find item ids. Sorting and filtering happen on the rows you get back, and reviews come ten at a time. Error responses include a `doc_url` that points to the [error reference](/docs/errors). Calls that fail on our side are refunded. ## How do you start? Create an account and an API key. Signup includes free credits. Run the search call above, read `data` before you write a parser, and take an `item_id` from the result for product and reviews. To look at the response shapes before writing code, use the [explorer](/explorer). ## Frequently asked questions ### Is there an official Home Depot product API for developers? Not a public, self-serve one that we could find. SocialCrawl is independent of Home Depot and is not part of any Home Depot partner program. The `/v1/home_depot/` endpoints are a separate, self-serve API with search, product, reviews and stores. ### How much does a Home Depot product API call cost? Search, product and reviews cost 5 credits each. The stores lookup costs 1 credit. A request that is rejected before it is fetched, such as an unsupported filter, costs 0. See [per-endpoint credit costs](/docs/endpoint-pricing) for the full table. ### Can the API return in-store inventory and local availability? Yes. Get a `store_id` from the stores endpoint, then pass it to product. Stock appears in `product.ext.store_inventory`, and the row marked `is_selected_store` is your store. ### Why do brand, price and sort filters return a 400? The search source does not support them, so the API rejects them by name instead of silently ignoring them. Search accepts `query`, `page` and `store_id`. Filter the returned rows on `price.current`, `brand`, `rating` and `availability`.