Ahlens APIahlens.se ↗
Search and browse products from Åhléns (ahlens.se). Get prices, brands, images, stock levels, size variants, and detailed product data via 4 endpoints.
What is the Ahlens API?
The Åhléns API gives developers access to the full product catalog of Sweden's major department store chain through 4 endpoints covering search, category browsing, product details, and autocomplete. The search_products endpoint returns brand, title, selling and list prices, stock status, color, and size variants for any Swedish-language keyword query, with pagination and sort order controls.
curl -X GET 'https://api.parse.bot/scraper/ef3bd575-0c0b-465a-8a1a-ebcafeafe50e/search_products?skip=0&sort=RELEVANCE&limit=5&query=jacka' \ -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 ahlens-se-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: Åhléns Product API — search, browse, detail drill-down, autocomplete."""
from parse_apis.åhléns_product_api import Ahlens, Sort, ProductNotFound
client = Ahlens()
# Search for jackets sorted by price, capped at 5 items total.
for product in client.productsummaries.search(query="jacka", sort=Sort.PRICE_ASCENDING, limit=5):
print(product.title, product.brand, product.selling_price_min)
# Drill into the first search result for full detail (material, care instructions).
item = client.productsummaries.search(query="skor", limit=1).first()
if item:
detail = item.details()
print(detail.title, detail.material, detail.description)
# Browse a category — women's jackets.
for product in client.productsummaries.browse(category="/dam/jackor", sort=Sort.PRICE_DESCENDING, limit=3):
print(product.title, product.selling_price_min, product.in_stock)
# Get a product directly by key.
try:
full = client.products.get(product_key="77369fe4-4921-407a-8994-e1dd276eee9b")
print(full.title, full.season, full.brand_url)
except ProductNotFound as exc:
print(f"Product gone: {exc.product_key}")
# Autocomplete suggestions for a partial query.
suggestions = client.productsummaries.autocomplete(query="klänn")
for cat in suggestions.categories:
print(cat.title, cat.link)
print("exercised: search / browse / details / get / autocomplete")
Full-text search over Åhléns product catalog by keyword. Returns paginated products with brand, title, prices, images, colors, categories, stock levels, and size variants. Paginates via skip/limit offsets. Each product exposes variant-level stock and pricing. Sort controls result ordering; default is relevance-ranked.
| Param | Type | Description |
|---|---|---|
| skip | integer | Number of products to skip for pagination. |
| sort | string | Sort order for results. |
| limit | integer | Number of products to return per page. |
| queryrequired | string | Search keyword (e.g. 'jacka', 'klänning', 'skor') |
{
"type": "object",
"fields": {
"skip": "integer - offset used",
"sort": "string - sort order used",
"limit": "integer - page size used",
"query": "string - search query used",
"products": "array of product objects with product_key, brand, title, url, selling_price_min/max, list_price_min/max, in_stock, color, swatch_colors, categories, thumbnail, images, badges, is_exclusive, variants",
"total_hits": "integer - total matching products"
},
"sample": {
"data": {
"skip": 0,
"sort": "RELEVANCE",
"limit": 5,
"query": "jacka",
"products": [
{
"url": "https://www.ahlens.se/produkter/dam/jeansjacka-med-knytband-yvis-77369fe4-4921-407a-8994-e1dd276eee9b",
"brand": "Carin Wester",
"color": "Indigo Blue Denim",
"title": "Jeansjacka med knytband YVIS",
"badges": [],
"images": [
{
"url": "https://media.ahlens.se/image/upload/f_auto,t_ProductListMobile/products/bg_removed/61/06/18/61061814_Carin Wester__SS26-05_1.jpg",
"width": 192,
"height": 277
}
],
"in_stock": true,
"variants": [
{
"sku": "61061812",
"size": "34",
"label": "34",
"in_stock": true,
"list_price": 899,
"stock_number": 181,
"regular_price": 899,
"selling_price": 449.5,
"historical_price": 674.25
}
],
"thumbnail": "https://media.ahlens.se/image/upload/f_auto,t_ProductListMobile/products/bg_removed/61/06/18/61061814_Carin Wester__SS26-05_1.jpg",
"categories": [
{
"name": "Dam",
"path": "/dam"
},
{
"name": "Jackor",
"path": "/dam/jackor"
}
],
"product_key": "77369fe4-4921-407a-8994-e1dd276eee9b",
"is_exclusive": false,
"swatch_colors": [
"#304056"
],
"list_price_max": 899,
"list_price_min": 899,
"selling_price_max": 449.5,
"selling_price_min": 449.5
}
],
"total_hits": 1010
},
"status": "success"
}
}About the Ahlens API
Search and Browse
The search_products endpoint accepts a Swedish-language query parameter (e.g. jacka, klänning, skor) and returns a paginated list of matching products. Each product object includes product_key, brand, title, url, selling_price_min, selling_price_max, list_price_min, list_price_max, in_stock, color, and swatch_c. Pagination is controlled via skip and limit, and results can be sorted by RELEVANCE, PRICE_ASCENDING, or PRICE_DESCENDING. The total_hits field tells you how many products matched in total.
The browse_category endpoint works identically but filters by a category path string rather than a keyword. Valid paths follow the site's URL structure, such as /dam/jackor, /herr/byxor, /barn, or /skonhet. It returns the same product object shape and supports the same pagination and sort parameters.
Product Detail
Once you have a product_key UUID from either the search or browse response, pass it to get_product to retrieve enriched data. This endpoint adds fields not available in list responses: description, material, season, brand_url, and product_category. Use this endpoint when you need structured product attributes beyond pricing and availability.
Autocomplete
The autocomplete endpoint accepts a partial query string and returns four separate arrays: product_suggestions (same product shape as search, without size variants), categories (with title, link, type), brands, and pages. This is useful for building search-as-you-type interfaces or for discovering valid category paths and brand identifiers to use in downstream requests.
The Ahlens API is a managed, monitored endpoint for ahlens.se — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when ahlens.se 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 ahlens.se 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?+
- Track price changes on specific Åhléns products by polling
get_productforselling_price_minandlist_price_minover time. - Build a Swedish fashion price comparison tool by querying
search_productswith clothing keywords and comparingselling_price_minacross brands. - Populate a product feed for a Swedish shopping app by paginating through
browse_categorypaths like/dam/jackoror/herr/byxor. - Monitor stock availability across a category by checking the
in_stockfield frombrowse_categoryresults. - Implement a search-as-you-type feature using
autocompleteto surface matching products, categories, and brands from partial input. - Discover valid category paths and brand slugs by inspecting
autocompleteresponses before constructingbrowse_categoryrequests. - Aggregate brand presence data across Åhléns categories by collecting
brandfield values from paginatedsearch_productsresults.
| 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 Åhléns have an official developer API?+
What does `get_product` return that the search and browse endpoints do not?+
get_product adds four fields absent from list responses: description (free-text product description), material (fabric or material composition), season, and brand_url. It also returns a structured product_category field. You must supply a product_key UUID obtained from a prior search_products or browse_category call.Does the API return customer reviews or ratings for products?+
How does pagination work across endpoints?+
search_products and browse_category accept skip (number of records to skip) and limit (page size). The response echoes back the skip, limit, and total_hits values so you can calculate how many pages remain. The autocomplete endpoint does not support pagination.Are prices returned in Swedish kronor, and do they reflect current promotions?+
selling_price_min/max (the current selling price) and list_price_min/max (the original list price), so you can detect when a product is discounted. The API does not expose promotional codes, loyalty pricing, or member-specific prices.