{
  "openapi": "3.0.1",
  "info": {
    "title": "Home Depot Scraper — Products, Prices & Reviews",
    "description": "Scrape Home Depot products from homedepot.com by keyword, category or product URL: title, brand, model, price, sale price, rating, review count, stock, images, specifications and reviews.",
    "version": "0.1",
    "x-build-id": "wMhDgDSWgGhS7AXYr"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/tortuga~home-depot-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-tortuga-home-depot-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/tortuga~home-depot-scraper/runs": {
      "post": {
        "operationId": "runs-sync-tortuga-home-depot-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/tortuga~home-depot-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-tortuga-home-depot-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "searchTerms": {
            "title": "Search terms",
            "type": "array",
            "description": "Keywords to search on homedepot.com, one per line (e.g. \"air fryer\", \"cordless drill\"). Each term is searched separately and paginated automatically: one request returns a results page of 24 products (12 when Home Depot answers the term with one of its category pages), sponsored tiles included.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "homedepot.com URLs to scrape instead of (or in addition to) search terms: search pages (https://www.homedepot.com/s/air%20fryer), category pages (https://www.homedepot.com/b/Tools-Power-Tools-Drills/N-5yc1vZc27f, filters and sort parameters are kept), product pages (https://www.homedepot.com/p/DEWALT-Atomic-20V-.../322138372, returned with full details) or review pages (https://www.homedepot.com/p/reviews/DEWALT-Atomic-20V-.../322138372/1, returns reviews only). Department landing pages (/c/...) have no product list and are skipped with an error.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxItems": {
            "title": "Max items",
            "minimum": 1,
            "type": "integer",
            "description": "Stop after this many dataset items in total. Products and reviews both count, so with reviews on raise it accordingly (50 products with 10 reviews each = 550 items). With \"Only new or changed items\" on, this is the number of products checked per run instead. Keeps cost predictable.",
            "default": 50
          },
          "maxPagesPerSearch": {
            "title": "Max pages per search",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "How many result pages to open per search term or listing URL (one proxy request per page; 24 products per search page, 12 per category page). Pages are only requested while Max items still needs them.",
            "default": 3
          },
          "includeSponsored": {
            "title": "Include sponsored products",
            "type": "boolean",
            "description": "Home Depot mixes 2-3 sponsored tiles into every results page. They are saved with isSponsored = true. Turn this off to keep organic results only (recommended for scheduled price monitoring: ads rotate on every visit).",
            "default": true
          },
          "includeDetails": {
            "title": "Include product details",
            "type": "boolean",
            "description": "Also open every product page to get the description, highlights and feature bullets, the full specification table (grouped as on the page), every image, videos, manuals and other PDFs, UPC / GTIN, dimensions and weight, sale start and end dates, the 1-5 star rating breakdown, recommendation counts and the Q&A count. One extra proxy request (7-60 seconds) and one extra `detail` charge per product (see pricing).",
            "default": false
          },
          "maxReviewsPerProduct": {
            "title": "Max reviews per product",
            "minimum": 0,
            "maximum": 3000,
            "type": "integer",
            "description": "Customer reviews to collect per product, as separate items with type = \"review\" (rating, title, text, date, reviewer nickname and location as shown, recommended flag, helpful votes, photos, secondary ratings, brand response). 0 = no reviews. Up to 10 reviews come free with product details; beyond that Home Depot's reviews page serves 30 per request, in Home Depot's own order (reviews with photos first, newest first within).",
            "default": 0
          },
          "storeId": {
            "title": "Store number (optional)",
            "type": "string",
            "description": "Price and stock for one Home Depot store, e.g. 121 (Cumberland, Atlanta) or 2702 (Warren, MI). Leave empty to let Home Depot pick a store from the proxy's location, which can differ from request to request. Find a store number in the store's page URL on homedepot.com (the last number in /l/<city>/<state>/<id>). With a store set, listing results (price, strike-through price, pickup stock and quantities, delivery date, which products appear and in what order) are for that store, and every item records requestedStoreId and locationApplied next to the store Home Depot reported. ZIP code lookup is not offered: Home Depot's store finder cannot be reached anonymously."
          },
          "onlyNewOrChanged": {
            "title": "Only new or changed items",
            "type": "boolean",
            "description": "Remember what earlier runs of this search returned and output only new products or products whose price, strike-through price or stock status changed. Use with a Schedule; unchanged items are not charged and no product page is opened for them.",
            "default": false
          },
          "monitoringKey": {
            "title": "Monitoring key",
            "type": "string",
            "description": "Name for this watch, so several schedules on the same search stay separate; defaults to a key derived from the search input."
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "homedepot.com answers datacenter and residential proxies with an Akamai error page, so the default is Apify's Unblocker proxy (group UNBLOCKER, US). The Unblocker is billed to your Apify account per request: 10 Unblocker units, about $0.0015 on the free plan and less on paid plans, for every attempt the Actor makes, including the occasional attempt the proxy cannot complete (HTTP 502, retried automatically). One request returns a results page (12-24 products), one product page, or 30 reviews. The proxy renders the pages in a browser, which takes 7-75 seconds each.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "UNBLOCKER"
              ],
              "apifyProxyCountry": "US"
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}