{
  "openapi": "3.0.1",
  "info": {
    "title": "Home Depot & Lowe's Scraper - Price & Store Stock",
    "description": "Scrape Home Depot and Lowe's products by keyword, category URL, product URL or item ID: price, was-price, UPC, model, SKU, local store price, in-store stock quantity, aisle/bay, pickup/delivery, specs, images, ratings and optional reviews.",
    "version": "1.0",
    "x-build-id": "IUDBgagz63hsurtIw"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/wrenfield-data~home-depot-lowes-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-wrenfield-data-home-depot-lowes-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/wrenfield-data~home-depot-lowes-scraper/runs": {
      "post": {
        "operationId": "runs-sync-wrenfield-data-home-depot-lowes-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/wrenfield-data~home-depot-lowes-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-wrenfield-data-home-depot-lowes-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": {
          "searchKeywords": {
            "title": "Search keywords",
            "type": "array",
            "description": "Keywords to search, one per line (e.g. <code>cordless drill</code>, <code>claw hammer</code>). Each keyword is searched on the retailer(s) chosen below and returns up to <i>Max products per search/category</i> products from each.",
            "items": {
              "type": "string"
            }
          },
          "retailer": {
            "title": "Retailer for keyword searches",
            "enum": [
              "both",
              "homedepot",
              "lowes"
            ],
            "type": "string",
            "description": "Where to search the keywords. URLs and prefixed item IDs always go to the retailer they belong to.",
            "default": "both"
          },
          "startUrls": {
            "title": "Category, search or product URLs",
            "type": "array",
            "description": "homedepot.com category pages (<code>/b/...N-5yc1v...</code>), search pages (<code>/s/drill</code>) or product pages (<code>/p/...</code>); lowes.com category pages (<code>/pl/...</code>), search pages (<code>/search?searchTerm=...</code>) or product pages (<code>/pd/...</code>).",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "productIds": {
            "title": "Product IDs or URLs",
            "type": "array",
            "description": "One per line: product URLs, or IDs with a prefix - <code>hd:205594063</code> (Home Depot internet # / OMSID), <code>lowes:1000379005</code> (Lowe's product ID from the URL) or <code>lowes:921987</code> (Lowe's item #). Bare 9-digit numbers are treated as Home Depot IDs, other numbers as Lowe's.",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max products (total)",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Maximum number of product rows for the whole run (reviews are not counted). Duplicates across inputs are skipped.",
            "default": 50
          },
          "maxItemsPerQuery": {
            "title": "Max products per search/category",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "How many products to take from each keyword (per retailer) or category URL. Both sites show 24 products per page; Home Depot allows paging to about 700 products per search.",
            "default": 24
          },
          "includeDetails": {
            "title": "Scrape full product details",
            "type": "boolean",
            "description": "Fetch each product's detail data: UPC, model, specifications, description, all images, categories, fulfillment and aisle/bay. Turn off for a faster listing-only scrape (title, price, rating, stock from the search grid).",
            "default": true
          },
          "zipCode": {
            "title": "ZIP code (local store, price and stock)",
            "type": "string",
            "description": "Optional 5-digit US ZIP. The nearest Home Depot and Lowe's stores are used for local price, in-store stock quantity and aisle/bay. Leave empty for online (national) prices."
          },
          "homeDepotStoreId": {
            "title": "Home Depot store ID",
            "type": "string",
            "description": "Optional Home Depot store number (e.g. <code>121</code>), overrides the ZIP lookup. Shown on homedepot.com store pages."
          },
          "lowesStoreId": {
            "title": "Lowe's store ID",
            "type": "string",
            "description": "Optional Lowe's store number (e.g. <code>1807</code>), overrides the ZIP lookup. Recommended for Lowe's - faster and more reliable than a ZIP search."
          },
          "includeReviews": {
            "title": "Scrape reviews",
            "type": "boolean",
            "description": "Also output customer reviews for every product (one row per review, type = review).",
            "default": false
          },
          "maxReviewsPerProduct": {
            "title": "Max reviews per product",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Reviews are fetched 10 per request.",
            "default": 20
          },
          "reviewsSort": {
            "title": "Reviews sort",
            "enum": [
              "relevance",
              "newest",
              "oldest",
              "helpful",
              "highest",
              "lowest"
            ],
            "type": "string",
            "description": "Lowe's supports only most relevant and newest; other options fall back to most relevant there.",
            "default": "relevance"
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Defaults to Apify Proxy: datacenter IPs where they work (Lowe's product data) and US residential IPs with real-browser sessions where they are required (Home Depot, Lowe's search pages).",
            "default": {
              "useApifyProxy": true
            }
          },
          "residentialFallback": {
            "title": "Residential fallback",
            "type": "boolean",
            "description": "Use US residential IPs when datacenter IPs are blocked. Required for Home Depot.",
            "default": true
          },
          "useBrowserSessions": {
            "title": "Browser sessions",
            "type": "boolean",
            "description": "Open a real browser once per proxy session to pass the sites' bot protection, then reuse its cookies for fast API requests. Turning this off makes Home Depot and Lowe's search pages fail.",
            "default": true
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 32,
            "type": "integer",
            "description": "Parallel requests.",
            "default": 8
          },
          "maxRetries": {
            "title": "Max attempts per request",
            "minimum": 2,
            "maximum": 20,
            "type": "integer",
            "description": "Blocked requests are retried with a new IP and session.",
            "default": 8
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}