karriere.at Jobs Scraper
Pricing
from $3.00 / 1,000 results
karriere.at Jobs Scraper
Scrape job listings from karriere.at, Austria's largest job board. Search by keyword, browse by Bundesland/city, job category, or company, and filter by contract type, job level, search radius, and home office. Optionally fetch each job's full description and structured salary.
Pricing
from $3.00 / 1,000 results
Rating
0.0
(0)
Developer
Crawler Bros
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
Scrape karriere.at — Austria's largest job board with 12,000+ active listings. Search by keyword (or leave it blank to browse the newest listings nationwide), browse by Bundesland (Austrian state) or city, browse by job category (Berufsfeld), browse by company, and filter by contract type (Vollzeit / Teilzeit / Lehre / etc.), job level, search radius, and home office availability. HTTP-only, no auth, no proxy required.
What this actor does
- Four modes:
search(free-text keyword, or blank to browse newest jobs nationwide),browseLocation(Bundesland / city),browseCategory(job field),byCompany(one or more specific employers) - Filters combine with any mode: location, category, contract type, job level, search radius, company, home office only
- Multi-select filters:
location,category,contractType, andjobLevelall accept multiple values combined with OR (e.g. Vollzeit OR Teilzeit) companySlug: browse one or more specific employers' open listings by slug (free text — see FAQ)- Search radius: expand a single-city search to +10/20/30/50 km around it
- Full national coverage: all 9 Austrian Bundesländer plus 30 major cities via the
locationdropdown, plus any of Austria's thousands of additional town/district slugs via free-textlocationSlug - 20 job categories: IT, Marketing, Finance, Sales, Engineering, Healthcare, and more
- 7 contract types: Vollzeit, Teilzeit, Geringfügig, Praktika, Lehre, Diplomarbeit/Dissertation, Freelancer
- Optional full job details: enable
fetchJobDetailsto also pull each job's full HTML/text description, exact posted timestamp, the hiring company's own website, a structured salary breakdown (amount/currency/period), direct-apply availability, standardized employment-type code(s), the free-text seniority label, whether the hiring company is itself a staffing/recruitment agency, the job's category ID(s)/label(s), and the direct application URL — one extra request per job - Empty fields are omitted
Output per job
jobId— karriere.at internal job IDtitle— job titlecompanyId,companyName,companySlug,companyUrl,companyLogoUrl,companyEmployees,companyMainLocation— hiring company details (omitted for anonymous/Chiffre listings)location— comma-joined location names,locations[]— individual location namescontractType— e.g.Vollzeit,Teilzeit, orVollzeit, Teilzeitwhen a job offers multiplesalary— advertised gross salary range/floor as shown on the listing (when disclosed)isHomeOffice— whether home office is offeredisPushedJob— whether the listing is a promoted/sponsored postingpostedLabel— original German posting-date label (e.g.vor 3 Tagen veröffentlicht)postedDate— posting date parsed to ISOYYYY-MM-DDsnippet— short preview of the job descriptionsourceUrl— canonical job listing URLrecordType: "job",scrapedAt
With fetchJobDetails: true (one extra request per job):
descriptionHtml— full job description as HTMLdescriptionText— full job description as plain textdatePostedExact— exact posting timestamp with timezone offset (vs. the day-resolutionpostedDateabove)companyWebsite— the hiring company's own website (omitted for Chiffre listings)salaryAmount,salaryCurrency,salaryPeriod— structured salary breakdown (when disclosed as a single figure), e.g.2900/EUR/MonthlysalaryMin,salaryMax— structured salary range instead ofsalaryAmountwhen the employer discloses a min/max band rather than one figureisDirectApply— whether the job supports karriere.at's one-click "smart apply" (vs. requiring an external application)employmentTypeCodes— standardized schema.org employment-type code(s), e.g.["FULL_TIME"]or["FULL_TIME", "PART_TIME"]— a machine-readable complement to the free-text GermancontractTypelabeljobLevel— free-text German seniority label (e.g.Berufserfahrung,Berufseinstieg) — populated on every job regardless of whether thejobLevelinput filter was usedcompanyIsEmploymentAgency— whether the hiring company is itself a staffing/recruitment agency rather than the actual employercategoryIds,categoryLabels— the job's category/Berufsfeld ID(s) and German label(s) (the same IDs accepted by thecategoryinput filter) — one or more per job, populated on every job regardless of whether thecategoryinput filter was usedapplyUrl— the direct application target: karriere.at's own one-click "smart apply" link whenisDirectApplyis true, or the hiring company's own external application page/ATS link otherwise
Input
| Field | Type | Default | Description |
|---|---|---|---|
mode | string | search | search / browseLocation / browseCategory / byCompany |
searchQuery | string | Softwareentwickler | Free-text keyword (mode=search). Leave blank to browse the newest active listings nationwide. |
location | array of strings | [] | One or more Bundesländer/cities (mode=browseLocation, or extra filter on any mode). OR semantics. |
locationSlug | array of strings | [] | One or more additional karriere.at location slugs not in the location dropdown (any Austrian town/district — free text). OR-combines with location. |
category | array of strings | [] | One or more job categories / Berufsfelder (mode=browseCategory, or extra filter on any mode). OR semantics. |
contractType | array of strings | [] | One or more contract types (Vollzeit / Teilzeit / etc.) — applies to any mode. OR semantics. |
jobLevel | array of strings | [] | One or more seniority levels — applies to any mode. OR semantics. |
companySlug | array of strings | [] | One or more company slugs (mode=byCompany, or extra filter on any mode). Free text — up to 20 slugs; each runs as a separate lookup. |
radius | string | – | Search radius in km (0/10/20/30/50). Only takes effect with exactly one city (not Bundesland) selected in location. |
homeofficeOnly | boolean | false | Only jobs offering home office |
fetchJobDetails | boolean | false | Also fetch each job's full description, exact posted timestamp, company website, structured salary, direct-apply flag, employment-type code(s), free-text seniority label, staffing-agency flag, and direct application URL. Adds one request per job — slower. |
maxItems | integer | 50 | Maximum number of jobs to scrape (1–2000) |
Example: search by keyword
{"mode": "search","searchQuery": "Softwareentwickler","contractType": ["3960"],"maxItems": 50}
Example: browse a Bundesland with home office filter
{"mode": "browseLocation","location": ["wien"],"homeofficeOnly": true,"maxItems": 50}
Example: browse a job category with seniority filter
{"mode": "browseCategory","category": ["2172"],"jobLevel": ["3955"],"maxItems": 50}
Example: full-time OR part-time jobs within 20 km of Graz
{"mode": "browseLocation","location": ["graz"],"contractType": ["3960", "3961"],"radius": "20","maxItems": 50}
Example: browse newest jobs nationwide across two Bundesländer
{"mode": "search","location": ["wien", "steiermark"],"maxItems": 50}
Example: full job details for a small batch
{"mode": "search","searchQuery": "Data Engineer","fetchJobDetails": true,"maxItems": 20}
Example: browse a town not in the location dropdown
{"mode": "browseLocation","locationSlug": ["eferding"],"maxItems": 50}
Example: browse a company's open listings
{"mode": "byCompany","companySlug": ["epunkt-linz"],"maxItems": 50}
Use cases
- Recruitment agencies — monitor new job postings across Austria by category or region
- Salary benchmarking — collect advertised salary ranges by job field or location
- Labor market research — track hiring demand trends across Austrian Bundesländer
- Remote-work analysis — identify how many roles in a category or region offer home office
- Competitive intelligence — track a company's open positions and hiring pace
- Job aggregators — feed structured Austrian job listings into your own search product
FAQ
What is the data source?
All data comes from the public karriere.at/jobs search — Austria's largest job board.
Do I need an API key or login? No. The actor works without any credentials, cookies, or proxy configuration.
Can I combine location, category, and contract type filters?
Yes — all filters are additive and can be combined with any mode, e.g. browseCategory + location + contractType together. location, category, contractType, and jobLevel also accept multiple values each (OR semantics), e.g. contractType: ["3960", "3961"] returns Vollzeit or Teilzeit jobs.
How do I browse a specific company's open jobs?
Set mode: "byCompany" and companySlug: ["<slug>"]. The slug is the part after /f/ in a karriere.at company page URL (e.g. https://www.karriere.at/f/epunkt-linz → epunkt-linz), or you can reuse the companySlug value from a previous run's output. You can list up to 20 slugs — karriere.at doesn't support combining multiple companies in a single OR query, so the actor runs one lookup per slug internally.
Can I search without a keyword?
Yes — leave searchQuery blank in mode=search to browse the newest active listings across all of Austria (or combine with location/category/etc. to browse a subset), sorted newest-first.
What happens if searchQuery doesn't match anything (e.g. a made-up word)?
karriere.at's own search returns a clean empty result (0 jobs) — this is upstream behavior (verified live), not something the actor can override. The run still succeeds; it just emits no records for that keyword rather than fabricating placeholder data. Leave searchQuery blank (rather than guessing a keyword) if you specifically want the newest nationwide listings.
What happens if searchQuery is in a non-Latin script (e.g. Japanese, Chinese, Russian)?
karriere.at's own backend silently strips non-Latin-script keywords server-side (verified live: the search form echoes an empty keyword back) and falls back to the newest nationwide listings — the same behavior as leaving searchQuery blank, rather than a clean 0-result response. This is genuine upstream input sanitization the actor cannot override; it only affects non-Latin scripts (Latin-script gibberish/unmatched words, including accented German/French/Spanish text, are matched or rejected normally and correctly return 0 results when nothing matches). If you need Austrian job listings for a non-Latin-script term, search the German/English equivalent instead.
What does the radius filter do?
It expands a search around a single specific city (e.g. location: ["graz"]) to include jobs within the chosen number of km. It only takes effect with exactly one city-level location selected — karriere.at ignores it for Bundesland-level or multi-location searches (verified against the live site).
If I select a city and leave radius blank, do I only get jobs in that exact city?
Not always — this is upstream behavior, verified live. For well-known/larger cities (e.g. wien, graz, innsbruck), leaving radius blank returns almost entirely exact matches for that city. But for some smaller towns (e.g. traun, leonding), karriere.at's own default search silently widens to a commuter-area radius around the nearest larger city when too few jobs are posted in the exact town that day — you may see 0 records tagged with that exact town even though the run succeeds with real, current jobs from the surrounding area. If you need strictly exact-city matches, explicitly set radius: "0" — this reliably restricts results to that exact location regardless of city size (verified live across multiple towns).
The city/town I want isn't in the location dropdown — can I still search it?
Yes. location only lists the 30 largest cities plus the 9 Bundesländer (a dropdown can't reasonably list Austria's thousands of towns/districts). Use locationSlug for any other town or district — it's free text and takes the same slug format you'd see in a job's location link (e.g. https://www.karriere.at/jobs/eferding → eferding). It combines with location via OR, and an unrecognized slug cleanly returns 0 jobs rather than erroring.
Why is companyId/companyName missing on some listings?
Some employers post anonymously ("Chiffre" listings). For these, all company-identifying fields are intentionally omitted rather than showing a placeholder.
Why is salary missing on some listings?
Not every employer discloses a salary range. The field is only included when karriere.at publishes one.
Can I filter by minimum salary?
No. karriere.at's salary filter requires a logged-in account on the site itself — it is not available on the public, unauthenticated search this actor uses. The salary field (and, with fetchJobDetails: true, the structured salaryAmount/salaryCurrency/salaryPeriod fields) is still returned on every listing where the employer discloses one, so you can filter the results yourself after scraping.
What's the difference between salary and salaryAmount/salaryCurrency/salaryPeriod?
salary is always present (when disclosed) and is the free-text label karriere.at shows on the listing, e.g. "ab 2.900 € monatlich". salaryAmount/salaryCurrency/salaryPeriod are a machine-readable breakdown of the same figure (e.g. 2900/EUR/Monthly) sourced from the job's structured data — only available with fetchJobDetails: true.
Does the output tell me which category a job belongs to?
With fetchJobDetails: true, yes — categoryIds and categoryLabels list the job's Berufsfeld ID(s)/label(s) (the same IDs the category input filter accepts), populated on every job regardless of whether you filtered by category. This is sourced from the job detail page only, so it's not available without fetchJobDetails.
Can I sort results (e.g. by date or salary)? No. karriere.at's public search does not expose a sort parameter — results are returned in the site's default order (newest-first for unfiltered/keyword browsing). There is no reliable, unauthenticated sort axis to expose.
How is postedDate calculated?
karriere.at shows relative labels for recent posts (e.g. "Heute veröffentlicht", "vor 3 Tagen veröffentlicht") and an absolute date for older ones. The actor parses both into a consistent ISO YYYY-MM-DD date.
Is this affiliated with karriere.at? No, this is an independent third-party actor built against karriere.at's public job search.
How many jobs can I scrape in one run?
Up to 2000 per run via maxItems. For larger volumes, run the actor multiple times with different filters (e.g. per Bundesland or per category).
Limitations
- Salary-range filtering is not available. karriere.at gates its minimum-salary filter behind a logged-in account; it is not reachable from the public search this actor uses. The
salaryoutput field is still populated wherever the employer discloses a range. - No sort order control. The public search API doesn't expose a sort/order parameter, so results follow karriere.at's own default ordering (newest-first for keyword/browse queries). There is no reliably-supportable sort axis to add.
radiusonly applies to single-city searches. karriere.at's own UI disables the radius control for Bundesland-level and multi-location selections; the actor forwards the parameter anyway (it's harmless), but it has no effect outside a single-city selection — this mirrors the upstream site's own behavior exactly.- Leaving
radiusblank does not always mean "exact city only." Verified live: for smaller Austrian towns, karriere.at's own default search silently expands to a commuter-area radius around the nearest larger city when the exact town has few current listings — you may get 0 records for that exact town while the run still succeeds with real regional jobs. Setradius: "0"explicitly for a guaranteed exact-city match. fetchJobDetailsis opt-in and slower. It issues one extra request per job to fetch the full description/salary/date breakdown, roughly doubling run time. Leave it off (default) for fast bulk scraping; enable it when you need the full description text or a machine-readable salary. A job that went inactive between the search listing and the detail fetch is skipped for enrichment only — the base record (title, company, location, etc.) still ships.companySlugruns one request sequence per slug. karriere.at'scompany=filter only accepts a single slug per request — it silently ignores repeated params and comma-joined lists (verified live), unlikelocationwhich does support comma-join. The actor works around this by running one full paginated pass per slug (capped at 20 slugs per run) rather than exposing a broken multi-company OR query.- Non-Latin-script
searchQueryvalues are silently stripped by karriere.at, not rejected. Verified live: Japanese/Chinese/Cyrillic keywords are dropped server-side before matching and the search falls back to the newest nationwide listings (same as leavingsearchQueryblank) rather than returning 0 results. This is upstream input handling the actor cannot override — Latin-script queries (including accented German/French/Spanish) are unaffected and match/reject normally.