Lowe's Product Scraper: Prices, Stock & Specs avatar

Lowe's Product Scraper: Prices, Stock & Specs

Pricing

from $4.25 / 1,000 products

Go to Apify Store
Lowe's Product Scraper: Prices, Stock & Specs

Lowe's Product Scraper: Prices, Stock & Specs

Search lowes.com by keyword, or paste category and product links, and get one row per product: title, brand, item and model number, price with the was/now saving, rating, review count, and shipping, pickup and delivery stock for the store you pick by ZIP. $4.40 per 1,000 products.

Pricing

from $4.25 / 1,000 products

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

18

Total users

12

Monthly active users

8 days ago

Last modified

Share

Search lowes.com or paste a Lowe's link or product id and get one row per product: title, brand, item and model number, price with the was/now saving, rating and review count, and whether it ships, sits on a shelf for pickup or can be delivered.

Your own store's price and stock need full detail, since the faster listing mode shows whatever default store and price Lowe's picks. And one search or category stops at 744 products, which is how deep Lowe's results go.

InputSearch terms, Lowe's search, category or product links, or bare product ids
OutputOne row per product: item and model number, price and was/now saving, rating, reviews, shipping, pickup and delivery stock; specs and dimensions in full
Ceiling5,000 products per run, and 744 per search term or category
Account neededNone
Price$4.40 per 1,000 products on the Free plan, a little less on paid plans. The free plan's $5 a month covers about 1,100

🔍 What Lowe's Product Scraper does

It pages through Lowe's results 24 products at a time until it has maxItems or reaches the 744 Lowe's shows for one term or category.

listing mode takes what the results page carries: title, brand, price, rating, review count and stock flags. Some tiles say "See Product Page" instead of a price, and on some categories that is every tile, so those rows get their product page opened and the price filled in. They are marked listing+price.

full mode opens the product page for every row. That brings the store's own price, which is often the one carrying the was/now saving, stock at your store, the full specifications, the barcode, weight and dimensions. It adds one lookup per product, so a big run takes longer; 45 products took 23 seconds on a test run. The price per product is the same either way.

Prices, promotions and pickup stock differ from store to store. Give a ZIP and it finds the nearest store: 90210 resolves to store 2714 in Los Angeles, 28202 to store 2348 in Charlotte. Give a store number if you know it. Give neither and it uses store 0595. priceScope on each row says whether the price is that store's (STORE) or Lowe's national one (NETWORK).

📋 What data you get from each Lowe's product

What you getField
Product id, item and model number, brand, title and linkproductId, itemNumber, modelNumber, brand, title, url
Price, range and whose price it isprice, priceMax, priceIsRange, priceScope
The was/now saving and when the promotion endslistPrice, savingsAmount, savingsPercent, promotionEndsAt, isDealOfTheDay, promotions
Rating and review countrating, reviewCount
Every way Lowe's offers it, with quantitiesfulfillment
The same stock picture as columnsavailableForShipping, availableForPickup, availableForDelivery, pickupStoreNumber, pickupQuantity, deliveryLeadTimeDays, inStock, freeShipping, availabilityMessage
The store the row was asked forstoreNumber
Images and bulletsimageUrl, images, bulletPoints
Lowe's classificationdepartment, category, subCategory
In full: specs, barcode, weight, dimensions and flagsspecifications, barcode, weight, dimensions, lowesExclusive, energyStar, maxPurchaseQuantity
How the row was read, and what found itdetailLevel, searchQuery, sourceUrl, position

▶️ How to scrape Lowe's products

  1. Open Lowe's Product Scraper and click Try for free.
  2. Type what you want into Search terms, or paste pages into Lowe's URLs or product IDs.
  3. Set Maximum products.
  4. For your store's price and stock, set How much detail per product to Full and fill in ZIP code or Store number.
  5. Click Start, then download the dataset as JSON, CSV or Excel.

The sample row appears only when a run has no search terms and no links. It is not charged.

💰 How much does it cost to scrape Lowe's products?

$4.40 per 1,000 products on the Free plan. Paid plans pay a little less: $4.35 on Starter, $4.30 on Scale and $4.25 on Business. full costs the same per product as listing. On the free plan, the $5 Apify gives you each month covers about 1,100 products.

Not charged: the sample row, every note listed further down, and a product that turns up under two of your search terms, which is delivered once. A run that finds nothing charges for no products. When Lowe's lists a product without a price and then turns away the request for it, that product is left out with a free REFUSED note instead of arriving with a blank price. If you set a maximum cost for the run, it reads no more products than that covers and stops there.

📥 What you give it

{
"searchQueries": ["smoke detector", "door knob"],
"maxItems": 45,
"detailLevel": "full",
"storeNumber": "1636"
}
FieldDefaultWhat it is
searchQueriesnoneSearch terms, one per line, as you would type them into Lowe's search box. A model number works too.
startUrlsnoneLowe's search pages, category (/pl/...) pages or product (/pd/...) pages. A bare product id like 5013207487 works too. Mixes freely with the terms above.
maxItems501 to 5,000 products, across everything you asked for. You pay per product, so this is also your budget.
detailLevellistinglisting for speed, full for store price, store stock, specs and dimensions.
zipCodenoneA US ZIP. The nearest Lowe's store is looked up and used.
storeNumberstore 0595, unless a ZIP is givenA four-digit store number, such as 0595 or 1636. Wins over the ZIP. It is used exactly as typed, so check it.
proxyConfigurationnoneOnly for your own servers, which are used as given. Leave it alone otherwise.

📤 What you get back

A real row from a full run for store 1636 on 20 September 2026, with the photo list, bullets, specifications and dimensions cut short:

{
"productId": "5019242437",
"itemNumber": "9055247",
"modelNumber": "SC2-W10-T",
"brand": "First Alert",
"title": "10-Year Battery, Hardwired (with Battery Backup) Photoelectric Interconnected Combination Smoke and Carbon Monoxide Detector",
"url": "https://www.lowes.com/pd/First-Alert-FA-10YR-HW-PHOTO-COMBO-W-PLUG-10E/5019242437",
"price": 50.15,
"priceMax": null,
"priceIsRange": false,
"listPrice": 75.98,
"savingsAmount": 25.83,
"savingsPercent": 34,
"promotionEndsAt": "2026-11-02T00:00:00.000Z",
"priceScope": "STORE",
"isDealOfTheDay": false,
"promotions": ["Free Delivery", "Delivery"],
"freeShipping": null,
"availabilityMessage": null,
"rating": 4.6,
"reviewCount": 11,
"fulfillment": [
{ "method": "Parcel", "available": true, "quantity": 94, "onHandQuantity": 70, "leadTimeDays": 0, "storeNumber": "2879" },
{ "method": "Pickup", "available": true, "quantity": 61, "onHandQuantity": 56, "leadTimeDays": 0, "storeNumber": "1636" },
{ "method": "Delivery", "available": true, "quantity": 90, "onHandQuantity": 0, "leadTimeDays": 2, "storeNumber": "2879" },
{ "method": "ExpeditedDelivery", "available": true, "quantity": 85, "onHandQuantity": 56, "leadTimeDays": null, "storeNumber": "1636" }
],
"availableForShipping": true,
"availableForPickup": true,
"availableForDelivery": true,
"pickupStoreNumber": "1636",
"pickupQuantity": 56,
"deliveryLeadTimeDays": 2,
"storeNumber": "1636",
"inStock": true,
"imageUrl": "https://mobileimages.lowes.com/productimages/4132bf23-c263-4973-83e9-ca0c8bbae520/83540612.png",
"images": ["https://mobileimages.lowes.com/productimages/4132bf23-c263-4973-83e9-ca0c8bbae520/83540612.png"],
"bulletPoints": ["10-year sealed battery eliminates the need for battery replacements and low-battery chirps for the life of the alarm"],
"specifications": [
{ "key": "Power Source", "value": "Hardwired" },
{ "key": "Alarm Sensor Type", "value": "Photoelectric" }
],
"department": "ELECTRICAL",
"category": "FIRE SAFETY",
"subCategory": "COMBO ALARMS",
"barcode": "194160017418",
"detailLevel": "full",
"searchQuery": "smoke detector",
"sourceUrl": null,
"position": 21,
"scrapedAt": "2026-09-20T00:40:45.108Z",
"weight": 0.805,
"dimensions": {
"height": { "uom": "Inches", "value": "7.13", "conversions": [{ "uom": "Centimeters", "value": "18.1102", "system": "Metric" }] }
},
"lowesExclusive": null,
"energyStar": null,
"maxPurchaseQuantity": null
}
FieldHow to read it
price, priceScopeThe selling price, and whether it is the store's (STORE) or Lowe's national figure (NETWORK).
listPrice, savingsAmount, savingsPercent, promotionEndsAtThe "was" price and the saving. listPrice is null when the item is not on promotion, not when a price is missing.
priceIsRange, priceMaxItems with variants at different prices. price is then the "from" figure and priceMax the top.
fulfillmentOne entry per way Lowe's offers the item. Parcel is shipped, Pickup is in store, Delivery comes by truck. The storeNumber inside each is where Lowe's would source it; for parcel that is usually a warehouse, not your store.
onHandQuantity, quantityWhat is physically at that location, and what Lowe's can pull in from elsewhere.
storeNumber, pickupStoreNumberThe store the row was asked for, and the store the pickup figures belong to. In listing mode these can differ.
detailLevellisting, listing+price (price fetched from the product page) or full.
barcode, weight, dimensionsbarcode is often null on listing rows, and weight and dimensions only appear when the product page was read (full or listing+price).

🧾 Reading the output

Real product rows have no charged field. The free rows carry charged: false, so dropping those leaves only products.

RowHow to spot itBilled
A productA productId and no charged fieldyes
The sample_sample: true and charged: falseno
A note_diagnostic: true, charged: false, with an errorCode, an error and a hintno

The sample looks like a full product row, so filter on _sample or charged rather than on the fields.

errorCodeWhat it means
REFUSEDLowe's did not answer that search, category or product this time, or would not give the price of a product it listed without one. Re-running usually gets it.
NO_RESULTSLowe's returned no products for that term or category. Try a broader term or check the spelling.
PRODUCT_NOT_FOUNDNo product behind that id. Ids change when an item is discontinued or merged.
BAD_URLNot a Lowe's search, category or product link, and not a product id.
STORE_NOT_FOUNDNo store came back for that ZIP. The run carries on with store 0595.
TIME_LIMITThe run got close to its time limit and stopped on its own. The products delivered before that are in the dataset and charged as usual. Give the run more time, or ask for fewer products, to get the rest.

A run ends as failed only when the time limit stopped it before any product came back.

💡 What people use it for

  • Tracking prices by model number on a schedule. The was/now pair comes through, so a promotion shows up as a promotion rather than as a lower number.
  • Pulling a category. /pl/Drills/4294857977 gave 320 products when it was tested.
  • Checking pickup stock at one store before a job, with full and that store's ZIP.
  • Matching Lowe's items to a product list by brand and model number, with the barcode from full.

🚧 What it does not do

  • US only. lowes.com. Lowe's Canada is a separate site.
  • 744 products per search term or category. That is how deep Lowe's results go. Split a big pull into narrower terms, or use category links, which each have their own 744.
  • No review text. Star rating and review count only.
  • No sorting or filtering. Rows come back in Lowe's default order. Sort after export.
  • No MyLowe's or Pro pricing. These are signed-out prices, with no member or cart discounts.
  • Some items have no price anywhere. Special orders, quote-only items and installed services come back with price: null rather than a guess.
  • A store number is not checked. Lowe's answers for any four-digit number, so a typo gives you a store that does not exist. A ZIP is looked up, and a wrong one gets a free note.
  • It is not an official Lowe's tool. Dami's Studio is independent and is not affiliated with or endorsed by Lowe's, or by any other company named on this page.

🧭 Which home and retail scraper do you need?

If you wantUse
Lowe's products with store price, stock and specsThis one
Target products with promotions and pickup stockTarget.com Product Scraper
Amazon products by keyword or ASIN, with the on-page reviewsAmazon Scraper
A Shopify store's whole catalogueShopify Products Scraper
Restock and price-drop alerts on stores that publish product data, such as Shopify or WooCommerce shopsProduct Price & Stock Monitor

❓ Questions people ask

Do I need a Lowe's account or an API key?

No. Nothing to sign up for and nothing to paste.

How do I get Lowe's prices for my local store?

Put your ZIP in zipCode and set detailLevel to full. Check priceScope on each row: STORE is your store's price.

How many products can I get for one search term?

  1. For more, use several narrower terms or category links.

Why is price null on some rows?

Lowe's has no public price on that item, usually a special order, a quote-only product or an installed service.

Can I call it from code or connect it to an AI assistant?

Yes. The API tab has ready-made code for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/lowes-scraper. Either way the run happens on your Apify account at the same price.

Is this affiliated with Lowe's?

No. It reads what lowes.com shows anyone signed out. "Lowe's" is a trademark of Lowe's Companies, Inc., used here only to say what the actor reads. On the legal side, Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.

🆘 If something breaks

Open the Issues tab on the actor page and send the input you used and the run ID; the note rows in the dataset usually name the reason already.