Lowe's Scraper: Products, Prices, Stock & Store Savings
Pricing
from $3.60 / 1,000 products
Lowe's Scraper: Products, Prices, Stock & Store Savings
Get Lowe's store prices and stock for tools, appliances and building supplies by ZIP or store ID. Capture was prices, savings with dates, item and model numbers, pickup quantity and optional aisle, bay and UPC. About $0.0045 per product + $0.20 start. No login.
Pricing
from $3.60 / 1,000 products
Rating
0.0
(0)
Developer
fortbrand
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Security
Limited permissionsShare
For retail price analysts, brands, contractors, comparison services and resellers who need the advertised Lowe's price and pickup stock at a chosen US store.
About $0.0045 per product at one store. Twenty products cost about $0.09, and 1,000 product-store rows cost about $4.50, plus $0.20 browser startup at the default 2 GB. Paid Apify plans receive tier discounts. You need no Lowe's login, exported cookies or external API key.
The Actor uses the same retail inputs and field names as the Safeway and Albertsons family. Each product-store observation has its own scrape timestamp.
What you get
Every product row starts with a readable verdict, followed by the common retail schema. A product found more than once at the same store is delivered and charged once. The same product at two stores is two observations, because each store may have a different price or pickup quantity.
| Information | Output fields |
|---|---|
| Store and location | storeId, storeName, location, storeAddress, storeTimezone |
| Product matching | productId, sku, itemNumber, modelNumber, gtin, upc |
| Advertised price | price, regularPrice, currency, priceScope |
| Sale and savings | onSale, isDeal, promoText, promoType, savingsAmount, savingsPercent |
| Promotion dates | promoStart, promoEnd when the source supplies them |
| Pickup stock | inStock, stockLevel, stockQuantity, availableForPickup |
| Conditional bulk offers | bulkPrice, bulkMinimumQuantity, bulkPrices, offers with purchase conditions |
| Other fulfillment | availableForShipping, availableForDelivery, fulfillment |
| Store aisle and bay | aisle, bay, aisleLocations from product detail when supplied |
| Comparable metadata | title, brand, size, unitPrice, unitOfMeasure, rating, reviewCount, category |
| Evidence | url, imageUrl, sourceUrl, scrapedAt, recordType |
| Optional detail | details.specifications, details.description, details.bullets, details.barcodes, details.measurements |
For flooring, price is the purchasable carton price, while unitPrice can be the square-foot price. A live source example was $46.19 per carton and $1.99 per SQFT. Inventory counts remain quantities of the product SKU.
UI-only per-piece calculations can remain null when the public product data does not expose their value. Bulk prices are conditional SKU prices, with the minimum quantity and original offer text retained.
A missing source field stays null. The Actor does not guess a barcode, unit price, promotion start date or stock count. In particular, a product's catalog publication date is never used as a promotion start date.
Store selection is part of correctness
Lowe's may return a product page with your requested store's address while its price and inventory still belong to the visitor's default store. This Actor checks the store that supplied the product data. A store address alone is not accepted as proof of price scope.
When you give locations, the public store locator chooses the nearest Lowe's store and that store is selected before reading products. The row retains your requested ZIP in location, and names the actual store in storeId. When you give storeIds, those exact verified stores take precedence over ZIPs. An invalid store is reported with a free note; a default-store price is not substituted.
stockLevel and stockQuantity mean the on-hand pickup quantity that the public site reports for the selected store. They are not network-wide totals. A parcel warehouse's quantity does not become local shelf stock. fulfillment retains the source location for each shipping or delivery method so you can interpret those separately. The public quantity is an online inventory signal and can differ from a physical count.
Start a run
- Enter one or more search terms, category or product links, or product IDs.
- Choose US ZIP codes or exact store IDs and set the result limits.
- Run the Actor and export the dataset as JSON, CSV or Excel.
The prefill requests 20 hammers near ZIP 28117. For monitoring, use the product IDs at the end of Lowe's URLs. Item numbers, models and UPCs are separate identifiers.
{"searchTerms": ["hammer"],"locations": ["28117"],"maxItemsPerSearch": 20,"maxItems": 20,"dealsOnly": false,"includeDetails": false}
Monitor a known list
Two products at two stores are four observations: about $0.018 in Product charges plus the $0.20 default start charge.
{"productIds": ["1002967576", "5014148635"],"storeIds": ["1674", "0595"],"maxItems": 4,"includeDetails": true}
Product detail is always used for an explicit product ID or product URL. includeDetails controls the additional descriptive output and requests product detail for products discovered through search or categories. It has no separate product surcharge. If optional detail is refused, the verified listing observation can still be delivered, accompanied by a free note.
Search, categories and deals
Search terms can be ordinary words, a brand and product type, or a model number. A search that redirects to one product is handled as a product lookup. Category URLs must be public /pl/ links ending in their numeric category ID. The input's store selection controls the resulting observations.
{"startUrls": ["https://www.lowes.com/pl/hand-tools/hammers/4294857564"],"storeIds": ["1674"],"maxItemsPerSearch": 100,"maxItems": 100}
For sales, use dealsOnly: true with search terms or category URLs, or supply the public Lowe's deals category. The output includes actual sale prices and Deal of the Day flags. Conditional product and Bulk Savings offers also qualify as deals and retain their purchase conditions. price remains the single-SKU advertised price. Free shipping and financing offers alone do not make a product a price deal.
{"startUrls": ["https://www.lowes.com/pl/Deals/1611079983848"],"locations": ["28117"],"dealsOnly": true,"maxItemsPerSearch": 50,"maxItems": 50}
A single listing is limited to at most 744 result positions, and sponsored products and rolled-up variants can reduce the number of distinct rows. Lowe's limits the depth of an individual listing. One search or category is not a whole-catalog export. Split broader coverage into narrower categories or several relevant searches, or use a maintained list of product IDs. Sponsored products can overlap pages; those duplicates do not incur another product charge.
Input reference
| Input | Default | Meaning |
|---|---|---|
searchTerms | Hammer when no source is supplied | Array of searches, each run at every selected store |
startUrls | Empty | Optional product, search, category or deals links |
productIds | Empty | Optional numeric Lowe's product IDs from product URLs |
locations | Website default store if empty | Array of five-digit US ZIP codes; nearest store selected |
storeIds | Empty | Exact verified store numbers; takes precedence over ZIPs |
maxItemsPerSearch | 20 | Maximum new rows from each search or category at one store |
maxItems | 20 | Global maximum product-store rows; up to 10,000 |
dealsOnly | False | Keep sale-priced or Deal of the Day products |
includeDetails | False | Add product detail for discovered products |
proxyConfiguration | US residential | Optional explicit proxy configuration |
Invalid input produces diagnostic notes and a summary with no Product charges. The run start charge still applies. Check the summary's status, freeFailures, outcomes and notes when incorporating results into an automated workflow. An empty result does not prove that a product is out of stock. A refusal is reported as a refusal, rather than converted into a negative inventory observation.
Reading the results
The dataset contains PRODUCT and free NOTE rows. Filter recordType === "PRODUCT" for a table containing only paid product observations. A note has a readable explanation in verdict, a code and contextual identifiers. Note rows never create a Product charge.
The overview shows prices, promotions, unit prices, stock and stores. The deals view adds savings, dates and bulk quantities. DEALS contains only deal observations; SUMMARY records coverage, free failures, outcomes and spending-limit state.
A live signed-out source check on 3 November 2026 returned Kobalt product 1002967576 at Brooklyn store 1674 for $21.98, with 11 on hand. A DEWALT product at that store was $99, was $179, with an $80 saving and a source promotion end timestamp of 2027-01-20T00:00:00.000Z. These are examples from those observations, not promises about the next run's price or inventory.
price is the advertised signed-out selling price. Credit-card savings, financing, installation, taxes, cart discounts and personalized rewards are not silently deducted. memberPrice and memberProgram remain null when the source does not give a separate supported member product price. priceScope retains whether Lowe's labeled a price as store, network or special-order pricing. inStock uses positive on-hand quantity when available, otherwise the site's pickup availability signal.
Monitor prices every day
Save the input as an Apify task and attach an Apify schedule. Each execution creates a fresh dataset. Keep the product and store IDs stable, join observations by storeId and productId, and retain scrapedAt for comparisons.
Interrupted runs recover from saved state and dataset rows. Completed rows are skipped and acknowledged charges are reconciled on reboot. A new scheduled execution is a new observation and charges for its delivered rows.
Pricing and spending limits
| Delivered observations | List-price product charge |
|---|---|
| 20 rows | $0.09 |
| 100 rows | $0.45 |
| 1,000 rows | $4.50 |
The browser start charge is $0.20 at the default 2 GB ($0.10 per GB, minimum one GB). This covers the anonymous visitor session needed to read the retailer. It is separate from the Product charge. Bronze receives 5% off the product price, Silver 10%, and Gold and higher 20%. One product at one store is one Product charge. Duplicate observations within a run, refused requests, retries, empty results and note rows have no Product charge.
Set maxItems to control how many observations you request. You can also set the Apify run option maxTotalChargeUsd to cap the run's charges. The Actor checks that limit before delivering the next paid observation and stops cleanly when the remaining allowance cannot cover another Product.
Use through the API
Pass your Apify token securely in the authorization header. The same family inputs work through the Console and API.
import osimport requestsresponse = requests.post("https://api.apify.com/v2/acts/vant47~lowes-scraper/runs",headers={"Authorization": "Bearer " + os.environ["APIFY_TOKEN"]},json={"productIds": ["1002967576"],"storeIds": ["1674"],"maxItems": 1},timeout=60,)response.raise_for_status()run = response.json()["data"]print(run["id"], run["defaultDatasetId"])
Poll the asynchronous run, then read its dataset and SUMMARY.
Use with AI agents (MCP)
Connect an MCP client to https://mcp.apify.com, read the Actor input schema, and request product IDs at exact store numbers with a result cap. Retrieve the dataset and summary, distinguish free notes from products, and preserve missing values as null.
Limits and frequently asked questions
Do I need a Lowe's account? No. Only public signed-out pages and anonymous visitor state are used. Account cookies are not accepted and CAPTCHAs are not solved. Refused sessions are retried; persistent failures produce free Product notes.
Can I choose a ZIP? Yes. locations resolves the nearest store and retains the requested ZIP. Use storeIds to keep the same stores between scheduled runs.
Is an item number a product ID? No. productId is the number ending a product URL; itemNumber and sku hold Lowe's item number, and modelNumber holds the manufacturer's model.
Why are some fields blank? Availability differs between source surfaces. Details add what is supplied. UI-only unit calculations, member or cart prices, and unexposed promotion starts remain null. A nearby store's stock or aisle is never substituted.
Does pickup availability mean stock on hand? A future pickup quantity can include stock brought from elsewhere. stockLevel is the reported on-hand count; fulfillment retains the separate availability and date information.
Can one search export the catalog? No. The retailer caps listing depth. Use narrower categories, several searches or a known product list. The result limit is an upper bound; duplicates and exhausted source pages can reduce the count.
What happens on a source refusal? Already delivered observations remain available. The summary identifies free failures. A refusal is not treated as evidence that a product is out of stock.
Is this an official integration? No. This independent tool is unaffiliated with Lowe's. Prices, assortment, promotions and inventory come from the retailer.
Cloud validation
The production checks completed 30 varied inputs across five ZIP codes. Two volume checks each delivered 1,100 unique product-store rows with exactly 1,100 Product charges and no source failures. Ten distinct products were checked against live product pages. Reboot and one-product spending-limit checks preserved the delivery and charge counts. Anonymous-session retries can extend cold startup.