Grainger Product Scraper
Pricing
from $4.00 / 1,000 dataset items
Grainger Product Scraper
Scrape Grainger.com industrial and MRO products by keyword, category or item number: web price and list price, brand, manufacturer part number, stock status, full technical specs, images and category path. Built for price monitoring and catalog enrichment. Pay only for results.
Pricing
from $4.00 / 1,000 dataset items
Rating
0.0
(0)
Developer
axly
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
1
Monthly active users
12 hours
Issues response
a day ago
Last modified
Categories
Share
Get clean, structured product data from Grainger.com — the largest US industrial and MRO supplier — by keyword, category or item number. Web price and list price, brand, manufacturer part number, stock status, the full technical spec sheet, images and category path for every product, as JSON, CSV or Excel.
No Grainger account, no browser automation and no proxy setup needed.
Who uses it
- Procurement & MRO buyers — price-check a list of Grainger item numbers on a schedule and catch price changes before re-ordering.
- Distributors & resellers (Zoro, Amazon Business, eBay, your own store) — monitor Grainger prices and stock status across whole categories to stay competitive.
- PIM / catalog teams & SaaS developers — enrich product records with manufacturer part numbers, specs, dimensions, weights and images.
- Analysts & researchers — track industrial pricing, discounts (list vs web price) and assortment by category.
What you get
| Field | Type | Example |
|---|---|---|
sku | string | 52RW10 (Grainger item number) |
name | string | Disposable Gloves: Chemical-Resistant/Food-Grade/Gen Purpose, XS ( 6 ), 8 mil, Grain, 50 PK |
description | string | short description |
brand | string | ANSELL |
manufacturer_part_number | string | 93-260 |
price | number | 49.99 — current web price |
list_price | number | 62.5 — list price before discount |
currency | string | USD |
price_type | string | WP web price, ZPR1 promotion, … |
unit | string | Package, Each, … |
sales_status / sales_status_message | string | ST / Typically in Stock |
stocked, discontinued, clearance, ready_to_ship | boolean | stock & lifecycle flags |
online_availability | string | GENERALSALE |
rating, review_count | number | review summary |
image | string | main product image URL |
url | string | https://www.grainger.com/product/52RW10 |
category_path | string | Safety > Hand & Arm Protection > Safety Gloves > … |
specs | object | {"Material": "Neoprene/Nitrile", "Nominal Palm Thickness": "8 mil", …} |
package | object | sell-pack height, length, width (in), weight (lb), quantity |
has_alternates | boolean | Grainger lists alternate products |
restricted_states | array | US states where sale is restricted |
source, search_query, category_url | string | how the row was found |
scraped_at | string | ISO-8601 UTC timestamp |
Use cases
- SKU price monitoring — paste your Grainger item numbers into Item numbers, schedule a daily run and diff
price/sales_statusin Google Sheets or your ERP. - Category price intelligence — point Category URLs at e.g.
…/category/safety/hand-arm-protectionand collect every product in every sub-category with prices and specs. - Competitive repricing — search for the products you sell (
"dewalt drill","safety glasses") and compare Grainger's web price and discount against yours. - Catalog enrichment — fill missing manufacturer part numbers, specifications, dimensions and images in your PIM from a list of item numbers.
Input
| Parameter | Description | Default |
|---|---|---|
| Search queries | Keywords, item numbers or part numbers, as typed into Grainger search. Each query expands into its best-matching categories with the query as a filter. | — |
| Category URLs | Grainger category pages. Parent categories are crawled into all sub-categories. | — |
| Item numbers or product URLs | e.g. 52RW10 or https://www.grainger.com/product/…-52RW10. Looked up 100 at a time. | — |
| Max products (total) | Stop after this many rows. | 100 |
| Max products per query / category | Cap per search query and per category URL. | 200 |
| Max categories per search query | How many matching categories a search collects from. | 5 |
| Sort order | Top sellers, price low→high / high→low, brand A→Z / Z→A (Grainger's own ordering). | Top sellers |
| Include technical specifications | Add the specs object. | on |
Provide at least one of search queries, category URLs or item numbers. They can be combined in one run; each product is returned once.
Example input
{"searchQueries": ["nitrile gloves"],"categoryUrls": ["https://www.grainger.com/category/safety/hand-arm-protection/finger-protection"],"skus": ["52RW10", "https://www.grainger.com/product/ANSELL-Disposable-Gloves-Chemical-793JR4"],"maxItems": 60,"maxItemsPerQuery": 30,"sort": "price_asc"}
Example output
{"sku": "52RW10","name": "Disposable Gloves: Chemical-Resistant/Food-Grade/Gen Purpose, XS ( 6 ), 8 mil, Grain, 50 PK","description": "DisposableGloves, Green, XS, Size6, PK50","brand": "ANSELL","manufacturer_part_number": "93-260","price": 49.99,"list_price": 62.5,"currency": "USD","price_type": "WP","unit": "Package","sales_status": "ST","sales_status_message": "Typically in Stock","stocked": true,"discontinued": false,"clearance": false,"ready_to_ship": true,"online_availability": "GENERALSALE","rating": 0.0,"review_count": 0,"image": "https://static.grainger.com/rp/s/is/image/Grainger/52RW10_GC01?$lgmain$","url": "https://www.grainger.com/product/52RW10","category_path": "Safety > Hand & Arm Protection > Safety Gloves > Disposable Gloves > General Purpose Disposable Gloves","specs": {"Material": "Neoprene/Nitrile", "Nominal Palm Thickness": "8 mil", "Powdered/Powder-Free": "Powder-Free", "Color Family": "Green"},"package": {"height": 2.6, "length": 11.1, "width": 5.0, "weight": 1.3, "quantity": 1},"has_alternates": true,"restricted_states": [],"source": "sku","search_query": null,"category_url": null,"scraped_at": "2026-10-02T06:02:33Z"}
Scheduling, webhooks and integrations
- Schedule the Actor (e.g. daily at 06:00) from the Schedules tab for ongoing price monitoring.
- Export results as JSON, CSV, Excel or XML, or pull them via the Apify API.
- Integrate with Google Sheets, Make, Zapier, Slack, Airbyte or a webhook that fires when a run finishes.
Use with AI assistants (MCP)
This Actor works with the Apify MCP server, so Claude, ChatGPT, Cursor and other MCP clients can call it directly — e.g. "Find the 20 cheapest nitrile gloves on Grainger and list brand, part number and price."
FAQ
How many products can I get? Grainger lists about 1.6 million items. Use category URLs (parents are crawled into every sub-category) or item-number lists for bulk jobs; maxItems caps the run.
How fresh is the data? Every run fetches live data from Grainger at run time — prices and stock status are what a visitor sees at that moment.
Which price is returned? The public (guest) web price and the list price. Account- or contract-specific pricing requires a Grainger login and is not included.
Why does a search return products from several categories? Grainger maps keywords to categories; the Actor collects the best-matching categories (maxCategoriesPerQuery) with your query applied as a filter. Grainger's matching can be broad — use category URLs or item numbers when you need an exact scope.
Is "price low to high" strictly ordered? The order is Grainger's own sort, which can differ slightly from the displayed web price for multi-pack items.
What happens with an item number that doesn't exist? It's skipped and logged; the run continues.
Is scraping Grainger legal? The Actor collects publicly available product information. You are responsible for using the data in line with Grainger's terms and applicable law.
Something broke or a field is missing? Open an issue on the Actor's Issues tab — reports are answered quickly.