# Uline Product Catalog Scraper: Bulk Pricing, Dimensions & Stock (`getascraper/uline-scraper`) Actor

Scrape Uline's product catalog across the US, Canada, and Mexico: SKUs, prices, bulk quantity tiers, dimensions, shipping weight, stock status, country of origin, and specs. Search by keyword, paste category URLs, or sweep the full catalog. Export to CSV, JSON, Excel, or Sheets.

- **URL**: https://apify.com/getascraper/uline-scraper.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** E-commerce, Automation
- **Features:** Limited permissions, Single-tenant, Server interface
- **Stats:** 10 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $3.00 / 1,000 product records

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## 📦 Uline Product Catalog Scraper: Bulk Pricing, Dimensions & Stock

<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0;margin-bottom:0">
<tr>
<td style="padding:24px 28px;background:#FFF3E8;border:1px solid #F6D3AE;border-top:4px solid #D97706;color:#1C1917;border-radius:10px 10px 0 0">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">Uline SKUs, price breaks and dimensions in one spreadsheet.</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Search by keyword, paste category or product links, or sweep the full catalog on the US, Canada or Mexico site. Each product comes back with its price, quantity tiers, size, weight and stock status.</span>
</td>
</tr>
</table>
<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0;margin-top:0">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #F6D3AE;border-top:none;vertical-align:top;color:#1C1917;border-radius:0 0 0 10px">
<span style="font-size:15px;font-weight:800;color:#A85A05">💲 Price breaks</span><br>
<span style="font-size:12px;color:#57534E">Every quantity tier, not only the base price</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #F6D3AE;border-top:none;border-left:none;vertical-align:top;color:#1C1917">
<span style="font-size:15px;font-weight:800;color:#A85A05">📏 Size and weight</span><br>
<span style="font-size:12px;color:#57534E">Length, width, height and shipping weight</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #F6D3AE;border-top:none;border-left:none;vertical-align:top;color:#1C1917">
<span style="font-size:15px;font-weight:800;color:#A85A05">📦 Stock and origin</span><br>
<span style="font-size:12px;color:#57534E">In-stock status and country of origin</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #F6D3AE;border-top:none;border-left:none;vertical-align:top;color:#1C1917;border-radius:0 0 10px 0">
<span style="font-size:15px;font-weight:800;color:#A85A05">🌎 Three regional sites</span><br>
<span style="font-size:12px;color:#57534E">US, Canada and Mexico catalogs</span>
</td>
</tr>
</table>

Pull structured product catalog data from [Uline](https://www.uline.com/), North America's largest shipping and industrial supply catalog, in minutes. This scraper extracts **SKUs, base prices, quantity price breaks, dimensions, shipping weights, stock status, country of origin, and specifications** across all three Uline regional sites (US, Canada, Mexico).

Search by keyword, paste any Uline category or product URL, or run a full catalog sweep. Export to JSON, CSV, Excel, or Google Sheets.

### 🔍 What does this Uline product catalog scraper do?

It collects product catalog listings from Uline and returns structured records you can use immediately. Each record includes the product name, SKU, current unit price, all bulk quantity price tiers, physical dimensions and shipping weight, stock status, country of origin, and a direct link to the product page.

You can search a term like "corrugated boxes" or "bubble wrap", paste a specific category page, or point it at any product URL. The scraper follows category and subcategory pages, extracts every product detail it finds, and stops at the limit you set.

Running on Apify means you also get scheduling, a full API, ready integrations (Google Sheets, Make, Zapier, Slack), automatic proxy rotation, and run monitoring out of the box.

### 💡 Why use Uline scraper?

- **Procurement and cost benchmarking.** Compare Uline's bulk pricing tiers against your current supplier costs and identify the quantity break that optimizes your per-unit spend.
- **Freight and logistics automation.** Extract exact length, width, height, and weight for every SKU to feed real shipping cost calculators and carrier rate engines.
- **Reseller and Amazon FBA margin analysis.** Monitor Uline prices on boxes, poly bags, and packing materials to protect resale margins as input costs shift.
- **Catalog and assortment mapping.** Build a complete snapshot of Uline's packaging, storage, or janitorial lines to inform product strategy and competitive positioning.
- **Inventory and reorder planning.** Track stock status across SKUs to anticipate supply gaps and coordinate replenishment before a shortage hits.

### 🚀 How to use Uline scraper to extract products

<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0">
<tr>
<td style="padding:16px 14px;width:33%;background:#FFF3E8;border:1px solid #F6D3AE;border-radius:10px 0 0 10px;vertical-align:top;color:#1C1917">
<span style="font-size:12px;font-weight:800;color:#A85C03;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Choose a mode</span><br>
<span style="font-size:12px;color:#57534E">Search by keyword, paste Uline links, or sweep the full catalog.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#FFF3E8;border:1px solid #F6D3AE;border-left:none;vertical-align:top;color:#1C1917">
<span style="font-size:12px;font-weight:800;color:#A85C03;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Pick site and details</span><br>
<span style="font-size:12px;color:#57534E">Select US, Canada or Mexico, then the fields you need.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#FFF3E8;border:1px solid #F6D3AE;border-left:none;border-radius:0 10px 10px 0;vertical-align:top;color:#1C1917">
<span style="font-size:12px;font-weight:800;color:#A85C03;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Export the catalog</span><br>
<span style="font-size:12px;color:#57534E">Download products as JSON, CSV, Excel or Google Sheets.</span>
</td>
</tr>
</table>

1. Click **Try for free**.
2. Choose a **Scraping mode**: Search by Keyword, Provided URLs, or Full Catalog.
3. Enter your **search keywords** (in Search mode) or paste **Start URLs** (in Provided URLs mode).
4. Select the **Uline domain** (US, Canada, or Mexico) and language.
5. Toggle any enrichment fields you need (dimensions, pricing tiers, images, descriptions).
6. Set a **Maximum products** limit to control run size and cost.
7. Click **Save & Start**.
8. When the run finishes, preview the results and export to JSON, CSV, Excel, or Google Sheets.

### 📥 Input

Configure the scraper from the Apify Console form or pass the same fields as JSON. Every field has a sensible default, so a run with only a search keyword set works right away.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| scrapeMode | enum | No | How to find products: Search by Keyword, Provided URLs, or Full Catalog auto-discovery. Defaults to Search by Keyword. |
| startUrls | array of URLs | No | Uline category, listing, or product detail URLs to scrape. Used in Provided URLs mode and as optional seed URLs in Full Catalog mode. |
| searchQuery | string | No | Search term to look up across Uline. Required in Search by Keyword mode. |
| domain | enum | No | Regional Uline site: uline.com (US/USD), uline.ca (Canada/CAD), or uline.mx (Mexico/MXN). Defaults to uline.com. |
| language | enum | No | Language subpath: en (English), fr (French), or es (Spanish). Defaults to en. |
| includeSpecs | boolean | No | Extract product length, width, height, and shipping weight. Defaults to true. |
| includeTiers | boolean | No | Extract all quantity price breaks for bulk discount analysis. Defaults to true. |
| includeDescription | boolean | No | Extract the product description text from each detail page. Defaults to true. |
| includeGallery | boolean | No | Extract all secondary product image URLs. Defaults to true. |
| maxItems | integer | No | Maximum number of products to collect in one run. Defaults to 120. |
| proxyConfiguration | proxy object | No | Proxy settings. Residential proxies are required to reliably reach Uline and are the default. |

### 📤 Output

Results are returned as a structured dataset. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. Here is a simplified example of one product record:

```json
{
  "sku": "S-4314",
  "name": "Lightweight 32 ECT Box",
  "description": "Lightweight corrugated box for cost-effective shipping.",
  "category": "Boxes",
  "subcategory": "Corrugated Boxes",
  "breadcrumb": ["Boxes", "Corrugated Boxes", "Lightweight 32 ECT Boxes"],
  "unit_price": 0.52,
  "currency": "USD",
  "price_tiers": [
    { "quantity": 1, "price": 0.52 },
    { "quantity": 25, "price": 0.44 },
    { "quantity": 100, "price": 0.38 }
  ],
  "dimensions": "6 x 6 x 6\"",
  "length": 6,
  "width": 6,
  "height": 6,
  "weight_lbs": 0.2,
  "availability": "In Stock",
  "in_stock": true,
  "country_of_origin": "USA",
  "image_url": "https://images.uline.com/is/image/uline/S-4314",
  "product_url": "https://www.uline.com/Product/Detail/S-4314/Boxes/Lightweight-32-ECT-Box",
  "scraped_at": "2026-06-27T12:00:00.000Z"
}
```

### 📊 Data table

| Field | Type | Description |
| --- | --- | --- |
| sku | string | Unique Uline SKU or model number. |
| name | string | Full product name as shown on the Uline listing. |
| description | string | Product description text, when available. |
| category | string | Top-level category from the breadcrumb trail. |
| subcategory | string | Nested subcategory from the breadcrumb trail. |
| breadcrumb | array of strings | Full breadcrumb navigation path. |
| unit_price | number | Base single-unit price in the regional currency. |
| currency | string | Currency code: USD, CAD, or MXN. |
| price_tiers | array of objects | All quantity price breaks, each with a quantity and price. |
| dimensions | string | Combined dimension string, for example 6 x 6 x 6 inches. |
| length | number | Product length as a decimal number. |
| width | number | Product width as a decimal number. |
| height | number | Product height as a decimal number. |
| weight_lbs | number | Shipping weight in pounds. |
| availability | string | Raw stock status text from the product page. |
| in_stock | boolean | Whether the product is currently in stock and ready to ship. |
| country_of_origin | string | Country where the product is manufactured, when listed. |
| image_url | string | Main product image link. |
| image_gallery | array of strings | All additional product image links. |
| specifications | object | Technical specification key-value pairs from the product page. |
| product_url | string | Direct link to the product page on Uline. |
| source_url | string | The page where this product was discovered. |
| scraped_at | string | Extraction time in ISO 8601 format. |

### 💰 Pricing

This Actor runs on the pay per result model. You pay only for the products you collect, empty runs cost nothing, and there are no monthly subscriptions. Set a maximum products limit to keep every run within budget. The first results are free to try.

### ⭐ Enjoying Uline scraper?

<table width="100%" style="display:table;width:100%;border-collapse:separate;border-spacing:0">
<tr>
<td style="padding:20px 24px 14px;background:#FFF3E8;border:1px solid #FFF3E8;border-left:5px solid #D97706;border-radius:10px 10px 0 0;color:#1C1917">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">Turning Uline's bulk pricing tiers into a spreadsheet instead of clicking through hundreds of SKUs by hand?</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating takes 10 seconds and helps other procurement and reseller teams find it. Your feedback also tells us what to build next.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#A85C03;border:1px solid #A85C03;border-left:5px solid #A85C03;border-top:none;border-radius:0 0 10px 10px;text-align:center;color:#1C1917">
<a href="https://apify.com/getascraper/uline-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

### 🛠️ Tips and advanced options

- **Search mode for quick sweeps.** Enter a keyword like "poly bags" or "packing tape" to pull all matching SKUs across Uline's catalog without knowing the category structure.
- **Provided URLs for targeted runs.** Paste a specific category page (for example `https://www.uline.com/BL_440/Lightweight-32-ECT-Boxes`) to focus the scraper on exactly one product line and get results faster.
- **Turn off enrichment to go faster.** If you only need SKUs and base prices, toggle off descriptions, gallery images, and specs. The run will complete sooner and use fewer resources.
- **Use pricing tiers for procurement decisions.** The `price_tiers` field shows every volume break Uline offers. Combine it with your expected order quantity to calculate your true unit cost at scale.
- **Scrape all three regions in parallel.** Start one run per domain (uline.com, uline.ca, uline.mx) at the same time to compare North American pricing side by side.
- **Schedule weekly.** Run the scraper on a weekly cadence to track price changes on your key SKUs and catch cost increases before they hit your margins.

### ❓ Frequently asked questions

**Is it legal to scrape Uline?**
Scraping publicly available product catalog data is generally legal in most jurisdictions. This scraper collects only public product information and no private account data. You are responsible for how you use the data and for following Uline's terms and applicable laws.

**Do I need a Uline account or login?**
No. The scraper reads public product and category pages, so no Uline account or password is needed.

**Why is price tier data missing for some products?**
Some Uline products are sold only in standard single-unit quantities with no bulk discount structure. The scraper captures price tiers only when Uline displays them, and omits the field otherwise so your dataset stays clean.

**Why does the scraper use residential proxies?**
Uline runs bot protection that blocks datacenter IP addresses at high volume. Residential proxies pass through reliably and are the default. Switching to datacenter proxies is likely to cause blocks and empty results.

**Can I run a full catalog sweep?**
Yes. Set scrapeMode to Full Catalog and the scraper will follow category and subcategory links automatically. Set a maxItems limit to cap the run size and cost, since Uline's catalog contains tens of thousands of SKUs.

### 🛟 Support

Found a problem or need a field that is missing? Open an issue on the Actor's Issues tab. Custom scraping solutions are available on request.

### 🔗 Other actors

- [REI Scraper: Outdoor gear, sale prices and product specs](https://apify.com/getascraper/rei-scraper) ↗ - extracts outdoor gear listings, prices, and specs from REI.
- [DSW Scraper: Shoes, Sneakers & Boots](https://apify.com/getascraper/dsw-scraper) ↗ - pulls footwear pricing, sizes, and stock from DSW.
- [Coolblue Scraper: Products, Prices, Ratings & Stock](https://apify.com/getascraper/coolblue-scraper) ↗ - collects product prices, ratings, and stock status from Coolblue.
- [Woot Scraper: Daily Deals, Flash Sales & Clearance Prices](https://apify.com/getascraper/woot-scraper) ↗ - captures daily deal and clearance pricing from Woot.

# Changelog

This Actor's version history is a separate document: https://apify.com/getascraper/uline-scraper/changelog.md

# Actor input Schema

## `scrapeMode` (type: `string`):

How to find products: paste specific Uline URLs, search by keyword, or discover the full catalog automatically.

## `startUrls` (type: `array`):

Uline category, listing, or product detail URLs to scrape. Used in Provided URLs mode and as optional seed URLs in Full Catalog mode.

## `searchQuery` (type: `string`):

Search term to look up across Uline. Required in Search by Keyword mode.

## `domain` (type: `string`):

Regional Uline domain to scrape: US (USD), Canada (CAD), or Mexico (MXN).

## `language` (type: `string`):

Language subpath to use when browsing the Uline site.

## `includeSpecs` (type: `boolean`):

Extract product length, width, height, and shipping weight for freight and logistics calculations.

## `includeTiers` (type: `boolean`):

Extract all quantity price breaks (e.g. 1-unit price vs. 25-unit price), useful for procurement and reseller margin analysis.

## `includeDescription` (type: `boolean`):

Extract the product description text shown on each Uline detail page.

## `includeGallery` (type: `boolean`):

Extract all secondary product image URLs in addition to the main image.

## `maxItems` (type: `integer`):

Maximum number of product records to collect in one run. Set a lower limit for targeted runs; increase for full category sweeps.

## `proxyConfiguration` (type: `object`):

Proxy settings. Residential proxies are required to reliably bypass Uline's bot protection. Switching to datacenter proxies will cause blocks.

## Actor input object example

```json
{
  "scrapeMode": "searchKeyword",
  "startUrls": [
    {
      "url": "https://www.uline.com/BL_440/Lightweight-32-ECT-Boxes"
    }
  ],
  "searchQuery": "corrugated boxes",
  "domain": "uline.com",
  "language": "en",
  "includeSpecs": true,
  "includeTiers": true,
  "includeDescription": true,
  "includeGallery": true,
  "maxItems": 120,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "scrapeMode": "searchKeyword",
    "startUrls": [
        {
            "url": "https://www.uline.com/BL_440/Lightweight-32-ECT-Boxes"
        }
    ],
    "searchQuery": "corrugated boxes",
    "domain": "uline.com",
    "language": "en",
    "includeSpecs": true,
    "includeTiers": true,
    "includeDescription": true,
    "includeGallery": true,
    "maxItems": 120,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/uline-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "scrapeMode": "searchKeyword",
    "startUrls": [{ "url": "https://www.uline.com/BL_440/Lightweight-32-ECT-Boxes" }],
    "searchQuery": "corrugated boxes",
    "domain": "uline.com",
    "language": "en",
    "includeSpecs": True,
    "includeTiers": True,
    "includeDescription": True,
    "includeGallery": True,
    "maxItems": 120,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/uline-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "scrapeMode": "searchKeyword",
  "startUrls": [
    {
      "url": "https://www.uline.com/BL_440/Lightweight-32-ECT-Boxes"
    }
  ],
  "searchQuery": "corrugated boxes",
  "domain": "uline.com",
  "language": "en",
  "includeSpecs": true,
  "includeTiers": true,
  "includeDescription": true,
  "includeGallery": true,
  "maxItems": 120,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call getascraper/uline-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getascraper/uline-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/ajwHtPn1x5dpJP9vV/builds/drrEqbdzc1Vip9TyC/openapi.json
