Lowes Scraper API
View as MarkdownFetch Lowes product pages, search results, and category listings scoped to a specific store
The Lowes API fetches lowes.com pages through a store-scoped session. Every request carries a store ID and zip code, so prices, stock, and fulfillment options come back as that specific store serves them rather than from a default location.
The response format depends on which URL you send. Product and search pages return HTML, while Lowes' own product APIs (/wpd/… and /pl/…/products) return JSON. See URL patterns.
Endpoint
https://api.scrape.do/plugin/lowes/storeEach successful request costs 10 credits. Requests rejected with 400 are not charged.
Basic Example
curl "https://api.scrape.do/plugin/lowes/store?token=YOUR_TOKEN&url=https%3A%2F%2Fwww.lowes.com%2Fpd%2FDisney-Airblown-Holiday-Stitch%2F5016066683&zipcode=28202&storeid=0595"Request Parameters
url, zipcode, and storeid are all required. Omitting any of them returns 400 before the page is fetched, so the request costs nothing.
| Parameter | Type | Description |
|---|---|---|
token | string | Your Scrape.do API authentication token |
url | string | Full Lowes URL, URL-encoded. Must be on lowes.com and match an accepted pattern |
zipcode | string | Numeric zip code, digits only, for example 28202 |
storeid | string | Numeric Lowes store ID, digits only, for example 0595 |
Optional Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
disableretry | true / false | false | Disables retry logic for the request |
transparentresponse | true / false | false | Returns the raw upstream response on timeout instead of a 502 |
timeout | number | system max | Per-request timeout in milliseconds |
URL Patterns
Only these paths are accepted. Anything else returns 400 valid lowes url expected.
| Pattern | Returns | Example |
|---|---|---|
/pd/<slug>/<itemId> | HTML | https://www.lowes.com/pd/Disney-Airblown-Holiday-Stitch/5016066683 |
/search… | HTML | https://www.lowes.com/search?searchTerm=socket+holder |
/pl/<category>/<id>/products | JSON | https://www.lowes.com/pl/power-tools/4294607842/products |
/wpd/<itemId>/productdetail/<storeId>/<auth>/<zipCode> | JSON | https://www.lowes.com/wpd/1000002288/productdetail/0208/Guest/92253 |
/collections/api/items/<groupId>/COLL_MANDATORY/<storeId>/<auth>/<zipCode> | JSON | Collections API. Needs a real collection group ID; an invalid one returns Lowes' own 400 Invalid request params input |
/purchase/api/cart/cartitems | JSON | Cart-add endpoint. Lowes expects POST here, and async plugin jobs always issue GET, so a plain request returns 404 |
Path Segments Must Match Your Parameters
For /wpd/… and /collections/… URLs, the <storeId> and <zipCode> segments inside the path must match the storeid and zipcode parameters exactly. A mismatch returns:
{
"error": "valid lowes url expected",
"message": "Please ensure that url match with the provided zipcode and storeid parameters."
}JSON Responses
/pl/…/products returns a paginated category listing:
{
"itemCount": 6878,
"sponsoredItemCount": 4,
"adjustedNextOffset": 20,
"categories": [{ "name": "Power Tools", "nValue": "4294607842" }]
}itemCount reflects Lowes' live catalog and changes between requests. Use adjustedNextOffset to page through results.
/wpd/… returns product detail keyed by item ID:
{
"productDetails": {
"5016066683": {
"product": {
"omniItemId": "5016066683",
"brand": "Disney",
"additionalBadges": ["Only at Lowes"]
}
}
}
}Notes
- Store scoping is real, not cosmetic. The same product URL fetched with different
storeidvalues returns pages carrying those respective store numbers, along with their own pricing and availability. - Search result pages are the largest responses, often exceeding 500 KB.
- The last two patterns in the table pass the plugin's URL check but still depend on Lowes accepting the request. A
400or404coming back as JSON or HTML from Lowes itself is a target-side rejection, not a plugin error.
Error Responses
| Status | Body | Cause |
|---|---|---|
400 | {"error":"invalid url provided"} | url parameter missing |
400 | {"error":"zipcode is required"} | zipcode parameter missing |
400 | {"error":"storeid is required"} | storeid parameter missing |
400 | {"error":"valid lowes url expected"} | URL is not on lowes.com, or does not match an accepted pattern |
400 | {"error":"valid lowes url expected","message":"Please ensure that url match with the provided zipcode and storeid parameters."} | /wpd/… path segments do not match the storeid and zipcode parameters |
Rejected requests are not charged.

