AMS APIjobs.ams.at ↗
Access Austrian AMS job listings, job detail, autocomplete suggestions, green jobs, and apprenticeships via a structured REST API with location and education filters.
What is the AMS API?
This API exposes 6 endpoints for querying job data from Austria's public employment service platform, jobs.ams.at. Use search_jobs to filter listings by keyword, location, education level, radius, and time period, or call get_job_detail to retrieve full structured data for a specific listing by UUID. Additional endpoints cover autocomplete suggestions, featured categories, green jobs, and apprenticeships.
curl -X GET 'https://api.parse.bot/scraper/78cbcd5c-9119-42e9-8f44-df60d1c765d3/search_jobs' \ -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 jobs-ams-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: AMS Job Suggestions API — bounded, re-runnable."""
from parse_apis.ams_job_suggestions_api import AMS, NotFoundError
client = AMS()
# Search for job title suggestions matching a prefix
for suggestion in client.suggestions.search(query="Software", limit=5):
print(suggestion.id, suggestion.text)
# Drill-down: get the first suggestion for a different query
first = client.suggestions.search(query="Koch", limit=1).first()
if first:
print(f"Top match for 'Koch': {first.text} (id={first.id})")
# Typed error handling around a search call
try:
results = client.suggestions.search(query="Lehrer", limit=3)
for s in results:
print(s.id, s.text)
except NotFoundError as exc:
print(f"Error: {exc}")
print("exercised: suggestions.search with multiple queries and limit control")
Search for job listings with various filters.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination |
| query | string | Search keyword (job title, skill, or company) |
| period | string | Time period (ALL, 1, 2, 7, 30 days) |
| radius | integer | Search radius in km around location |
| location | string | Location (City, Postal Code, or State) |
| education | string | Education level filter (e.g. 'P*' for Pflichtschule, 'U*' for University) |
| green_job | boolean | Filter for Green Jobs only |
| page_size | integer | Number of results per page |
| sort_field | string | Sort field (_SCORE for relevance, DATE for date) |
| working_time | string | Working hours (VZ=Fulltime, TZ=Parttime) |
| job_offer_types | string | Comma-separated list of job offer sources (AMS, SB_WKO, IJ, BA, BZ, TN) |
| employment_relationship | string | Employment type (AA=Arbeiter/Angestellte, LS=Lehrstelle, SS=Saison, FS=Ferial, SB=Sonstige) |
{
"type": "object",
"fields": {
"page": "integer",
"results": "array",
"pageSize": "integer",
"totalPages": "integer",
"totalResults": "integer"
},
"sample": {
"page": 1,
"results": [
{
"id": 12345,
"uuid": "abc-123-def",
"title": "Software Engineer",
"company": {
"name": "Example GmbH"
}
}
],
"pageSize": 12,
"totalPages": 10,
"totalResults": 120
}
}About the AMS API
Job Search and Filtering
The search_jobs endpoint accepts up to eight parameters including query (keyword, job title, or skill), location (city, postal code, or Austrian state), radius (in km), period (ALL, 1, 2, 7, or 30 days), and education (a prefix code such as P* for Pflichtschule or U* for university-level). You can also set green_job: true to restrict results to environmentally focused positions. Responses return results, totalResults, totalPages, page, and pageSize for pagination control.
Job Detail
get_job_detail takes a single required uuid and returns the full job record: id, uuid, title, a company object, a description string, and lastUpdatedAt timestamp. This is the appropriate endpoint when you already have a UUID from a search results array and need to render a complete job posting.
Suggestions and Curated Content
get_suggestions powers typeahead interfaces — pass a query prefix (e.g. Koch, Lehrer, Software) and an optional count to receive an array of suggestion objects, each with an id and a text label drawn from the AMS job title database. get_featured_job_categories returns the homepage's curated predefinedSearches array alongside a status field. The get_green_jobs and get_apprenticeship_jobs endpoints are convenience wrappers that accept an optional location filter and return results plus totalResults for their respective job types.
Coverage
All data originates from the official AMS (Arbeitsmarktservice) platform, Austria's federal public employment service. Listings are in German and scoped to Austria. The education filter uses AMS-specific prefix codes, so values like P* (Pflichtschule) or U* (university) must match the AMS classification system.
The AMS API is a managed, monitored endpoint for jobs.ams.at — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when jobs.ams.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 jobs.ams.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 German-language job search interface with typeahead powered by
get_suggestions - Aggregate Austrian apprenticeship (Lehrstelle) openings by region using
get_apprenticeship_jobswith alocationfilter - Track green job postings in Austria over time by polling
get_green_jobsor usinggreen_job: trueinsearch_jobs - Display featured job categories on a career portal homepage using
get_featured_job_categories - Filter Austrian jobs by education requirement (e.g. university-level) using the
educationparameter insearch_jobs - Render a full job posting page by fetching structured detail with
get_job_detailafter retrieving a UUID from search results - Scope a job map widget to a radius around a city using the
locationandradiusparameters insearch_jobs
| 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 AMS provide an official developer API for jobs.ams.at?+
What does `get_job_detail` return beyond what appears in search results?+
get_job_detail returns the full description string and a structured company object in addition to the title, uuid, id, and lastUpdatedAt timestamp. Search results give you enough to list jobs; this endpoint gives you enough to render a complete posting.What are the valid values for the `education` filter in `search_jobs`?+
P* for Pflichtschule (compulsory schooling) and U* for university-level qualifications. Other AMS education category prefixes follow the same pattern. Values outside the AMS classification system will not match listings.Does the API return salary or compensation data for job listings?+
Is pagination supported, and how does it work?+
search_jobs supports pagination via the page and page_size parameters. The response includes totalPages and totalResults so you can calculate how many pages exist before iterating. get_green_jobs and get_apprenticeship_jobs return totalResults but do not currently expose page or page_size controls — those endpoints are scoped to a first-page convenience result set.