offenevergaben APIoffenevergaben.at ↗
Access Austrian public procurement contracts, contracting authorities, suppliers, and CPV categories via 7 structured endpoints from offenevergaben.at.
What is the offenevergaben API?
The offenevergaben.at API provides structured access to Austrian public procurement data across 7 endpoints, covering contracts, suppliers, contracting authorities, and CPV industry categories. Use list_contracts to retrieve paginated contract summaries filtered by CPV code, NUTS region, notice type, date range, or keyword, and get_contract_detail to pull full contract fields including supplier, authority, contract type, and award value for any specific record.
curl -X GET 'https://api.parse.bot/scraper/b2b0b0ae-7c24-4687-a8eb-28ec166d41ed/list_contracts?page=1&search=Bauarbeiten' \ -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 offenevergaben-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: OffeneVergaben SDK — Austrian public procurement data, bounded."""
from parse_apis.OffeneVergaben_at_API import OffeneVergaben, NotFoundError_
client = OffeneVergaben()
# Browse CPV categories to find construction sector volume.
for cat in client.categories.list(limit=5):
print(cat.code, cat.bezeichnung, cat.auftragsvolumen)
# Search contracts filtered by keyword for construction work.
contract = client.contract_summaries.list(search="Bauarbeiten", limit=1).first()
if contract:
print(contract.bezeichnung, contract.auftraggeber, contract.summe)
# Drill into full contract details via the summary's navigation op.
detail = contract.details()
print(detail.art_des_auftrags, detail.verfahrensart, detail.beschreibung)
# List top contracting authorities by volume, then inspect one.
authority_summary = client.authority_summaries.list(limit=1).first()
if authority_summary:
authority = authority_summary.details()
print(authority.name, authority.gesamtvolumen, authority.durchschnittliche_bieter)
for c in authority.contracts[:2]:
print(c.bezeichnung, c.summe)
# List top suppliers and fetch one's awarded contracts.
supplier_summary = client.supplier_summaries.list(limit=1).first()
if supplier_summary:
supplier = supplier_summary.details()
print(supplier.name, supplier.gesamtvolumen)
for c in supplier.contracts[:2]:
print(c.bezeichnung, c.auftraggeber)
# Typed error handling: attempt to fetch a non-existent contract.
try:
client.contracts.get(id="9999999")
except NotFoundError_ as exc:
print(f"Not found: {exc.id}")
print("exercised: categories.list / contract_summaries.list / details / authority_summaries.list / supplier_summaries.list / contracts.get")
Fetch a paginated list of public contracts with optional filters. Returns 20 contracts per page sorted by last modification date descending. Supports filtering by keyword search, notice type, date range, contract type, volume range, bidder count, CPV code, and NUTS region.
| Param | Type | Description |
|---|---|---|
| cpv | string | CPV category code from list_categories (e.g. 45000000). |
| nuts | string | Region NUTS codes comma-separated (e.g. AT130,AT342). |
| page | integer | Page number. |
| types | string | Notice types comma-separated (Ausschreibung, Auftrag). |
| search | string | Keyword search for title, authority, or supplier. |
| date_to | string | End date in YYYY-MM-DD format. |
| date_from | string | Start date in YYYY-MM-DD format. |
| date_type | string | Date field to filter by (e.g. date_lastmod). |
| volume_to | number | Maximum contract volume. |
| tenders_to | integer | Maximum number of bidders. |
| volume_from | number | Minimum contract volume. |
| tenders_from | integer | Minimum number of bidders. |
| contract_types | string | Contract types comma-separated (Bauauftrag, Dienstleistungsauftrag, Lieferauftrag). |
{
"type": "object",
"fields": {
"page": "integer, current page number",
"items": "array of contract summary objects with id, bezeichnung, auftraggeber, lieferant, bieter, summe, aktualisiert",
"total_pages": "integer, total number of available pages"
},
"sample": {
"data": {
"page": 1,
"items": [
{
"id": "285054",
"summe": "",
"bieter": "",
"lieferant": "",
"bezeichnung": "Wien 4., Belvederegasse ONr. 2-42 - Wasserrohrauswechslung",
"aktualisiert": "10.06.2026",
"auftraggeber": "Magistrat der Stadt Wien - Magistratsabteilung 31"
}
],
"total_pages": 11554
},
"status": "success"
}
}About the offenevergaben API
Contract Search and Filtering
The list_contracts endpoint returns 20 contracts per page, sorted by last modification date descending. It accepts filters for CPV category codes (from list_categories), NUTS region codes as a comma-separated list (e.g. AT130,AT342), notice types (Ausschreibung for tender, Auftrag for award), a date range via date_from / date_to in YYYY-MM-DD format, and a search keyword matched against title, authority, and supplier. Each item in the items array includes the contract id, bezeichnung (title), auftraggeber (authority), lieferant (supplier), bieter (bidder count), summe (value), and aktualisiert (last modified date).
Contract and Entity Detail
get_contract_detail accepts a contract id and returns structured fields: Bezeichnung, Auftraggeber, Lieferant, Art des Auftrags, and more. Field availability varies by contract type and data availability — some records carry richer structured data than others. get_contracting_authority_detail and get_supplier_detail each return an entity profile alongside their contract history, total volume (gesamtvolumen), and contract count (anzahl_auftraege). The authority profile also exposes durchschnittliche_bieter, the average number of bidders per contract.
Suppliers, Authorities, and Categories
list_suppliers and list_contracting_authorities both return paginated lists sorted by total contract volume descending. Each item includes an id, name, national_id, anzahl_auftraege, and gesamtvolumen. Use these IDs as inputs to the respective detail endpoints. list_categories requires no inputs and returns all CPV division codes with German-language names (bezeichnung), aggregate volume (auftragsvolumen), and contract count (anzahl_auftraege) — useful for scoping searches by industry sector before querying list_contracts with a cpv filter.
The offenevergaben API is a managed, monitored endpoint for offenevergaben.at — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when offenevergaben.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 offenevergaben.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?+
- Monitor new public tenders in a specific Austrian region by filtering
list_contractswith NUTS codes anddate_from - Track a supplier's total awarded contract volume and history using
get_supplier_detail - Identify which contracting authorities award the most contracts by total volume via
list_contracting_authorities - Analyze government spending by CPV sector using
list_categoriesvolume and count fields - Retrieve full contract details including supplier and authority for a specific procurement record via
get_contract_detail - Build a competitive intelligence tool showing which suppliers win contracts in a given CPV category
- Cross-reference bidder counts (
bieter) and award values (summe) across authority profiles to spot procurement patterns
| 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 offenevergaben.at offer an official developer API?+
How does contract filtering work in `list_contracts`, and can I combine multiple filters?+
list_contracts endpoint accepts multiple optional parameters simultaneously: cpv (CPV division code), nuts (comma-separated NUTS region codes), types (comma-separated notice types such as Ausschreibung or Auftrag), date_from / date_to with date_type to scope by date field, and search for keyword matching against title, authority, or supplier. All are optional and combinable. Results are always paginated at 20 items per page.