curl --request POST \
--url https://api.scrapeunblocker.com/marketplace/grainger-search \
--header 'x-scrapeunblocker-key: <api-key>'import requests
url = "https://api.scrapeunblocker.com/marketplace/grainger-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/grainger-search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Scrape Grainger product search
Searches Grainger (grainger.com, US industrial supplies) for query and returns Grainger’s first result rows (up to 25 items, in Grainger’s order) as products: position, sku (Grainger item number), productId, title, brand, manufacturerModel, url, image, price (Grainger’s signed-out Web Price), priceLabel, priceType, wasPrice, quantityPricing, currency, status (e.g. Sellable) and specifications (name / value, e.g. thread size, voltage, material). Grainger answers a keyword with the product category that matches it best: category names it, totalResults counts that category’s matches, and categories lists the other matching categories with counts and links (search one of them by passing its link as url). A keyword that leads to a department page (subcategory tiles, no products) is answered from the subcategory holding the product line that matches it most often: category names that subcategory, totalAcrossCategories counts the department and categories lists its subcategories. Only the first result rows are returned (no paging). Stock is not included: Grainger checks it per ZIP code after the page loads.
curl --request POST \
--url https://api.scrapeunblocker.com/marketplace/grainger-search \
--header 'x-scrapeunblocker-key: <api-key>'import requests
url = "https://api.scrapeunblocker.com/marketplace/grainger-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/grainger-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. 'safety glasses', 'hex bolt', 'cordless drill' or a manufacturer model.
Items to return (1-25); Grainger's first result rows for the keyword.
Instead of query: a Grainger search link, e.g. https://www.grainger.com/search?searchQuery=hex+bolt.
Response
JSON with a products array, the category and totals.

