# karriere.at Jobs Scraper (`deriverge/karriere-at-jobs-scraper`) Actor

Austrian job ads from karriere.at with the salary as numbers, home office, company size and website, and the full description. Search by keyword and place within a radius, and filter by job field, position level or home office.

- **URL**: https://apify.com/deriverge/karriere-at-jobs-scraper.md
- **Developed by:** [deriverge s.r.o.](https://apify.com/deriverge) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 1,000 jobs

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## karriere.at Jobs Scraper

karriere.at is an Austrian job board. Each row is one job ad: title, employer with headcount, logo and website, places of work with the federal state, home office, employment type, the salary as written and as numbers per month, year or hour, karriere.at's short summary and the full description. The form is filled in with `Buchhalter` in `Wien`: click **Start**, then change the keyword. Almost every ad states pay, mostly as a minimum: 570 of 600 ads in a September 2026 run, 502 of them starting with `ab`. It costs $1.00 per 1,000 jobs on the Free plan ($0.50 on Business), and the $5 of monthly credit in Apify's Free plan covers about 5,000 jobs.

### Output fields

| Field | Description |
|---|---|
| `title`, `company`, `companyId` | Job title as the employer wrote it, e.g. `Mitarbeiter*in Payroll-Administration (m/w/d)`, the employer and its karriere.at ID. |
| `anonymousEmployer` | `true` for an anonymous (Chiffre) ad; the company name, ID, logo and links are then empty. |
| `companyEmployees` | Headcount band as karriere.at shows it, such as `51 - 100` or `501 - 2500`. |
| `companyWebsite`, `companyLogo`, `companyUrl` | The employer's own website (with details on), its logo and its profile page on karriere.at. |
| `locations`, `city` | Every place of work, e.g. `Wien 4. Bezirk (Wieden)` or `Graz`, and the first of them. |
| `state`, `country` | With details on: the federal state, such as `Oberösterreich` or `Wien`, and the country. |
| `homeOffice` | `true` when the ad says working from home is possible. |
| `employmentTypes` | `Full-time`, `Part-time`, `Marginal employment (geringfügig)`, `Internship`, `Apprenticeship`, `Thesis` or `Freelance or project work`. |
| `salaryText` | Pay exactly as the ad states it, e.g. `ab 3.571,43 € monatlich`. |
| `salaryMin`, `salaryMax`, `salaryPeriod`, `salaryCurrency` | The same pay as numbers, `3571.43` in this case, per `month`, `year` or `hour`, in `EUR`. `salaryMax` stays empty when the ad gives only a minimum. |
| `summary` | The short summary of the job shown in karriere.at's search results. |
| `postedAt` | With details on: the date the ad was published, as `YYYY-MM-DD`. |
| `description`, `descriptionHtml` | With details on: the full ad as plain text and as HTML. |
| `directApply`, `smartApply` | With details on, `directApply` is `true` when you can apply on karriere.at itself; `smartApply` is `true` when the job takes the quick Smart Bewerben application. |
| `detailsIncluded` | `false` when the job page could not be read, so the fields that need details are empty. |
| `url`, `jobId` | The job page on karriere.at and its numeric ID. |

### How to scrape karriere.at

1. Enter **Keywords** the way you would on karriere.at, best in German: `Buchhalter`, `Softwareentwickler`, `Pflege` or `Verkauf`. Each keyword is a separate search.
2. Add **Locations**: a city, district, federal state or postcode, such as `Wien`, `Graz`, `Oberösterreich` or `4020`. Every keyword runs in every location, and **Radius** widens each place by 10, 20, 30 or 50 km or keeps it to the exact place.
3. Choose karriere.at's filters if you need them: **Job fields** (the 20 Berufsfelder), **Employment types**, **Position levels** and **Home office possible**.
4. Keep **Include full details** on for the posting date, state, company website, the description and the apply flag. The price is the same, but each job page is one more request: 600 jobs with details took 6.5 minutes in September 2026, while 1,000 jobs without details take about a minute.
5. Click **Start**. The jobs collect in the **Output** tab, ready to download as CSV, Excel or JSON or to read through the API.

As API input, software jobs in IT within 30 km of Linz with home office, which matched 41 jobs in September 2026:

```json
{
  "keywords": ["Softwareentwickler"],
  "locations": ["Linz"],
  "radiusKm": "30",
  "jobFields": ["2172"],
  "employmentTypes": ["3960"],
  "homeOfficeOnly": true,
  "maxItems": 100
}
```

The filters take karriere.at's IDs, listed in the input schema: `2172` is the IT field and `3960` full-time work.

### Example output

One job from a run on 11 October 2026; `description` and `descriptionHtml` stop after the job and company facts that open the ad.

```json
{
  "key": "karriere:10033968",
  "jobId": "10033968",
  "title": "Mitarbeiter*in Payroll-Administration (m/w/d)",
  "url": "https://www.karriere.at/jobs/10033968",
  "company": "Josef Manner & Comp. AG",
  "companyId": "14007",
  "companyUrl": "https://www.karriere.at/f/josef-manner-comp",
  "companyWebsite": "https://www.manner.com/de-AT",
  "companyLogo": "https://kcdn.at/company/14007/3889516/1.companysquare.jpg",
  "companyEmployees": "501 - 2500",
  "anonymousEmployer": false,
  "locations": [
    "Wien"
  ],
  "city": "Wien",
  "state": "Wien",
  "country": "Austria",
  "homeOffice": true,
  "employmentTypes": [
    "Full-time"
  ],
  "salaryText": "ab 3.571,43 € monatlich",
  "salaryMin": 3571.43,
  "salaryMax": null,
  "salaryPeriod": "month",
  "salaryCurrency": "EUR",
  "postedAt": "2026-10-06",
  "summary": "Unterstützung in der Personalverrechnung (Payroll) mit Schwerpunkt Administration. Erstellung von Dienstverträgen, Kontrolle von Zeitkonten und Reiseabrechnungen. Mindestens 5 Jahre Erfahrung im Bereich Payroll/Personaladministration. Flexible Zeiteinteilung und Homeoffice-Möglichkeit.",
  "description": "karriere.at/jobs/10033968\nMitarbeiter*in Payroll-Administration (m/w/d)\nWien, Österreich | req177\nÜber den Job\nAnstellungsart\nVollzeit (Festanstellung)\nGehalt\nab 3.571,43 EUR monatlich\nPositionsebene\nBerufserfahrung\nArbeitsmodell\nHybrid\nDienstort\nWien\nBerufsfelder\nPersonalwesen, Rechnungswesen, Controlling\nOffene Stellen\n1 Stelle offen für diese Position\nÜber das Unternehmen\nArbeitgeber\nJosef Manner & Comp. AG\nMitarbeiter*innenanzahl\n501 - 2500 Mitarbeiter*innen\nStandorte\nWien, Wolkersdorf ...",
  "descriptionHtml": "<p>karriere.at/jobs/10033968 </p>\n<h1>Mitarbeiter*in Payroll-Administration (m/w/d)</h1>\n<h2>Wien, Österreich | req177</h2>\n<h3>Über den Job</h3>\n<p>Anstellungsart </p>\n<p>Vollzeit (Festanstellung) </p>\n<p>Gehalt </p>\n<p>ab 3.571,43 EUR monatlich </p>\n<p>Positionsebene </p>\n<p>Berufserfahrung </p>\n<p>Arbeitsmodell </p>\n<p>Hybrid </p>\n<p>Dienstort </p>\n<p>Wien </p>\n<p>Berufsfelder </p>\n<p>Personalwesen, Rechnungswesen, Controlling </p>\n<p>Offene Stellen </p>\n<p>1 Stelle offen für diese Position </p>\n<h3>Über das Unternehmen</h3>\n<p>Arbeitgeber </p>\n<p> Josef Manner & Comp. AG </p>\n<p>Mitarbeiter*innenanzahl </p>\n<p>501 - 2500 Mitarbeiter*innen </p>\n<p>Standorte </p>\n<p>Wien, Wolkersdorf </p> ...",
  "directApply": false,
  "smartApply": false,
  "detailsIncluded": true,
  "searchQuery": "\"Buchhalter\" in Wien",
  "scrapedAt": "2026-10-11T12:25:48.123Z"
}
```

### How much does it cost to scrape karriere.at?

| | Free plan | Starter | Scale | Business |
|---|---|---|---|---|
| 1,000 jobs | $1.00 | $0.80 | $0.65 | $0.50 |

You pay only for the events in the table. There is no start fee, and compute time and proxies are included.

Exporting 1,000 Austrian jobs with full details costs $1.00 on the Free plan and $0.50 on Business. Jobs dropped by **Exclude keywords**, jobs that two of your searches share and jobs the new-only mode has already sent are not billed.

### Limits

- There is no salary filter, because karriere.at ignores it in the requests the actor makes; filter on `salaryMin` and `salaryPeriod` after the run. Search links copied from the website are not accepted either.
- karriere.at gives an exact number of matches only up to 1,000. Above that, the `SUMMARY` record in the run's key-value store says `more than 1000`, as it does for all jobs without a keyword.
- Without a **Radius** the website's default area applies: a search for `Wien` also returned a job in Leobendorf in Lower Austria in October 2026.
- `postedAt`, `state`, `country`, `companyWebsite` and `directApply` come from the job page and need full details. `state` held only `Österreich` on 9 of 600 jobs, and `summary` was missing on 154.
- The actor requests a page about every 0.6 seconds. If karriere.at answers with HTTP 429 or 403, it waits 5 minutes; a refusal after three such waits ends the run, and the jobs read until then stay in the dataset.

### FAQ

#### Is it legal to scrape karriere.at?

karriere.at publishes these ads for anyone to read, and the actor requests the same search results and job pages a browser does, spaced 0.6 seconds apart. The site's robots.txt did not exclude them when the actor was built in September 2026. No applicant data is involved, but many ads end with a contact person's name, phone number or email address, and 142 of 600 descriptions in a September 2026 run contained an email address. Keeping and using that text is your responsibility.

#### What does `ab` in the salary mean?

`ab` is German for "from": the ad gives the lowest pay, which becomes `salaryMin`, while `salaryMax` stays empty. Of the 570 salaries in the September 2026 run, 502 had this form, 56 gave a range that fills both fields and 12 a single amount. `salaryPeriod` was `month` on 329 of them, `year` on 236 and `hour` on 5.

### Related scrapers

- [XING Jobs Scraper](https://apify.com/deriverge/xing-jobs-scraper)
- [jobs.ch Scraper](https://apify.com/deriverge/jobs-ch-scraper)
- [Arbeitsagentur Jobs Scraper](https://apify.com/deriverge/arbeitsagentur-jobs-scraper)
- [Career Site Jobs Search](https://apify.com/deriverge/career-site-jobs-search)

### Support

This actor is built and maintained by deriverge s.r.o., a software company based in the Czech Republic. If a run fails or a field you need is missing, please open an issue in the **Issues** tab or write to us at info@deriverge.com. We respond in English and Czech. Runs can be scheduled in Apify Console or started from the **API** tab, which has examples for Python, JavaScript and cURL and works with Make, Zapier, n8n and the Apify MCP server. If the actor saves you time, a short review helps other people find it.

# Changelog

This Actor's version history is a separate document: https://apify.com/deriverge/karriere-at-jobs-scraper/changelog.md

# Actor input Schema

## `keywords` (type: `array`):

What to search for, as in the karriere.at search box: a job title, skill or company, best in German, for example "Buchhalter", "Softwareentwickler", "Pflege" or "Verkauf". Each keyword is its own search. Leave empty for all jobs.

## `locations` (type: `array`):

An Austrian city, district, state or postcode, for example Wien, Graz, Linz, Oberösterreich or 4020. Each location is its own search. Leave empty for all of Austria.

## `radiusKm` (type: `string`):

How far around each location to search. Leave empty for the website default.

## `jobFields` (type: `array`):

Only jobs in any of these fields (Berufsfelder). Leave empty for all.

## `employmentTypes` (type: `array`):

Only jobs of any of these types (Anstellungsart). Leave empty for all.

## `jobLevels` (type: `array`):

Only jobs at any of these levels (Positionsebene). Leave empty for all.

## `homeOfficeOnly` (type: `boolean`):

Only jobs where working from home is possible, as the Homeoffice filter on the website.

## `excludeKeywords` (type: `array`):

Drop jobs whose title or company contains any of these.

## `includeDetails` (type: `boolean`):

Reads each job for the full description (text and HTML), the posting date, the state and country, the company website and the exact salary numbers. The price is the same.

## `newOnly` (type: `boolean`):

Keeps a snapshot per watch name (or per saved task) and returns only jobs that were not there before. Schedule it daily for a job alert.

## `watchName` (type: `string`):

Name of the snapshot used by the new-only mode, for example "buchhaltung-wien". Runs from a saved task get one automatically.

## `maxItems` (type: `integer`):

Hard cap on returned jobs. karriere.at lists about 12,000 open jobs. 1,000 jobs with full details take about 11 minutes, without details about a minute.

## Actor input object example

```json
{
  "keywords": [
    "Buchhalter"
  ],
  "locations": [
    "Wien"
  ],
  "homeOfficeOnly": false,
  "includeDetails": true,
  "newOnly": false,
  "maxItems": 20
}
```

# Actor output Schema

## `jobs` (type: `string`):

One row per job with salary, employment type, home office, company data, location and full description.

## `summary` (type: `string`):

Jobs matching and returned per search, details read, dropped rows and warnings.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "keywords": [
        "Buchhalter"
    ],
    "locations": [
        "Wien"
    ],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("deriverge/karriere-at-jobs-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "keywords": ["Buchhalter"],
    "locations": ["Wien"],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("deriverge/karriere-at-jobs-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keywords": [
    "Buchhalter"
  ],
  "locations": [
    "Wien"
  ],
  "maxItems": 20
}' |
apify call deriverge/karriere-at-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,deriverge/karriere-at-jobs-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/rdKOq3B0Lnfd7kcbs/builds/sh5LkGGI6tNEc2OCD/openapi.json
