Search Austrian jobs on karriere.at.
Searches karriere.at, Austria's largest job board, like its search: job title, company, place, employment type (Vollzeit, Teilzeit, …), home office, the salary as the ad states it, when it was published, and the link, with the total number of matches. Sponsored ads are dropped by default; include_ads keeps them, marked.
- Site
- karriere.at, Austria
- Version
- v1
- Runs, last 7 days
- No reports yet
- sha256
- a47f2825a689…
Run it with your agent
after installing WieldAsk in plain words. Your agent finds this recipe and calls it:
“Search Austrian jobs on karriere.at.”
Read-only: it changes nothing on the site. No login needed.
{ "tool": "run", "arguments": { "recipe_id": "karriere.at/search-jobs", "params": { "keywords": "python", "location": "Wien" } } }
Requests
sent from your browser, in order- 1GET/jobs?keywords&locationskarriere.at's search form (GET /jobs?keywords=…&locations=…), server-rendered with the first page of .m-jobsListItem cards.
Parameters
from your agentReturns
to your agentWhere it can send
- www.karriere.at
Anything else is blocked by the extension.
Reads from your session
Nothing. Your browser attaches the site's cookies by itself.
Used only in requests to the addresses on the left. Never sent to wield.run or your agent.
Checks
a run passes when- length(output.jobs) >= `10`
- output.total > `50`
- length(output.jobs[?sponsored]) == `0`
- length(output.jobs[?starts_with(url, 'https://www.karriere.at/jobs/')]) == length(output.jobs)
- length(output.jobs[?company != `null` && place != `null`]) == length(output.jobs)
- length(output.jobs[?salary != `null`]) > `5`
Raw recipe
Served as canonical JSON from /api/v1/recipes/karriere.at/search-jobs, so its sha256 matches the ETag and the index.
curl -s https://wield.run/api/v1/recipes/karriere.at/search-jobs | shasum -a 256 # a47f2825a689f431ef09257bdd007aee1efe39d660d9c86ef71daad0e578f273
{ "description": "Searches karriere.at, Austria's largest job board, like its search: job title, company, place, employment type (Vollzeit, Teilzeit, …), home office, the salary as the ad states it, when it was published, and the link, with the total number of matches. Sponsored ads are dropped by default; include_ads keeps them, marked.", "effect": "read", "id": "karriere.at/search-jobs", "keywords": [ "karriere.at", "jobs", "stellenangebote", "österreich", "wien", "graz", "linz", "vollzeit", "teilzeit", "homeoffice", "gehalt", "job search", "austria", "vacancies" ], "output": { "schema": { "properties": { "jobs": { "items": { "properties": { "company": { "type": [ "string", "null" ] }, "employment_type": { "description": "e.g. Vollzeit, Teilzeit, Lehre", "type": [ "string", "null" ] }, "home_office": { "type": "boolean" }, "place": { "type": [ "string", "null" ] }, "posted": { "description": "As shown: 'Heute veröffentlicht', 'Gestern veröffentlicht' or a date (dd.mm.yyyy)", "type": [ "string", "null" ] }, "salary": { "description": "As the ad states it, e.g. '3.500 € – 5.000 € monatlich', 'ab 55.000 € jährlich'", "type": [ "string", "null" ] }, "sponsored": { "type": "boolean" }, "title": { "type": "string" }, "url": { "type": "string" } }, "type": "object" }, "type": "array" }, "keywords": { "type": "string" }, "location": { "type": [ "string", "null" ] }, "total": { "type": [ "integer", "null" ] } }, "required": [ "keywords", "jobs" ], "type": "object" }, "value": "let $ads = params.include_ads == `true`, $h = steps.search.heading || '' in {keywords: params.keywords, location: params.location || `null`, total: to_number(replace(split(trim($h), ' ')[0], '.', '')) || `null`, jobs: map(&(let $p = [p2 || '', p3 || '', p4 || ''] in {title: title, company: company || `null`, place: (locations && trim_right(replace(locations, ' ,', ','), ', ')) || `null`, employment_type: (p2 && !contains(p2, '€') && p2 != 'Homeoffice' && p2) || `null`, home_office: contains($p, 'Homeoffice'), salary: ($p[?contains(@, '€')] | [0]) || `null`, posted: date || `null`, sponsored: sponsored != `null`, url: href}), steps.search.jobs[?href != `null` && ($ads || sponsored == `null`)] || `[]`)}" }, "params": { "additionalProperties": false, "properties": { "include_ads": { "default": false, "description": "Keep sponsored ads (marked)", "type": "boolean" }, "keywords": { "description": "Job title, skill or company, e.g. 'python', 'buchhaltung', 'data scientist'", "maxLength": 100, "minLength": 2, "type": "string" }, "location": { "description": "Austrian city or state, e.g. 'Wien', 'Graz', 'Oberösterreich'", "maxLength": 60, "minLength": 2, "type": "string" } }, "required": [ "keywords" ], "type": "object" }, "provenance": { "method": "browser-inspect", "notes": "The search form (form.m-jobsSearchform, GET /jobs with keywords and locations) gives a server-rendered list of .m-jobsListItem cards: .m-jobsListItem__title, a.m-jobsListItem__titleLink (/jobs/<id>), .m-jobsListItem__companyName, .m-jobsListItem__date, and .m-jobsListItem__pills: first the locations pill, then plain pills for employment type, 'Homeoffice' and the salary text (read by position 2–4 and told apart by content). A card with .m-jobsListItem__sponsoredLabel ('Gesponsert') is a paid placement. The h1 starts with the total ('132 Python Jobs Wien'). The first page holds about 15 cards; later pages load by script. A search without matches answers HTTP 404 with a page that has no job cards; the recipe reads it as zero results.", "recorded_at": "2026-11-07T22:28:00+01:00", "recorded_by": "C4" }, "requires_login": false, "schema": "https://wield.run/schema/recipe/v1.json", "site": { "country": "AT", "id": "karriere.at", "language": "de", "name": "karriere.at", "origin": "https://www.karriere.at", "origins": [ "https://www.karriere.at" ] }, "steps": [ { "description": "karriere.at's search form (GET /jobs?keywords=…&locations=…), server-rendered with the first page of .m-jobsListItem cards.", "expect": { "content_type": "html", "status": [ 200, 404 ] }, "extract": { "html": { "heading": { "selector": "h1" } }, "html_items": { "jobs": { "fields": { "company": { "selector": ".m-jobsListItem__companyName" }, "date": { "selector": ".m-jobsListItem__date" }, "href": { "attr": "href", "selector": ".m-jobsListItem__titleLink" }, "locations": { "selector": ".m-jobsListItem__locations" }, "p2": { "selector": ".m-jobsListItem__pills > .m-jobsListItem__pill:nth-child(2)" }, "p3": { "selector": ".m-jobsListItem__pills > .m-jobsListItem__pill:nth-child(3)" }, "p4": { "selector": ".m-jobsListItem__pills > .m-jobsListItem__pill:nth-child(4)" }, "sponsored": { "selector": ".m-jobsListItem__sponsoredLabel" }, "title": { "selector": ".m-jobsListItem__title" } }, "max": 30, "selector": ".m-jobsListItem" } } }, "id": "search", "request": { "headers": { "Accept": "text/html" }, "method": "GET", "query": { "keywords": "{{params.keywords}}", "locations": "{{params.location}}" }, "url": "/jobs" } } ], "task": "Search Austrian jobs on karriere.at", "tos": { "notes": "robots.txt disallows nothing for general agents and has no rules for Claude agents or AI content signals. One request per call; no applications, job alerts or watchlist actions.", "reviewed": false }, "verify": { "checks": [ "length(output.jobs) >= `10`", "output.total > `50`", "length(output.jobs[?sponsored]) == `0`", "length(output.jobs[?starts_with(url, 'https://www.karriere.at/jobs/')]) == length(output.jobs)", "length(output.jobs[?company != `null` && place != `null`]) == length(output.jobs)", "length(output.jobs[?salary != `null`]) > `5`" ], "example_params": { "keywords": "python", "location": "Wien" }, "max_ms": 4000 }, "version": 1 }