{
  "openapi": "3.0.1",
  "info": {
    "title": "Lowe's Scraper · Products, Prices, Store Stock & Specs",
    "description": "Scrape Lowe's by category, search or product URL, keyword or item number. Get price, was price, sale end date, rating, reviews, stock by fulfilment method, and one store's price, shelf count and pickup. Add full specs, description, UPC, dimensions and manuals per product. JSON, CSV, Excel.",
    "version": "0.0",
    "x-build-id": "KIdf9XfLJG9t2qYcn"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/memo23~lowes-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-memo23-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/memo23~lowes-scraper/runs": {
      "post": {
        "operationId": "runs-sync-memo23-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/memo23~lowes-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-memo23-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": {
          "startUrls": {
            "title": "Lowe's URLs",
            "type": "array",
            "description": "Lowe's pages to scrape, in any mix: category listings (<code>lowes.com/pl/…/4294607728</code>, a brand in the path works too), best-seller pages (<code>lowes.com/best-sellers/…/{id}</code>), search pages (<code>lowes.com/search?searchTerm=cordless+drill</code>) and product pages (<code>lowes.com/pd/…/5013207487</code>). Every source yields product rows. Department landing pages (<code>lowes.com/c/…</code>) have no product list: open a category under them and paste its <code>/pl/</code> URL. Example: <code>https://www.lowes.com/pl/power-tools/drills-drivers/4294607728</code>.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "searchQueries": {
            "title": "Search keywords",
            "type": "array",
            "description": "Each keyword runs as its own Lowe's search, up to about 740 results. Rows carry national prices. When Lowe's answers a keyword with a category page, that category is paged instead, and a selected store applies there. An item or model number goes straight to its product. Example: <code>cordless drill</code>.",
            "items": {
              "type": "string"
            }
          },
          "itemIds": {
            "title": "Item numbers or product IDs",
            "type": "array",
            "description": "Lowe's item numbers (the \"Item #\" on the product page and shelf tag, e.g. <code>4913878</code>) or product IDs (the number at the end of a product URL, e.g. <code>5013207487</code>), one per line. Each becomes one product row at national prices.",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max products",
            "minimum": 1,
            "type": "integer",
            "description": "Hard cap on product rows across all sources. Every row is billed, so this is the spending limit. Rows removed by the filters below do not count toward it. Free-plan users get at most 50 per run, and after the first 3 products their rows come back with the price, stock and detail fields empty (a freePlanNote marks them); any paid plan returns every field. Default: 100.",
            "default": 100
          },
          "includeDetails": {
            "title": "Add product-page details",
            "type": "boolean",
            "description": "Open each product's own page for the long description, feature bullets, the full specification table, UPC, dimensions and weight, manuals, the ENERGY STAR and Lowe's-exclusive flags, and the date Lowe's first listed it. One extra page per product, so runs take longer, and each row that gets these fields is billed one extra <code>additional-data</code> event. Off by default: listing rows already carry price, sale, rating, stock and key specs.",
            "default": false
          },
          "storeId": {
            "title": "Lowe's store number",
            "type": "string",
            "description": "Store number, e.g. <code>0595</code> (Mooresville, NC); leading zeros are optional. Category and best-seller listings then carry that store's price, shelf quantity (<code>storeQuantity</code>) and pickup availability. Keyword searches and product pages stay at national prices. Leave empty for national prices."
          },
          "zipCode": {
            "title": "ZIP code",
            "type": "string",
            "description": "Five-digit US ZIP code, e.g. <code>28117</code>, used to find the nearest store when <b>Lowe's store number</b> is empty. The run log names the store it picked. If no store is found, prices stay national and the log says so; a store number skips the lookup."
          },
          "sort": {
            "title": "Sort category listings by",
            "enum": [
              "featured",
              "bestSellers",
              "highestRated",
              "newest",
              "priceLowToHigh"
            ],
            "type": "string",
            "description": "Order of category listings, which decides which products come first when Max products ends the run early. Best-seller URLs keep their best-seller order unless you pick another sort here. Keyword searches keep Lowe's own relevance order. Default: Featured.",
            "default": "featured"
          },
          "splitLargeCategories": {
            "title": "Go past 600 products per category",
            "type": "boolean",
            "description": "One Lowe's listing pages through about 600 products. When a category holds more and Max products asks for more than 600, the run walks its subcategories (or, for a category without any, its brands) to reach the rest, with duplicates removed. Turn off to stop at the first 600 of each category. Default: on.",
            "default": true
          },
          "onSaleOnly": {
            "title": "On sale only",
            "type": "boolean",
            "description": "Keep only products with a was price, meaning Lowe's currently shows them marked down. Default: off.",
            "default": false
          },
          "inStockOnly": {
            "title": "In stock only",
            "type": "boolean",
            "description": "With a store selected, keep only products on the shelf there (storeQuantity above 0). Without a store, keep products available through at least one fulfilment method (parcel, pickup or delivery). Default: off.",
            "default": false
          },
          "minPrice": {
            "title": "Min price (USD)",
            "minimum": 0,
            "type": "number",
            "description": "Drop products priced below this many US dollars, e.g. <code>25</code>. For a product sold as a price range, the low end is compared. Empty means no lower bound."
          },
          "maxPrice": {
            "title": "Max price (USD)",
            "minimum": 0,
            "type": "number",
            "description": "Drop products priced above this many US dollars, e.g. <code>200</code>. For a product sold as a price range, the low end is compared. Empty means no upper bound."
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 16,
            "type": "integer",
            "description": "Category listings and product pages fetched in parallel, from 1 to 16. Raise it to speed up large runs with product-page details. Default: 6.",
            "default": 6
          },
          "cacheMaxAgeHours": {
            "title": "Reuse recent results (hours)",
            "minimum": 0,
            "maximum": 720,
            "type": "integer",
            "description": "When one of your earlier runs already fetched a Lowe's search or product page, reuse it if it is younger than this many hours instead of fetching it again. Repeat runs then finish in seconds instead of minutes, and the pages are kept per account: only your own runs' pages are reused, never another user's. Category listings are always fetched live. <b>What a longer window costs you:</b> a reused page carries the price, sale, fulfilment and stock that were on it when it was fetched, so at 24 hours you can be reading yesterday's price as today's. The default of 1 hour is chosen for that reason — it is long enough to stop one bulk job fetching the same product page twice, short enough that the figure is still current. Set 0 to always fetch fresh. Default: 1.",
            "default": 1
          },
          "proxy": {
            "title": "Own proxies (optional)",
            "type": "object",
            "description": "Leave empty and the actor uses its own US residential connection, which Lowe's requires. To use your own proxies instead, enter custom proxy URLs: they must be US residential exits, because Lowe's refuses datacenter and non-US IPs. They carry the category listings; keyword searches and product pages always go through the actor's own page service. Apify Proxy settings in this field are not used."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}