SPAR APIspar.at ↗
Search SPAR Austria's product catalog and retrieve nutrition facts, ingredients, allergens, and pricing via 2 structured endpoints.
What is the SPAR API?
The SPAR Austria API provides access to the spar.at grocery catalog through 2 endpoints: search_products for paginated catalog browsing with price, brand, and availability data, and get_product for detailed product records including a full nutrition table, allergen information, ingredients, and attributes such as Bio, Glutenfrei, and Laktosefrei. Results cover thousands of SKUs across SPAR Austria's food and grocery range.
curl -X GET 'https://api.parse.bot/scraper/cd0b7b46-5ec7-4c09-85e1-b222591bfb6e/search_products?page=1&sort=Relevancy%3Adesc&brand=SPAR&query=Milch&category=lebensmittel&hits_per_page=10' \ -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 spar-at-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: SPAR Austria product search and detail retrieval."""
from parse_apis.spar_at_api import SparAt, Sort, ProductNotFound
client = SparAt()
# Search for milk products sorted by price ascending
for product in client.product_summaries.search(query="Milch", sort=Sort.PRICE_ASC, limit=5):
print(product.name, product.price, product.comparison_unit)
# Drill into the first search result for full details including ingredients
summary = client.product_summaries.search(query="Reis", limit=1).first()
if summary:
detail = summary.details()
print(detail.name, detail.ingredients, detail.allergens)
for key, val in detail.nutrition.items():
print(f" {key}: {val}")
# Fetch a specific product by ID
try:
product = client.products.get(product_id="6481889")
print(product.name, product.name3)
for cat in product.categories:
print(f" Category: {cat.title}")
except ProductNotFound as exc:
print(f"Product not found: {exc}")
print("exercised: product_summaries.search / summary.details / products.get")
Search for products in the SPAR Austria product catalog. Returns paginated results with basic product information including price, brand, and availability. Supports filtering by category, brand, organic (BIO), and vegan attributes. Results are auto-iterated across pages.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination (1-based). |
| sort | string | Sort order for results. |
| brand | string | Brand name filter (e.g. 'SPAR', 'S-BUDGET', 'Barilla'). |
| query | string | Search query text. Use '*' to browse all products. |
| is_bio | string | Filter for organic/BIO products. Pass 'true' to show only organic products, omit otherwise. |
| category | string | Category path ID filter (e.g. 'lebensmittel', 'reis-huelsenfruechte', 'frisch-haltbarmilch'). Obtained from get_product response categories[*].id. |
| is_vegan | string | Filter for vegan products. Pass 'true' to show only vegan products, omit otherwise. |
| hits_per_page | integer | Number of results per page (1-100). |
{
"type": "object",
"fields": {
"products": "array of product summaries with id, name, price, brand, slug",
"page_count": "integer",
"total_hits": "integer",
"current_page": "integer",
"hits_per_page": "integer"
},
"sample": {
"data": {
"products": [
{
"name": "SPAR Kärntner Vollmilch",
"slug": "spar-qualitaetsmarke-kaerntner-vollmilch-p2020000711179",
"brand": "",
"name1": "SPAR",
"name2": "Kärntner Vollmilch",
"name3": "1 L",
"price": 1.42,
"image_url": "",
"product_id": "2020000711179",
"is_on_offer": false,
"comparison_unit": "L",
"comparison_price": 1.42,
"is_price_reduced": true
}
],
"page_count": 345,
"total_hits": 1033,
"current_page": 1,
"hits_per_page": 3
},
"status": "success"
}
}About the SPAR API
Product Search
The search_products endpoint queries the SPAR Austria catalog and returns paginated summaries. Each result includes a numeric product_id, name, price, brand, and slug. You can filter by category (using category path IDs like lebensmittel or reis-huelsenfruechte), brand (e.g. SPAR, S-BUDGET, Barilla), and boolean-style flags is_bio and is_vegan. Pass query='*' to browse all products without a search term. The hits_per_page parameter accepts 1–100 results per page, and the response includes total_hits and page_count for pagination planning.
Product Detail
The get_product endpoint accepts a product_id from search results and returns a structured record. The nutrition field is an object keyed by German nutrient labels (e.g. Energie, Fett, Kohlenhydrate) with per-serving and per-100g values where available. The allergens field returns a string or null, and attributes is an object covering certifications and dietary flags including Bio, Glutenfrei, and Laktosefrei. Product naming is split across name1 (brand/line), name2 (product name), and name3 (quantity/size), which allows precise labeling in downstream applications.
Categories and Coverage
The categories array in a product detail response lists category objects with id and title, reflecting how SPAR Austria organizes its catalog hierarchy. Category path IDs returned here can feed back into search_products as the category filter, enabling traversal of the full taxonomy. Coverage is scoped to spar.at's Austrian online grocery assortment; product availability reflects the online catalog, not any specific physical store's stock.
The SPAR API is a managed, monitored endpoint for spar.at — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when spar.at 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 spar.at 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 grocery price tracker that monitors spar.at product prices over time using
search_productspagination. - Power a dietary filter tool that surfaces only
is_veganoris_bioproducts from specific categories. - Populate a recipe ingredient checker with allergen and nutrition data from
get_productfor each ingredient. - Compare nutrition tables across similar SPAR private-label (
S-BUDGET,SPAR) products by brand filter. - Aggregate product data by category using the
categoriesfield to map SPAR Austria's catalog taxonomy. - Flag products meeting specific dietary requirements (Glutenfrei, Laktosefrei) using the
attributesfield inget_product. - Sync a meal planning app with up-to-date ingredient and nutrition information from the SPAR Austria catalog.
| 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 SPAR Austria have an official public developer API?+
What does `get_product` return beyond basic product info?+
get_product returns a structured nutrition object with German-labeled nutrient keys, an allergens string (or null), a keyed attributes object covering flags like Bio, Glutenfrei, and Laktosefrei, and a categories array with the product's full category hierarchy. The product name is split into name1, name2, and name3 for brand, product name, and quantity respectively.Can I filter search results to show only discounted or price-reduced products?+
search_products endpoint supports filtering by category, brand, is_bio, and is_vegan, but does not currently expose a dedicated filter for price-reduced or sale items (such as the isPreisGesenkt flag visible on spar.at). The API covers the general catalog and its supported filters. You can fork this API on Parse and revise it to add a discount or promotion filter endpoint.How does pagination work in `search_products`?+
page parameter. The response includes total_hits, page_count, current_page, and hits_per_page, so you can calculate the full traversal. Set hits_per_page between 1 and 100 to control batch size. Results are auto-iterated, meaning the endpoint handles page-level retrieval for you given a valid page number.