Uline APIuline.com ↗
Access Uline's full product catalog via API. Search by keyword, browse categories, retrieve model details, and check real-time stock availability across industrial supplies.
What is the Uline API?
The Uline API provides 4 endpoints for accessing product data, pricing tiers, and stock availability from Uline's industrial and commercial supplies catalog. The get_product_detail endpoint returns full variant listings, tiered pricing arrays, and live stock status for any Uline model number. Category browsing and keyword search round out the coverage, letting you navigate from broad category hierarchies down to specific SKUs.
curl -X GET 'https://api.parse.bot/scraper/7fca176c-b386-4835-b50e-c68815e86853/search_products?query=tape' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace uline-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
from parse_apis.uline_product_inventory_api import Uline, Product, ProductVariant, StockStatus, CategoryPage, SearchResult, ProductNotFound
uline = Uline()
# Search for products by keyword
results = uline.products.search(query="foam cups")
print(results.title, results.url)
# Browse a category to see available product lines
category = uline.products.browse(path="/Grp_320/Cups")
print(category.title)
for subcat in category.subcategories:
print(subcat.name, subcat.path)
# Get full details for a specific product by model number
product = uline.products.get(model_number="S-21261")
print(product.name, product.price, product.stock_status)
for variant in product.variants:
print(variant.model_number, variant.size, variant.quantity_per_case, variant.price)
# Check stock availability using the instance method
stock = product.check_stock()
print(stock.in_stock, stock.ships_today, stock.stock_status)
Search for products by keyword. Returns categories or product listings depending on query specificity. A broad query like 'tape' returns subcategory navigation links; a specific query like 'foam cups' returns individual product models with pricing. The site redirects to the most relevant category or product line page for the query.
| Param | Type | Description |
|---|---|---|
| queryrequired | string | Search keyword (e.g. 'tape', 'foam cups', 'boxes') |
{
"type": "object",
"fields": {
"url": "string, the final URL after redirect",
"title": "string, page heading",
"results": "array of result objects; each has name/path/url for categories, or model_number/price/description/size/quantity_per_case/pricing_tiers/pricing_info for products"
},
"sample": {
"data": {
"url": "https://www.uline.com/Cls_02/Tape?keywords=tape&SearchKeyword=tape",
"title": "Tape",
"results": [
{
"url": "https://www.uline.com/Grp_168/Carton-Sealing-Tape",
"name": "Carton Sealing Tape",
"path": "/Grp_168/Carton-Sealing-Tape"
},
{
"url": "https://www.uline.com/Grp_110/Masking-Tape",
"name": "Masking Tape",
"path": "/Grp_110/Masking-Tape"
}
]
},
"status": "success"
}
}About the Uline API
Search and Category Navigation
The search_products endpoint accepts a query string and returns different result shapes depending on specificity. A broad term like tape yields subcategory navigation objects with name, path, and url fields. A more specific query like foam cups returns individual product listings including model_number, price, description, size, quantity_per_case, and pricing_tiers. The endpoint also returns the url of the final page after any redirect, which you can use to determine whether the query resolved to a product line or a category.
get_category_products accepts a path parameter in one of three formats — /Cls_ for class pages, /Grp_ for group pages, or /BL_ for specific product lines. Class and group paths return a subcategories array for drilling deeper into the hierarchy. Product line paths (e.g. /BL_6540/Foam-Cups) return a products array with per-model pricing_tiers, size, quantity_per_case, and an optional description for the product line.
Product Detail and Stock Checks
get_product_detail takes a model_number (e.g. S-21261) and returns the full product page data: name, description, stock_status, pricing_tiers, and a variants array. Each variant includes its own model_number, description, size, quantity_per_case, price, and pricing_tiers, making it straightforward to compare sizes or configurations within a product family.
check_stock_availability accepts a model_number and returns three fields: in_stock (boolean), ships_today (boolean), and the raw stock_status string directly from the product page. This is useful for lightweight inventory polling without fetching the full product detail payload.
The Uline API is a managed, monitored endpoint for uline.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when uline.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official uline.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Monitor tiered pricing changes for specific Uline model numbers across multiple quantity breakpoints.
- Build a procurement tool that checks
in_stockandships_todaybefore submitting purchase orders. - Sync a warehouse supplies catalog by crawling category paths from
/Cls_down through/Grp_to/BL_product lines. - Compare
pricing_tiersacross product variants returned byget_product_detailto identify bulk purchase thresholds. - Alert operations teams when
stock_statuschanges from in-stock to out-of-stock for frequently ordered SKUs. - Populate an internal product database with Uline
model_number,size,quantity_per_case, anddescriptionfields for commonly used supplies.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Uline have an official developer API?+
What does `search_products` return when the query is broad versus specific?+
name, path, and url. A specific term like 'foam cups' returns product listings with model_number, price, pricing_tiers, size, and quantity_per_case. The url field in the response indicates which page the query resolved to, which helps you determine which shape to expect.