JYSK APIjysk.ca ↗
Access JYSK.ca product data via API: search, category browsing, full specs, dimensional data, store stock availability, and category tree.
What is the JYSK API?
The JYSK.ca API gives developers structured access to JYSK Canada's furniture and home goods catalog through 6 endpoints. Use search_products to query the catalog by keyword and retrieve product names, SKUs, URLs, and prices. Other endpoints cover category browsing, full product specifications, dimensional and packaging data, per-store stock levels, and the complete site category hierarchy.
curl -X GET 'https://api.parse.bot/scraper/aa42b5e3-604d-44d1-bc2e-d8c2601d7b8b/search_products?page=1&query=sofa' \ -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 jysk-ca-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.
"""Walkthrough: JYSK.ca SDK — search, browse categories, get details and availability."""
from parse_apis.jysk_ca_e_commerce_api import Jysk, ProductNotFound
client = Jysk()
# Search for sofas — limit caps total items fetched across all pages.
for product in client.products.search(query="sofa", limit=5):
print(product.name, product.price, product.sku)
# Drill into one product's full details and dimensions.
product = client.products.search(query="mattress", limit=1).first()
if product:
detail = product.details()
print(detail.name, detail.product_id, detail.description[:80])
for key, val in detail.specifications.items():
print(f" {key}: {val}")
dims = product.dimensions()
print(dims.measurements, dims.number_of_packages)
for pkg in dims.package_dimensions_structured:
print(f" Package {pkg.package}: {pkg.value}")
# Check store availability for a product.
if product:
for store in product.availability.list(limit=3):
print(store.source_id, store.quantity, store.store_pickup_label)
# Browse a category to find products.
for p in client.products.browse_category(category_path="living-room-furniture/sofas-sofa-beds-futons", limit=3):
print(p.name, p.price, p.url)
# List top-level categories and their subcategories.
cat = client.categories.list(limit=1).first()
if cat:
print(cat.name, cat.url)
for sub in cat.subcategories:
print(f" {sub.name}: {sub.url}")
# Typed error handling for a non-existent product.
try:
bad = client.products.search(query="sofa", limit=1).first()
if bad:
bad.details()
except ProductNotFound as exc:
print(f"Product not found: {exc}")
print("exercised: products.search / browse_category / details / dimensions / availability.list / categories.list")
Search for products on JYSK.ca by keyword. Returns a paginated list of matching products with name, URL, SKU, and price. Pagination via page number; results are ordered by relevance.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination. |
| queryrequired | string | Search keyword (e.g. 'sofa', 'mattress', 'desk'). |
{
"type": "object",
"fields": {
"page": "current page number",
"products": "array of product objects each containing name, url, sku, and price",
"total_pages": "total number of pages available"
},
"sample": {
"data": {
"page": 1,
"products": [
{
"sku": "58217",
"url": "https://www.jysk.ca/config-damhale-sofa.html",
"name": "DAMHALE",
"price": "$699"
},
{
"sku": "52570",
"url": "https://www.jysk.ca/config-skejby-modular-sofa-parts.html",
"name": "SKEJBY",
"price": "$199"
}
],
"total_pages": 1
},
"status": "success"
}
}About the JYSK API
Search and Browse
The search_products endpoint accepts a query string (e.g. 'sofa', 'mattress') and returns a paginated list of matching products. Each result includes name, url, sku, and price, along with page and total_pages for cursor navigation. The get_category_products endpoint works the same way but scopes results to a specific category path — paths are derived from URLs returned by get_category_tree (e.g. living-room-furniture/sofas-sofa-beds-futons).
Product Details and Dimensions
get_product_details takes a full product URL and returns structured data: sku, product_id, name, description, specifications (key-value pairs of technical attributes), and a variants array with type, label, ID, and linked products. get_product_dimensional_data targets the same product URL but parses out logistics-relevant fields specifically: measurements, weight, package_weight, package_dimensions, number_of_packages, plus structured arrays (package_weight_structured, package_dimensions_structured) that break multi-package specs into per-package objects. Any field absent from the source product spec returns as null.
Store Availability
get_store_availability accepts a leaf-level product_id — the numeric SKU of a specific variant as returned by search_products or get_category_products — and returns an items array covering all stores. Each item includes sku, quantity, source_id, and store_pickup_label. Note that configurable or parent product IDs will not work; only variant-level SKUs return valid stock data.
Category Tree
get_category_tree requires no inputs and returns the full site navigation hierarchy as a categories array. Each entry includes name, url, and a nested subcategories array, making it straightforward to enumerate all valid paths for use with get_category_products.
The JYSK API is a managed, monitored endpoint for jysk.ca — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when jysk.ca 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 jysk.ca 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?+
- Build a price comparison tool tracking JYSK.ca furniture prices by SKU over time
- Generate a store locator feature showing which nearby locations have a specific product variant in stock using
get_store_availability - Feed dimensional and package weight data from
get_product_dimensional_datainto a shipping cost estimator - Populate a product catalog or CMS with full specs, descriptions, and variant options from
get_product_details - Map the full JYSK.ca category hierarchy with
get_category_treeto build a structured navigation or sitemap - Monitor in-stock quantities across all store locations for inventory trend analysis
| 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 JYSK Canada offer an official developer API?+
What product ID should I pass to `get_store_availability`, and why does it matter?+
sku value returned by search_products or get_category_products. Passing a parent or configurable product ID will not return valid store stock data. Each store entry in the response includes sku, quantity, source_id, and store_pickup_label.Does the API return customer reviews or ratings for products?+
Are dimensional fields always populated in `get_product_dimensional_data`?+
weight, measurements, package_weight, and package_dimensions return null when the source product listing does not include that specification. The structured arrays (package_weight_structured, package_dimensions_structured) will be empty in those cases.