# Uline Product Catalog Scraper (`parseforge/uline-scraper`) Actor

Scrapes Uline product listings from category pages or full catalog discovery. Returns each product as a flat row with SKU, price, description, and availability status.

- **URL**: https://apify.com/parseforge/uline-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** E-commerce, Lead generation, Other
- **Stats:** 15 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $11.99 / 1,000 result items

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

[![ParseForge](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner.jpg)](https://apify.com/parseforge?fpr=vmoqkp)

### Uline Product Catalog Scraper

**Scrape Uline product catalogs by category URL or let the scraper discover every listing automatically.** Each product row includes its SKU, price, description, and stock status. Export to CSV, JSON, Excel, or XML.

Uline's massive catalog of shipping, packaging, and industrial supplies is spread across thousands of category pages with no public API. This scraper reads product listings directly from Uline.com, either from specific category URLs you provide or by automatically discovering and crawling every category on the site. You get a clean, structured dataset of products without manual copying or browser extensions.

| Who uses it | What they scrape Uline for |
|---|---|
| E-commerce pricing analysts | Monitor Uline's prices and stock changes on shipping supplies and packaging materials. |
| Supply chain managers | Build an internal catalog of available industrial supplies with current Uline pricing. |
| Competitive intelligence teams | Track Uline's product assortment and catalog updates over time. |
| Resellers and distributors | Sync Uline product data into their own inventory or quoting systems. |

### What it does

This Actor collects Uline product listings from category pages or site-wide discovery and returns each product as a flat row with its SKU, price, description, and availability.

- 🔗 **Targeted scraping:** Provide one or more Uline category URLs and collect only the products you need.
- 🌐 **Full catalog discovery:** Leave start URLs empty and the scraper finds and crawls every Uline category automatically.
- 🛑 **Product limit control:** Set a maximum number of products to collect per run, from a single test up to one million.
- 📦 **Structured output:** Every product returns as a flat row with consistent fields for easy database or spreadsheet import.

Results export to CSV, JSON, Excel, or XML, or straight from the API.

### What you can do with Uline data

**📊 Monitor competitor pricing.**

A pricing analyst runs the scraper weekly on key Uline categories to detect price changes on shipping boxes, tape, and warehouse supplies before updating their own rates.

**🏭 Build a supplier product database.**

A procurement team scrapes the full Uline catalog to create an internal searchable database of available industrial supplies with current prices and stock status.

**🔄 Sync inventory for resale.**

A distributor scrapes Uline's packaging categories daily to keep their own online store's product listings and pricing aligned with Uline's current catalog.

**📈 Track catalog changes over time.**

A market analyst runs the scraper monthly across all Uline categories to identify new products, discontinued items, and shifts in Uline's product assortment strategy.

### Why choose this scraper

|  | What you get |
|---|---|
| **No API required** | Scrapes the public Uline.com website directly with no registration or API keys. |
| **Flexible input** | Target one category, a list of categories, or the entire Uline catalog in a single run. |
| **Clean structured data** | Every product comes back in a consistent flat schema ready for analysis or import. |
| **Built for scale** | Collect up to a million products per run with reliable pagination handling. |

### How it compares

No other Store actor targets Uline the same way, so the honest comparison is with the alternatives teams actually weigh.

| | Uline Product Catalog Scraper | Build it in-house | By hand |
|---|---|---|---|
| Setup | Run it now, zero config | Days of engineering | None, but hours per pull |
| When Uline changes | Maintained for you | You fix it | You re-learn the page |
| Proxies, retries, anti-bot | Built in | Your problem | Browser only |
| Output | Fixed JSON schema, CSV/Excel export | Whatever you build | Copy-paste |
| Cost | Pay per result | Engineering time | Analyst hours |

### Configure the run

Drive the Actor from specific Uline category URLs or let it discover all categories automatically, and set a product limit to control how many items reach your dataset. The Input tab lists every parameter.

A first run with the defaults:

```json
{
  "startUrls": [
    {
      "url": "https://www.uline.com/BL_440/Lightweight-32-ECT-Boxes"
    }
  ],
  "maxItems": 10
}
```

A larger pull:

```json
{
  "startUrls": [
    {
      "url": "https://www.uline.com/BL_440/Lightweight-32-ECT-Boxes"
    }
  ],
  "maxItems": 200
}
```

### Pricing

Pay-per-result: **$0.01599 per result** collected. You pay only for the results written to your dataset.

| Results collected | Approximate cost |
|---|---|
| 100 results | $1.60 |
| 1,000 results | $15.99 |
| 10,000 results | $159.90 |

New Apify accounts start with $5 in free credit.

### Free users

Free-plan runs return up to 10 results as a preview. [Upgrade your Apify plan](https://console.apify.com/sign-up?fpr=vmoqkp) to collect up to 1,000,000 results per run.

### Run it

1. [Create a free Apify account with $5 in credit](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the [Uline Product Catalog Scraper](https://apify.com/parseforge/uline-scraper?fpr=vmoqkp).
3. Set your inputs and any filters, then click **Start**.
4. Export the results as CSV, Excel, JSON, or XML from the **Dataset** tab.

Run it programmatically through the [Apify API](https://docs.apify.com/api/v2) (`run-sync-get-dataset-items`) or the [ApifyClient](https://docs.apify.com/api/client/js) for JavaScript and Python.

### Use with AI agents (MCP)

Give an AI agent live access to Uline through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

```bash
claude mcp add --transport http apify "https://mcp.apify.com/?tools=parseforge/uline-scraper"
```

Then prompt it in plain language to run the scraper and read back the results.

### Troubleshooting

**Why am I getting no results?**

Check that your startUrls or categoryUrl point to valid Uline category pages. The URL should look like https://www.uline.com/BL\_440/Lightweight-32-ECT-Boxes. Also verify that maxItems is set to a number greater than zero.

**The scraper is taking too long to finish.**

If you are scraping the full catalog, it will take time due to the number of categories. Reduce maxItems to a smaller number for faster test runs, or target specific categories instead of the entire site.

**Some products are missing data fields.**

Uline product pages vary slightly by category. If a field like price or description is empty in your results, that information may not be present on Uline's listing for that specific product.

**I get an error when using both startUrls and categoryUrl.**

Use one input method at a time. If you provide startUrls, leave categoryUrl empty, and vice versa. The scraper expects only one input source per run.

**The scraper stopped before reaching my maxItems limit.**

The scraper stops when it has exhausted all products in the specified categories, even if that number is below your maxItems setting. Try adding more category URLs or switch to full catalog discovery.

### FAQ

| Question | Answer |
|---|---|
| Can I scrape the entire Uline catalog? | Yes. Leave the start URLs and category URL fields empty, and the scraper will automatically discover and crawl every product category on Uline.com. |
| What data does the scraper return for each product? | Each product row includes the SKU, product name, price, description, category path, and availability status as shown on the Uline listing page. |
| How do I scrape only one specific category? | Paste the Uline category URL into the startUrls field or use the categoryUrl input field. The scraper will collect products only from that category. |
| Is there a limit on how many products I can scrape? | You set the limit with the maxItems field. The scraper supports up to one million products per run. Set a low number to test, then increase for production runs. |
| Do I need a Uline account or API key? | No. The scraper reads the public Uline.com website. No login, account, or API key is required. |
| How often can I run the scraper? | You can schedule runs as frequently as you need using Apify's built-in scheduler. Run it hourly, daily, or weekly to keep your data current. |
| What output formats are supported? | You can export your dataset to CSV, JSON, Excel, or XML from the Apify console or via the API. |
| Does the scraper handle pagination? | Yes. The scraper automatically follows pagination links on category pages to collect all products, up to the maximum you set. |
| Can I scrape multiple categories in one run? | Yes. Add multiple Uline category URLs to the startUrls array, and the scraper will process them all in a single run. |
| What if a product is out of stock? | The scraper captures the availability status as displayed on Uline's product listing page, including out-of-stock indicators when present. |

### Related actors

Browse the full [ParseForge collection](https://apify.com/parseforge?fpr=vmoqkp) for more scrapers.

🆘 **Need help?** Email parseforge@protonmail.com with your run ID, your input, and what you expected.

⚠️ **Disclaimer.** This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by Uline, Inc. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.

# Actor input Schema

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

URLs of Uline product listing pages to scrape. Leave empty to discover and scrape all categories automatically.

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

How many products to collect per run.

## `categoryUrl` (type: `string`):

Single category URL to scrape. Use this OR startUrls, not both.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.uline.com/BL_440/Lightweight-32-ECT-Boxes"
    }
  ],
  "maxItems": 10
}
```

# Actor output Schema

## `defaultDataset` (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 = {
    "startUrls": [
        {
            "url": "https://www.uline.com/BL_440/Lightweight-32-ECT-Boxes"
        }
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/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 = {
    "startUrls": [{ "url": "https://www.uline.com/BL_440/Lightweight-32-ECT-Boxes" }],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/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 '{
  "startUrls": [
    {
      "url": "https://www.uline.com/BL_440/Lightweight-32-ECT-Boxes"
    }
  ],
  "maxItems": 10
}' |
apify call parseforge/uline-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/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/Z0jFrETv7lXz6S2io/builds/pylMiCgXS0LKgu2or/openapi.json
