{
  "openapi": "3.0.1",
  "info": {
    "title": "Home Depot Reviews Scraper: Ratings & Review Data",
    "description": "Extract Home Depot product reviews: rating, review text, reviewer name, verified-purchase flag, timestamp, helpful votes, photos, and attribute sub-ratings. Optional watchlist mode alerts only on reviews new since the last tracked run.",
    "version": "0.2",
    "x-build-id": "Haor9c0L7jGuwcmvH"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/getascraper~homedepot-reviews-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-getascraper-homedepot-reviews-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/getascraper~homedepot-reviews-scraper/runs": {
      "post": {
        "operationId": "runs-sync-getascraper-homedepot-reviews-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/getascraper~homedepot-reviews-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-getascraper-homedepot-reviews-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",
        "required": [
          "productUrls"
        ],
        "properties": {
          "productUrls": {
            "title": "Home Depot product URLs",
            "type": "array",
            "description": "Paste one or more Home Depot product page URLs (the /p/... links) to fetch reviews for. A plain model number alone is not enough to locate a product, so a full product URL is required for each item.",
            "default": [
              {
                "url": "https://www.homedepot.com/p/RYOBI-ONE-18V-Cordless-3-8-in-Drill-Driver-Kit-with-Battery-and-Charger-PCL201K1/339545347"
              }
            ],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxReviewsPerProduct": {
            "title": "Max reviews per product",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Stop fetching reviews for a product once this many have been collected. Kept low by default so a first run finishes quickly; raise it once you know how many reviews a product actually has.",
            "default": 20
          },
          "sortBy": {
            "title": "Sort reviews by",
            "enum": [
              "newest",
              "mosthelpfull",
              "highestrating",
              "lowestrating"
            ],
            "type": "string",
            "description": "Order reviews are fetched in, matching Home Depot's own review sort control (confirmed live against the site's own review API). Newest surfaces new feedback first, which pairs naturally with monitor mode below.",
            "default": "newest"
          },
          "verifiedPurchasesOnly": {
            "title": "Verified purchases only",
            "type": "boolean",
            "description": "Only collect reviews Home Depot has flagged as a verified purchase, skipping unverified reviews entirely rather than just labeling them.",
            "default": false
          },
          "starRatingFilter": {
            "title": "Star rating filter",
            "uniqueItems": true,
            "type": "array",
            "description": "Only collect reviews with these star ratings, applied by Home Depot's own review API before results are sent back (confirmed live: requesting only 5-star reviews on a test product returned 823 results, all rated 5; requesting only 1-star returned 54, all rated 1). Leave empty to collect all star ratings.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5"
              ],
              "enumTitles": [
                "1 star",
                "2 stars",
                "3 stars",
                "4 stars",
                "5 stars"
              ]
            },
            "default": []
          },
          "keywordSearch": {
            "title": "Keyword search within reviews",
            "type": "string",
            "description": "Only collect reviews whose text matches this keyword or phrase, searched by Home Depot's own review API itself (confirmed live: searching \"battery\" on a test product returned 267 matching reviews with visibly relevant text; a made-up word returned 0). Use this to find complaints or praise about a specific feature, such as \"durability\" or \"battery life\", instead of downloading every review and searching yourself. Leave blank to collect all reviews.",
            "default": ""
          },
          "hasPhotosOnly": {
            "title": "Only reviews with photos",
            "type": "boolean",
            "description": "Only keep reviews that include customer photos. Home Depot's review API has no server-side way to ask for this, so this Actor still fetches reviews normally and then drops the ones without photos before they reach your dataset, meaning compute cost is based on how many reviews are fetched, not how many end up in your results.",
            "default": false
          },
          "minHelpfulVotes": {
            "title": "Minimum helpful votes",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep reviews with at least this many \"helpful\" (positive) votes from other shoppers. Home Depot's review API has no server-side way to ask for this either, so it is applied the same way as the photos filter above: reviews are fetched normally and then filtered down afterward. Leave at 0 to collect all reviews regardless of helpful votes.",
            "default": 0
          },
          "monitorMode": {
            "title": "Monitor mode: only new reviews",
            "type": "boolean",
            "description": "When enabled, each product's last-seen review is remembered between runs in a named key-value store, and the run only outputs reviews posted after that point. Use this with Apify's Scheduler to get an ongoing feed of new reviews instead of re-collecting the same ones every time.",
            "default": false
          },
          "stateName": {
            "title": "Monitor state name",
            "type": "string",
            "description": "Name for the key-value store that remembers each product's last-seen review between runs. Only matters when monitor mode is on; use a different name per independent watchlist if you run this Actor on more than one schedule. The default (unnamed) key-value store resets every run, so monitor mode cannot use it.",
            "default": "default"
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "A real anti-detect browser session reached homedepot.com's search and product pages live with no proxy at all during this Actor's build, so the default is off, which is the cheapest and fastest option. Turn on a proxy only if a run reports the site blocking requests or showing region-restricted content.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}