Skip to content
    ↑↓ to choose · Enter to open

    · 13 min read

    Zoro Scraper: 27 Categories Covered (2026)

    By CrawlerBros Engineering Team

    A thousand wholesale catalog records costs $5.00 per 1,000 results on the free tier. This Actor extracts listings across 27 categories or targeted searches from Zoro.com, returning manufacturer part numbers, live wholesale prices, list prices, and product specifications without requiring private logins. Basic listing runs return 13 fields, while detailed extractions append full spec tables, UPCs, and availability statuses. Built for procurement analysts, pricing intelligence teams, and catalog engineers needing industrial B2B data. Not for buyers seeking industrial equipment from restaurant specialists, who should look at dedicated commercial kitchen tools.

    Try it: open Zoro Scraper on Apify, sign in on the free plan and run the prefilled example.

    Can you try Zoro Scraper before paying?

    Yes. Apify's free plan includes $5.00 of prepaid usage every month and asks for no credit card. At $0.005 per result, that covers up to 1,000 results of Zoro Scraper a month, before run-start charges and platform usage.

    The example request further down caps maxItems at 5, so a first run returns at most 5 results and costs at most $0.025 in result charges. That is enough to see the real shape of the data before deciding anything.

    Zoro Scraper was last updated on 2026-08-14. It is one of 1,725 Actors CrawlerBros publishes on Apify, which together have 700,550 lifetime public runs and an average rating of 4.63 out of 5 across 416 reviews.

    What does it cost to run Zoro Scraper?

    Each result costs $0.005 on Apify's free plan, which is $5.00 per 1,000 results. Starting a run is charged separately at $0.005 per GB of Actor memory. Apify also bills the platform usage each run consumes, at the rates of your Apify plan, on top of these charges.

    Apify plan Per result Per 1,000 results
    FREE $0.005 $5.00
    BRONZE $0.00433 $4.33
    SILVER $0.00367 $3.67
    GOLD $0.003 $3.00
    PLATINUM $0.003 $3.00
    DIAMOND $0.003 $3.00

    The primary cost driver is maxItems, which directly limits how many dataset records are written and billed. Testing queries with maxItems set to 5 caps result charges at $0.025. Enabling includeDetails fetches supplementary detail pages but does not increase dataset result counts.

    How do you run Zoro Scraper from the API?

    The schema marks 1 of its 13 controls as required: mode. Nothing in the payload below is illustrative. Those are the schema's prefilled defaults for Zoro Scraper, so the request works once your token is in place.

    Call the synchronous endpoint to start a run and receive dataset items in one request:

    curl -X POST "https://api.apify.com/v2/acts/crawlerbros~zoro-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
      -H "Content-Type: application/json" \
      -d '{"mode":"search","searchQuery":"drill","startUrls":[],"includeDetails":false,"maxItems":5,"proxyConfiguration":{"useApifyProxy":true}}'
    

    The same run from Python, using the official client:

    from apify_client import ApifyClient
    
    client = ApifyClient("<YOUR_APIFY_TOKEN>")
    
    run_input = {
      "mode": "search",
      "searchQuery": "drill",
      "startUrls": [],
      "includeDetails": False,
      "maxItems": 5,
      "proxyConfiguration": {
        "useApifyProxy": True
      }
    }
    
    run = client.actor("crawlerbros~zoro-scraper").call(run_input=run_input)
    
    for item in client.dataset(run["defaultDatasetId"]).iterate_items():
        print(item)
    

    And from Node.js:

    import { ApifyClient } from 'apify-client'
    
    const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' })
    
    const input = {
      "mode": "search",
      "searchQuery": "drill",
      "startUrls": [],
      "includeDetails": false,
      "maxItems": 5,
      "proxyConfiguration": {
        "useApifyProxy": true
      }
    }
    
    const run = await client.actor('crawlerbros~zoro-scraper').call(input)
    const { items } = await client.dataset(run.defaultDatasetId).listItems()
    console.log(items)
    

    Because the call is synchronous, your client waits for the whole run. Keep it for exploration. For scheduled work, start the run without waiting and collect the dataset afterwards, so network trouble costs you a retry rather than the results.

    Which Zoro Scraper inputs matter, and which can you skip?

    The essential control is mode, which dictates whether the run operates on searchQuery, category, categoryUrl, or startUrls. Most initial runs should leave includeDetails set to false and proxyConfiguration on its default setting.

    • mode (string): What to fetch. Default: "search".
    • searchQuery (string): Free-text keyword query, e.g. drill, paper towels, safety glasses (mode=search). Default: "drill".
    • startUrls (array): One or more zoro.com product URLs to fetch, e.g. https://www.zoro.com/.../i/G805612238/. Default: [].
    • includeDetails (boolean): For search/category modes: also fetch each product's detail page for description, specs, UPC, availability and category path. Increases runtime and request count. Default: false.
    • maxItems (integer): Hard cap on emitted records. Default: 50.
    • proxyConfiguration (object): Optional. Zoro works without a proxy on most networks; if set, Apify proxy is used automatically as a fallback when requests are rate-limited or blocked. Leave the group unset to use your account's first available proxy group (e.g. RESIDENTIAL), or pick a specific group. Default: {"useApifyProxy":true}.
    • category (string): Top-level category to browse. All subcategories are included via Zoro's shop-all listing.
    • categoryUrl (string): Any zoro.com category URL, e.g. https://www.zoro.com/cordless-drills/c/5861/. Takes precedence over category and lets you browse subcategories directly.
    • brand (string): Only emit products from this brand (case-insensitive). Products without a brand name pass through.
    • minPrice (integer): Drop products priced below this. Products without a listed price pass through.
    • maxPrice (integer): Drop products priced above this.
    • minRating (number): Only emit products rated at least this (0-5, one decimal). Products without a rating pass through.

    The other 1 controls, with their defaults, are listed in the input schema on Zoro Scraper on Apify.

    Fixed-choice controls: mode accepts search (Search products by keyword), browseByCategory (Browse a category), byUrl (Fetch products from URLs); category accepts 27 values, including tools-machining/c/z2 (Tools & Machining), shipping-packaging-office-supplies/c/z9 (Shipping, Packaging & Office Supplies), plumbing/c/z3 (Plumbing), safety/c/z1 (Safety); brand accepts 30 values, including 3M, Milwaukee Tool, Dewalt, Bosch.

    What does Zoro Scraper return?

    Basic runs emit 13 fields including productId, brand, mfrNo, price, listPrice, and rating. Detail runs emit 11 fields including specs, upc, weight, and description. Records do not contain UNSPSC or eClass taxonomy codes.

    Output per product (search / category modes)

    • productId - Zoro item number (e.g. G805612238)
    • title, brand, mfrNo - manufacturer part number
    • price - USD float; currency: "USD", priceUnit (e.g. /ea, /pk 24, $7.21/ea)
    • listPrice - original/street price when Zoro shows a strikethrough
    • rating, reviewCount - from Zoro's public ratings API
    • imageUrl - primary product image (CDN-hosted)
    • productUrl - canonical product page on zoro.com
    • sourceUrl - canonical source page for the record
    • recordType: "product", scrapedAt

    Output per product detail (mode = byUrl, or search/category with includeDetails)

    • description - long-form product description
    • specs - key features/specs as name→value pairs (e.g. Voltage → 20 V DC), capped at 40
    • upc, countryOfOrigin
    • availability - InStock / OutOfStock from the page's structured data
    • weight - e.g. 4.7 lb
    • categoryPath - breadcrumb trail (e.g. Tools & Machining > Power Tools and Accessories > Cordless Drills)
    • freeShipping - whether Zoro advertises free shipping on the product
    • imageUrls - all product images on the detail page
    • recordType: "productDetail", scrapedAt

    These are the documented fields. Optional ones can be empty on a given record, so measure how often each field your deliverable depends on is populated across a real sample before automating the handoff.

    How do you build the workflow end to end?

    Open Zoro Scraper and work through these in order. Each step ends with something to check, so a bad configuration surfaces on a small run rather than a scheduled one.

    1. Run a minimal validation check using mode set to search with searchQuery set to safety glasses and maxItems capped at 5.
    2. Verify the dataset output contains populated productId, title, and price fields before spending budget on wider queries.
    3. Choose your operational mode among search, browseByCategory, or byUrl based on whether you have keywords, taxonomy selections, or explicit target links.
    4. Set includeDetails to true only if downstream systems require specs, weight, upc, and long-form description fields.
    5. Apply upstream filters like brand, minPrice, maxPrice, or minRating to avoid emitting irrelevant records.
    6. Execute the full job and export the resulting dataset items directly into your analytical pipeline.

    How do you apply it? Three worked playbooks

    These are Zoro Scraper's own documented use cases, each worked through as an operating pattern rather than a description.

    Use case 1: Price intelligence

    Outcome: Track wholesale pricing and list-price discounts across industrial categories for competitive benchmarking

    Configure: Set mode to browseByCategory, category to tools-machining/c/z2, includeDetails to false, and maxItems to 500.

    Working method: Start with a category-wide listing run to capture base price and listPrice values across SKUs, identifying discounted items where listPrice exceeds current price.

    Deliverable: A structured pricing dataset containing productId, title, brand, price, listPrice, and priceUnit for competitive margin analysis.

    Stop condition: More than 5% of emitted records have null price values across commercial categories.

    Use case 2: Procurement research

    Outcome: Compare manufacturer part numbers, pack sizes and ratings before ordering

    Configure: Set mode to search, searchQuery to cordless drill, brand to Milwaukee Tool, minRating to 4.0, and maxItems to 100.

    Working method: Execute a filtered search by brand and minimum rating, comparing mfrNo against target requisition lists and parsing priceUnit to normalize bulk pack costs.

    Deliverable: A procurement candidate table mapped by mfrNo with matching price, rating, reviewCount, and availability.

    Stop condition: Returned items show mismatched brands when brand filter was explicitly assigned.

    Use case 3: eCommerce enrichment

    Outcome: Join Zoro specs (voltage, dimensions, material) into your own product catalog via UPC or Mfr #

    Configure: Set mode to byUrl, startUrls to target product links, includeDetails to true, and maxItems to 200.

    Working method: Feed product URLs directly into the actor with full details enabled to extract deep technical attributes, joining the output specs table onto internal catalogs via upc or mfrNo.

    Deliverable: Enriched product detail records including specs key-value mappings, description, weight, countryOfOrigin, and upc.

    Stop condition: Output records emit product recordType instead of productDetail when detail extraction was requested.

    What breaks, and how do you design around it?

    • Ratings lag the page: ratings/review counts come from Zoro's public ratings API and may not exist for brand-new products - those records simply omit rating/reviewCount.
    • eClass/UNSPSC not exposed: Zoro's product pages do not carry eClass or UNSPSC classification codes, so no such field is emitted.
    • Single-word queries can return empty SSR pages (e.g. bare tape) - Zoro's search engine renders no product cards for some short queries without a browser; use a more specific query (e.g. duct tape).
    • Occasional broken upstream image URLs: a very small share of Zoro's CDN image URLs 404 even from a browser (observed ~0.3% of sampled products). The URL is emitted exactly as Zoro serves it; verify critical images before bulk use.

    If single-word queries return empty pages due to server rendering behavior, supply multi-word phrases such as duct tape instead of tape. For records lacking rating values, treat them as unrated inventory rather than missing data. When CDN image links fail upstream, validate the imageUrl against your asset pipeline before importing.

    When should you not use Zoro Scraper?

    Do not use this Actor if your target inventory focuses specifically on commercial restaurant supplies, food service equipment, or commercial refrigeration. Zoro covers general MRO and industrial hardware, but specialized commercial kitchen catalogs require deeper hospitality supply data. For dedicated restaurant and food service procurement, use KaTom Restaurant Supply Scraper instead. Additionally, if your procurement workflow strictly requires formal UNSPSC classification codes embedded in the feed, Zoro does not publish these identifiers on product pages, making manual re-classification necessary.

    What should you check before trusting the output?

    • Verify that price is a populated numeric float and currency is USD on commercial records.
    • Check that productId matches Zoro item numbering format, such as starting with G followed by digits.
    • Confirm specs contains key-value pairs when running with includeDetails set to true.
    • Halt and review query terms if zero items are returned for common keywords, avoiding single bare words that trigger empty search responses.

    None of this proves a record is correct. It gives a scheduled Zoro Scraper run defined points where it should stop instead of quietly passing bad data downstream.

    Frequently asked questions

    How much does running Zoro Scraper cost on Apify?

    Results cost $0.005 per result, which equals $5.00 per 1,000 results on the free tier. Apify bills platform usage separately. The free plan provides $5.00 of monthly usage without a credit card, covering up to 1,000 results.

    Does this scraper require residential proxies to access Zoro?

    No. Zoro.com serves server-rendered pages accessible from standard datacenter IPs without authentication. The proxyConfiguration setting defaults to automatic and acts as a fallback only if rate limiting occurs.

    Why do some products omit the rating and reviewCount fields?

    Ratings are fetched from Zoro's public ratings service. Products without published customer reviews omit the rating and reviewCount keys entirely rather than writing null or zero placeholders into the dataset.

    How do I extract deep product attributes like voltage and weight?

    Set mode to byUrl or enable includeDetails on search and category runs. This instructs the Actor to scrape individual product pages, returning 11 fields including the specs dictionary, weight, and upc.

    Can I scrape specific subcategories instead of top-level categories?

    Yes. While category lets you pick from 27 top-level categories, you can provide any direct subcategory link using the categoryUrl input control, which overrides the general category selector.

    Where to go next

    When you are ready to run it, open Zoro Scraper on Apify; the free plan covers up to 1,000 results a month.

    Start with the Zoro Scraper Actor page for the current input schema, pricing tier, and run history.

    Other Actors we maintain for related data:

    Related guides:

    Resources

    • Actor documentation, input schema, and pricing: verified against the published Actor on 2026-09-29.

    • Actor last updated by its maintainers on 2026-08-14.

    • Run outcome figures cover the 30 day public window ending 2026-09-29.

    • Zoro Scraper on Apify

    Featured actors

    Zoro Scraper

    Scrape wholesale retail products from Zoro.com (Grainger's brand) - search by keyword, browse 27 categories or fetch by product URL. Prices, list prices, brands, MPNs, ratings, specs and images.

    Run on Apify ↗