curl --request POST \
--url https://api.scrapeunblocker.com/marketplace/menards-search \
--header 'x-scrapeunblocker-key: <api-key>'import requests
url = "https://api.scrapeunblocker.com/marketplace/menards-search"
headers = {"x-scrapeunblocker-key": "<api-key>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {'x-scrapeunblocker-key': '<api-key>'}};
fetch('https://api.scrapeunblocker.com/marketplace/menards-search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Scrape Menards product search
Searches Menards (menards.com, US) for query and returns products: itemId, sku (the Menards SKU), modelNumber (when Menards lists it), title, brand, url, image, price (shelf price before the mail-in rebate), regularPrice (everyday low price), onSale, rebate and rebateLabel (Menards’ rebate, usually 11%), priceAfterRebate (null when the maker’s advertised-price policy moves it to checkout: priceInCheckout true, minimumAdvertisedPrice), unitOfMeasure, currency, availability (pickup, delivery, stockAtStore, stockMessage, deliveryMessage), variationCount and categoryId, plus totalResults, facets and store (the store the prices and stock are for). Set the store with store_id or zip; without one Menards shows its default online prices and no store stock. Sort with sort, filter with min_price / max_price, in_stock_today, delivery_eligible and pickup_eligible, start at page and collect up to max_results across pages (40 per page, each page billed as one request, see pagesFetched). A keyword Menards sends to a category returns that category’s products (redirectedTo); a Menards SKU returns no products and the product link in redirectedTo. A keyword Menards sends to a page of category tiles (e.g. interior paint) or one with no matches answers 404.
curl --request POST \
--url https://api.scrapeunblocker.com/marketplace/menards-search \
--header 'x-scrapeunblocker-key: <api-key>'import requests
url = "https://api.scrapeunblocker.com/marketplace/menards-search"
headers = {"x-scrapeunblocker-key": "<api-key>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {'x-scrapeunblocker-key': '<api-key>'}};
fetch('https://api.scrapeunblocker.com/marketplace/menards-search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Authorizations
Your ScrapeUnblocker API key. Apply on every request.
Query Parameters
What to search, e.g. 'cordless drill', 'garden hose' or '2x4 lumber'.
Order: relevance, price_low, price_high, title_asc, title_desc, brand_asc, brand_desc.
1-based results page to start from (1-100, 40 products per page).
Products to collect across pages (1-120); each page fetched is billed as one request.
Lowest price to include (USD).
Highest price to include (USD).
Menards store number whose prices and stock to return, e.g. '3181'. Give this or zip; with neither, Menards' default (online) prices are returned and stockAtStore is 0. The store used is named in store.
US ZIP code; the nearest Menards store is used, e.g. '55401'.
Only items in stock today at the store (needs store_id or zip).
Only items eligible for delivery.
Only items eligible for in-store pickup.
Response
JSON with a products array plus paging totals and the store.

