Proshop APIproshop.no ↗
Search the proshop.no catalogue, browse category trees, and fetch full product details including NOK prices, stock status, specs, and images via 4 endpoints.
What is the Proshop API?
The Proshop.no API exposes 4 endpoints covering product search, category navigation, category product listings, and full product detail pages from proshop.no, Norway's consumer electronics retailer. A single call to get_product returns over a dozen fields including current and original NOK prices (incl. and excl. VAT), EAN, manufacturer part number, availability, variant siblings, a multi-resolution image gallery, and structured specification rows — everything needed for price comparison or catalogue ingestion.
curl -X GET 'https://api.parse.bot/scraper/be9ba7f1-5fdc-4482-b2b2-71342a603265/search_products?query=ssd' \ -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 proshop-no-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: Proshop.no SDK — search, drill into details, browse a category."""
from parse_apis.proshop_no_api import Proshop, SortOrder, InputNotFound
client = Proshop()
# Search for products and print summary info for the cheapest five.
for item in client.product_summaries.search(query="ssd", sort=SortOrder.PRICE_ASC, limit=5):
print(item.name, item.price, item.currency, item.stock_text)
# Drill down: take the first search hit and fetch its full detail page.
hit = client.product_summaries.search(query="keyboard", limit=1).first()
if hit is not None:
product = hit.details()
print(product.name, product.brand, product.price, product.currency)
print("EAN:", product.ean, "MPN:", product.mpn)
# Show specifications and variants from the detail page.
for spec in product.specifications[:3]:
print(f" [{spec.section}] {spec.name}: {spec.value}")
for variant in product.variants:
print(f" Variant: {variant.label} — {variant.price} ({variant.stock_state})")
# Browse the category tree: list categories, pick one, list its products.
category = client.categories.list(limit=1).first()
if category is not None:
print(f"Category: {category.name} ({len(category.subcategories)} subcategories)")
for p in category.products.list(sort=SortOrder.POPULARITY, limit=3):
print(p.name, p.price)
# Point lookup by a known product id discovered earlier.
if hit is not None:
try:
detail = client.products.get(product_id=hit.product_id)
print(detail.name, detail.availability)
except InputNotFound:
print("Product no longer available")
print("exercised: product_summaries.search / .details / categories.list / category.products.list / products.get")
Full-text product search on proshop.no. Returns one page of up to 25 product summaries (id, name, current and original price in NOK incl. VAT, price excl. VAT, thumbnail, stock text and stock state, badges) plus the site's total hit count and page count. Paging is caller-controlled through page (1-based, one upstream page per call, 25 items per page fixed by the site); has_more tells whether a further page exists. sort selects the site's own ordering; omitting it uses the site's default relevance order (one extra upstream round trip when a sort is given). A query with no hits is a valid empty result (items empty, total 0).
| Param | Type | Description |
|---|---|---|
| page | integer | 1-based result page; each page holds 25 items. |
| sort | string | Result ordering. Omitted = site default (best match). |
| queryrequired | string | Free-text search term, e.g. a product type, brand or model name. |
{
"type": "object",
"fields": {
"page": "page returned",
"sort": "sort applied, or null for the site default",
"items": "array of product summaries; product_id is the id accepted by get_product",
"query": "the search term used",
"total": "site's total number of hits for the query",
"has_more": "true when page < total_pages",
"total_pages": "number of pages available (0 when no hits)",
"items[].price": "current price in NOK incl. VAT (number)",
"items[].badges": "list of promotional badge labels shown on the item",
"items[].stock_text": "site's stock/delivery text (Norwegian)",
"items[].stock_state": "site stock indicator code such as in or comming",
"items[].price_ex_vat": "price in NOK excl. VAT (number)",
"items[].original_price": "pre-discount price in NOK when the item is on offer, else null"
},
"sample": {
"data": {
"page": 1,
"sort": null,
"items": [
{
"url": "https://www.proshop.no/SSD/Kingston-Dual-Portable-SSD-512GB-Ekstern-SSD-Svart-USB-32-Gen-2/3419402",
"name": "Kingston Dual Portable SSD - 512GB - Ekstern SSD - Svart - USB 3.2 Gen 2",
"price": 1787,
"badges": [
"DEALS"
],
"currency": "NOK",
"image_url": "https://www.proshop.no/Images/174x116/3419402_07b16fbd16ef.png",
"product_id": "3419402",
"stock_text": "På lager - 1-3 dager til levering",
"stock_state": "in",
"price_ex_vat": 1429.6,
"original_price": null,
"short_description": "SSD (Solid State Drive), 512 GB, utvendig, overførselshastighet: 1050 MB/s (les) / 950 MB/s (skriv), USB 3.2 Gen 2 forbindelse, farge: svart / rød"
}
],
"query": "ssd",
"total": 2306,
"has_more": true,
"total_pages": 93
},
"status": "success"
}
}About the Proshop API
Search and Browse
The search_products endpoint accepts a free-text query and an optional 1-based page number and sort parameter, returning up to 25 product summaries per page. Each summary includes product_id (the identifier accepted by get_product), current price in NOK incl. VAT, price_ex_vat, thumbnail URL, stock_text (the site's Norwegian delivery/availability label), stock_state, and any promotional badges. The response also carries total, total_pages, and has_more so callers can paginate without guessing.
Category Tree and Listings
list_categories returns the full site menu as a two-level tree: top-level categories each with a category_slug and a subcategories array of {name, category_slug, url} entries. If a subcategory lookup fails during the fan-out, subcategory_lookup_failures records the count so callers know the tree may be incomplete. Pass any category_slug to list_category_products to get the same paginated product-summary shape used by search — up to 25 items per page with total and has_more.
Full Product Detail
get_product takes a product_id string and returns the richest payload: identity fields (brand, category, manufacturer part number, EAN), price and price_ex_vat in NOK, original_price before any discount, availability as a schema.org code (e.g. InStock), stock_text, badges, currency (ISO code), and a variants array of sibling products in the same family each with their own product_id, label, price, and stock_state. The images array provides thumb, medium, large, and uhd URLs with alt text. Structured specification data appears in general_info as key/value rows.
Pricing and VAT
All price fields are denominated in Norwegian Krone (NOK). Both inclusive and exclusive VAT figures are returned at the summary level (price, price_ex_vat) and on the full product record, which also exposes original_price to compute discount depth. This makes the API well-suited to Norwegian price-comparison applications where VAT transparency is required.
The Proshop API is a managed, monitored endpoint for proshop.no — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when proshop.no 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 proshop.no 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 Proshop product IDs over time using
get_productprice and original_price fields - Build a Norwegian electronics price-comparison tool by querying
search_productsacross model names and collecting NOK prices incl. and excl. VAT - Ingest the full Proshop catalogue by walking
list_categoriesslugs throughlist_category_productswith pagination - Monitor stock availability by polling
stock_textandavailabilityfields fromget_productfor a watchlist of product IDs - Enrich a product database with EAN, manufacturer part number, brand, and structured
general_infospecs fromget_product - Display multi-resolution product images in a third-party storefront using the
imagesarray (thumb, medium, large, uhd) returned byget_product - Surface variant options (color, size, capacity) for a product family using the
variantsarray including per-variant price and stock state
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does proshop.no offer an official developer API?+
What does get_product return beyond basic pricing?+
get_product returns identity fields (brand, EAN, manufacturer part number, category), both incl. and excl. VAT prices, the original pre-discount price, a schema.org availability code, a Norwegian stock_text label, promotional badges, a multi-resolution images gallery, structured general_info key/value spec rows, and a variants array of sibling products each with their own price and stock state.How does pagination work across endpoints?+
search_products and list_category_products use a 1-based page parameter returning up to 25 items per page. The response includes total, total_pages, and has_more (true when the current page is below the last). There is no cursor-based pagination; callers increment page until has_more is false.Are customer reviews or ratings available?+
Can I filter search results by price range or brand within a search call?+
search_products endpoint accepts query, page, and sort parameters. Filtering by price range, brand, or other facets within a search call is not currently supported. list_category_products similarly accepts only category_slug, page, and sort. You can fork this API on Parse and revise it to add facet-filter parameters if required.