# Home Depot Scraper API > Source: https://scrape.do/documentation/homedepot-api/ Fetch Home Depot product pages scoped to a specific store, and look up stores by zip code or coordinates The Home Depot API fetches `homedepot.com` pages through a store-scoped session, so the response reflects the pricing, availability, and fulfillment options of the store you name rather than a random default. A companion endpoint resolves store IDs from a zip code or a pair of coordinates. > [!NOTE] > Home Depot pages are returned as **HTML**, not parsed JSON. The store lookup endpoint returns JSON. If you need structured product fields, parse the HTML on your side. ## Endpoints | Endpoint | Returns | Purpose | |----------|---------|---------| | `/plugin/homedepot/product` | HTML | A product page rendered for a specific store | | `/plugin/homedepot/stores` | JSON | Stores near a zip code or coordinate pair | Both endpoints cost **10 credits** per successful request. Requests rejected with `400` are not charged. > [!WARNING] > Home Depot is a synchronous-only plugin. It is not currently available through the [Async API](/documentation/async-api/plugins/), which rejects `homedepot/product` and `homedepot/stores` with `unsupported plugin key`. --- ## Product Endpoint ### Basic Example ```bash curl "https://api.scrape.do/plugin/homedepot/product?token=YOUR_TOKEN&url=https%3A%2F%2Fwww.homedepot.com%2Fp%2FMilwaukee-M12-FUEL-12V-Lithium-Ion-Brushless-Cordless-3-in-Cut-Off-Saw-w-M12-XC-5-0-Ah-Battery-2-Pack-Starter-Kit-and-Charger-2522-20-48-59-2450P%2F330625530&storeid=2414&zipcode=04401" ``` ### Request Parameters All three parameters are required. Omitting any of them returns `400` before any page is fetched, so the request costs nothing. | Parameter | Type | Description | |-----------|------|-------------| | `token` | string | Your Scrape.do API authentication token | | `url` | string | Full Home Depot product URL, URL-encoded. Must be on `homedepot.com` | | `storeid` | string | Home Depot store number, for example `2414`. Resolve one with the [stores endpoint](#stores-endpoint) | | `zipcode` | string | Zip code used to localize the session, for example `04401` | ### Notes - The `storeid` and `zipcode` are applied to the session before the page is fetched, so prices, stock, and pickup options come back as that store serves them. - The response is the full product page HTML, typically around 700 KB. - Home Depot loads some pricing through client-side calls after the initial render. If a field you need is missing from the HTML, it is being fetched separately by the page rather than being withheld by the API. --- ## Stores Endpoint Resolves nearby stores, including the `storeId` values the product endpoint expects. ### Basic Example ```bash curl "https://api.scrape.do/plugin/homedepot/stores?token=YOUR_TOKEN&zipcode=04401" ``` ### Request Parameters Provide either `zipcode` **or** both `lat` and `lng`. Sending neither returns `400 zipcode (or lat+lng) is required`, and `lat` without `lng` is rejected the same way. | Parameter | Type | Description | |-----------|------|-------------| | `token` | string | Your Scrape.do API authentication token | | `zipcode` | string | Zip code to search around, for example `04401` | | `lat` | number | Latitude, used together with `lng` as an alternative to `zipcode` | | `lng` | number | Longitude, used together with `lat` | ### Coordinate Example ```bash curl "https://api.scrape.do/plugin/homedepot/stores?token=YOUR_TOKEN&lat=44.8&lng=-68.75" ``` ### Response ```json { "data": { "storeSearch": { "stores": [ { "storeId": "2414", "name": "Bangor", "phone": "(207)990-3133", "distance": "2.59", "storeTimeZone": "EST5EDT", "address": { "street": "650 Stillwater Avenue", "city": "Bangor", "state": "ME", "country": "US", "postalCode": "04401" }, "coordinates": { "lat": 44.83381, "lng": -68.754598 } } ] } } } ``` | Field | Description | |-------|-------------| | `storeId` | Pass this as `storeid` to the product endpoint | | `name` | Store name, usually the city or neighborhood | | `distance` | Distance in miles from the searched location | | `address` | Street, city, state, country, and postal code | | `coordinates` | Store latitude and longitude | The number of stores returned depends on density around the search point. A rural zip code may return three, while a dense metro area returns twenty. A zip code with no nearby stores returns `200` with an empty `stores` array rather than an error. --- ## Error Responses | Status | Body | Cause | |--------|------|-------| | `400` | `{"error":"zipcode is required"}` | Product endpoint called without `zipcode` | | `400` | `{"error":"storeid is required"}` | Product endpoint called without `storeid` | | `400` | `{"error":"zipcode (or lat+lng) is required"}` | Stores endpoint called without `zipcode`, or with `lat` but no `lng` | Rejected requests are not charged.