etilbudsavis APIetilbudsavis.no ↗
Access Norwegian retail offers, weekly flyers, and store data from etilbudsavis.no. Search products by keyword, list stores, and retrieve publication offers.
What is the etilbudsavis API?
The etilbudsavis.no API exposes 6 endpoints covering Norwegian retail offers, weekly catalogs, and store listings from the platform. Use search_offers to find active deals by keyword across all stores, or use get_publication_offers to pull every structured offer from a specific flyer — including price, savings, validity dates, and page number within the publication.
No input parameters required.
curl -X GET 'https://api.parse.bot/scraper/cbd5c6ab-f46a-4598-8d45-af567a018c3e/get_homepage_categories' \ -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 etilbudsavis-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: eTilbudsavis SDK — browse stores, publications, and offers."""
from parse_apis.etilbudsavis_api import ETilbudsavis, Store, Publication, OfferNotFound
client = ETilbudsavis()
# List all stores on the platform
for store in client.stores.list(limit=5):
print(store.name, store.slug)
# Browse a specific store's publications using constructible Store
spar = client.store(slug="SPAR")
pub = spar.publications.list(limit=1).first()
if pub:
print(pub.label, pub.valid_from, pub.valid_until)
# List offers within that publication
for offer in pub.offers.list(limit=3):
print(offer.name, offer.price, offer.currency, offer.page)
# Get a single offer detail with typed-error handling
try:
detail = pub.offers.get(offer_id="mvXp1AnbDCpdvT4Hnqib7")
print(detail.name, detail.price, detail.description)
except OfferNotFound as exc:
print(f"Offer not found: {exc}")
# Search for product offers across all stores
for result in client.searchoffers.search(query="melk", limit=3):
print(result.name, result.price, result.store)
# Browse homepage categories
for cat in client.categories.list(limit=2):
print(cat.category_name, len(cat.publications))
print("exercised: stores.list / store.publications.list / pub.offers.list / pub.offers.get / searchoffers.search / categories.list")
Returns all top-level store categories and their flyers from the homepage. Each category groups publications by retail segment (groceries, DIY, house and garden, etc.).
No input parameters required.
{
"type": "object",
"fields": {
"data": "array of category objects, each with category_name (string) and publications (array of publication summaries)"
},
"sample": {
"data": {
"data": [
{
"publications": [
{
"url": "https://etilbudsavis.no/SPAR?publication=ZmnLXV06",
"label": "Uke 24 Riks Helgens",
"valid_to": "2026-06-13T22:00:00.000Z",
"image_url": "https://image-transformer-api.tjek.com/?u=example&w=250",
"store_name": "SPAR",
"valid_from": "2026-06-10T22:00:00.000Z",
"publication_id": "ZmnLXV06"
}
],
"category_name": "groceries"
}
]
},
"status": "success"
}
}About the etilbudsavis API
Store and Catalog Discovery
list_all_stores returns every retail brand on the platform with fields including name, slug, public_id, logo_url, website, and description. The slug value is what you pass to get_store_publications to retrieve that store's current and upcoming flyers. Each publication object includes id, label, valid_from, valid_until, image_url, and url. You can also use get_homepage_categories to browse publications organized by category as they appear on the site's homepage, without needing a specific store slug.
Offer Search and Retrieval
search_offers accepts a query string (Norwegian product terms like melk, kaffe, or ost work well) and returns an offers array with name, price, currency, valid_from, valid_to, image_url, and store per offer, along with a total_results count. For deeper catalog access, pass a publication_id from get_store_publications to get_publication_offers, which automatically paginates through the entire flyer and returns all offers with fields including pre_price, savings, description, and page number.
Single Offer Detail
get_offer_detail takes both an offer_id and a publication_id and returns the full record for that specific offer: id, name, page, price, currency, description, and more. This is useful when you have a specific offer ID from a prior get_publication_offers call and need to confirm its current details or re-fetch it individually.
The etilbudsavis API is a managed, monitored endpoint for etilbudsavis.no — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when etilbudsavis.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 etilbudsavis.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 weekly price changes for a specific product across Norwegian grocery chains using
search_offers - Build a flyer aggregator that lists all active publications per store via
get_store_publications - Compare pre-sale and sale prices using the
pre_priceandsavingsfields fromget_publication_offers - Display store logos and links in a retail directory using
list_all_storesfieldslogo_urlandwebsite - Alert users when a queried product appears in active offers using
valid_fromandvalid_tofrom search results - Organize current flyers by retail category on a landing page using
get_homepage_categories
| 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 etilbudsavis.no have an official developer API?+
What does `get_publication_offers` return that `search_offers` does not?+
get_publication_offers returns the full contents of a specific flyer, including pre_price, savings, description, and the page number within the publication. search_offers is keyword-driven and returns a broader cross-store snapshot with fewer fields per offer — no pre_price or savings and no page reference.Does the API return store location data such as addresses or GPS coordinates?+
list_all_stores covers name, slug, logo, website, and description, but individual store branch locations, addresses, and coordinates are not exposed. You can fork this API on Parse and revise it to add a store-location endpoint if that data is needed.Are older or expired publications accessible, or only current flyers?+
get_store_publications returns publications that are current or upcoming at the time of the request. Historical flyers that have fully expired are not surfaced by the endpoint. Coverage reflects the live state of the platform.Can I filter `search_offers` results by store or date range?+
search_offers endpoint accepts only a query string. Store filtering and date-range filtering are not supported as input parameters. The response does include store, valid_from, and valid_to per offer, so filtering can be applied client-side after retrieval. You can fork this API on Parse and revise it to add server-side filter parameters if needed.