Prisjakt APIprisjakt.no ↗
Search Prisjakt Norway products, fetch store offers with NOK prices, colour variants, and page through user reviews via 3 structured JSON endpoints.
What is the Prisjakt API?
The Prisjakt.no API provides 3 endpoints covering Norway's price-comparison platform: search products by free-text query, retrieve every store offer for a single product including price and store rating, and page through user reviews with cursor-based pagination. The get_product endpoint alone returns up to a dozen distinct fields per product, including colour variants, offer count, and a full rating distribution.
curl -X GET 'https://api.parse.bot/scraper/7e6a7476-84ae-43c6-8741-17eb3c5ecbf3/search_products?sort=relevance&query=iphone+15' \ -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 prisjakt-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: Prisjakt.no price-comparison SDK — bounded, re-runnable."""
from parse_apis.prisjakt_no_api import Prisjakt, SearchSort, ProductNotFound
client = Prisjakt()
# Search for products sorted by popularity; cap total items.
for summary in client.product_summaries.search(query="iphone 15", sort=SearchSort.POPULARITY, limit=5):
print(summary.name, summary.lowest_price, summary.currency, f"({summary.store_count} stores)")
# Drill into the first hit's full detail page (offers, variants, rating).
hit = client.product_summaries.search(query="samsung galaxy s24", limit=1).first()
if hit is not None:
product = hit.details()
print(product.name, "—", product.offer_count, "offers")
print("Price range:", product.lowest_price, "–", product.highest_price, product.currency)
# Inspect the cheapest offer's store and shipping.
if product.offers:
cheapest = product.offers[0]
print(cheapest.store_name, cheapest.price, cheapest.condition)
# Browse colour variants.
for v in product.variants:
print(v.name, v.low_price, "–", v.high_price)
# Read user reviews for this product.
for review in product.reviews.list(limit=3):
print(review.rating, "★", review.text[:80])
# Point lookup by a known product id discovered from the search above.
if hit is not None:
try:
detail = client.products.get(product_id=hit.product_id)
print(detail.name, "rating:", detail.rating.average, f"({detail.rating.review_count} reviews)")
except ProductNotFound:
print("Product was removed or id is invalid")
# Scalar search page gives access to category facets alongside products.
page = client.search_pages.fetch(query="laptop", sort=SearchSort.PRICE_ASC)
for cat in page.categories:
print(cat.name, cat.hit_count, "hits")
print("exercised: product_summaries.search / details / products.get / reviews.list / search_pages.fetch")
Searches Prisjakt.no for products matching a free-text query and returns one page of up to 48 product summaries, each with its lowest current price in NOK, the cheapest store, store count, category and user rating. The page is selected with the page input (omitted = page 1); has_more tells whether a further page exists. total_count is the site's hit count and total_is_lower_bound is true when the site only reports '1000+'. The categories list contains the category facets the site offers for this query with their hit counts; pass a category_id back to restrict results to that category. sort defaults to the site's relevance order. A query with no matches still returns a success envelope with an empty products list.
| Param | Type | Description |
|---|---|---|
| page | integer | 1-based result page; each page holds up to 48 products. |
| sort | string | Result ordering. |
| queryrequired | string | Free-text search phrase, e.g. a product name or model. |
| category_id | string | Numeric Prisjakt category id (as returned in categories[*].category_id or products[*].category_id) to restrict the results to one category. Omitted = all categories. |
{
"type": "object",
"fields": {
"page": "integer page number returned",
"query": "the search phrase as sent",
"has_more": "boolean, whether a following page exists",
"products": "array of product summaries: product_id, name, brand, category_id, category_name, lowest_price (NOK), currency, original_price (pre-discount price or null), store_count, cheapest_store, condition, stock_status, rating_score, rating_count, has_variants, core_properties, image_url, product_url",
"page_size": "integer, maximum products per page (48)",
"categories": "array of category facets for this query: category_id, name, hit_count",
"total_count": "integer hit count reported by the site (1000 when capped)",
"total_is_lower_bound": "boolean, true when the site reports '1000+' rather than an exact count"
},
"sample": {
"data": {
"page": 1,
"query": "iphone 15",
"has_more": true,
"products": [
{
"name": "Apple iPhone 15 128GB",
"brand": "Apple",
"currency": "NOK",
"condition": "new",
"image_url": "https://cdn.pji.nu/product/standard/800/12105524.jpg?height=280&width=280",
"product_id": "12105524",
"category_id": "103",
"product_url": "https://www.prisjakt.no/product.php?p=12105524",
"store_count": 16,
"has_variants": true,
"lowest_price": 8082,
"rating_count": 2,
"rating_score": 3.17,
"stock_status": "in_stock",
"category_name": "Mobiltelefoner",
"cheapest_store": "HomeIT",
"original_price": null,
"core_properties": [
"6.1 inches",
"2023",
"128GB"
]
}
],
"page_size": 48,
"categories": [
{
"name": "Mobiltelefoner",
"hit_count": 12,
"category_id": "103"
}
],
"total_count": 1000,
"total_is_lower_bound": true
},
"status": "success"
}
}About the Prisjakt API
Search and Discovery
The search_products endpoint accepts a free-text query and returns up to 48 product summaries per page. Each summary includes product_id, name, brand, category_id, category_name, lowest_price in NOK, the cheapest store, active store count, and user rating. You can narrow results with the category_id parameter — valid IDs come from the categories facet array in any search response. The total_count field reflects the site's reported hit count; when it reaches 1000, total_is_lower_bound is set to true. Use sort to change result ordering and page to paginate (each page holds up to 48 items).
Product Detail and Store Offers
get_product takes a single product_id and returns the full price-comparison page for that product in one call. The offers array lists every store offering the product, with fields for store_name, store_rating_score, store_rating_count, price, original_price, and offer_name. The variants array surfaces colour and attribute variants, each carrying its own low_price, high_price, and offer_count. Top-level fields include description, image_url, product_url, and a rating object with average, review_count, and a distribution array breaking down star counts and percentages. All prices are in NOK (currency field confirms the ISO code).
User Reviews
get_product_reviews pages through reviews for a given product_id, returning up to 50 per page (page_size is clamped at 50). Each review carries review_id, rating (1–5), text, market (the Prisjakt country site the review was written on), language, created_at, updated_at, and helpful_count. Pagination is cursor-based: pass the next_cursor value from one response as the cursor input of the next call. A null next_cursor or has_more: false signals the last page. Reviews arrive newest-first.
The Prisjakt API is a managed, monitored endpoint for prisjakt.no — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when prisjakt.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 prisjakt.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?+
- Build a price-alert tool that polls
get_productoffers and notifies users when NOK price drops below a threshold. - Aggregate store ratings from
offers[*].store_rating_scoreto rank Norwegian retailers by customer satisfaction. - Populate a product-comparison table using
variantsprice ranges andoffer_countper colour option. - Mine
get_product_reviewstext and ratings for sentiment analysis on specific product models. - Track price spread between
lowest_priceandoriginal_priceinsearch_productsresults to identify discount patterns. - Filter
search_productsresults bycategory_idfacets to build a category-scoped product catalogue for a Norwegian market. - Identify cross-market review behaviour using the
marketfield in review objects to compare Norwegian vs. Swedish Prisjakt reviewers.
| 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 Prisjakt have an official public developer API?+
What does `get_product` return beyond the lowest price?+
offers array (every listed store with individual prices, store rating score and count, and original price), variants with per-variant price ranges and offer counts, a rating object including distribution by star level, description, image_url, and a product_url linking back to the live page.How does pagination work for reviews, and what is the maximum page size?+
get_product_reviews is cursor-based. Each response includes a next_cursor string; pass it as the cursor input on your next call to advance. The page_size parameter accepts 1–50; values above 50 are clamped to 50. When has_more is false or next_cursor is null, you have reached the last page.Does the API expose historical price data or price-over-time charts?+
search_products and individual store offer prices in get_product, but no historical price series. You can fork this API on Parse and revise it to add a historical-prices endpoint if Prisjakt exposes that data on the product page.Is there a known cap on the total search result count?+
total_count is set to 1000 and total_is_lower_bound is set to true. The actual number of matching products may exceed 1000; the figure is a lower bound in that case. Use category_id filtering or more specific queries to narrow results and get an exact count.