# derStandard Jobs Scraper (Austria) - DER STANDARD (`aidnurs/derstandard-jobs-scraper`) Actor

Scrape DER STANDARD Jobs (jobs.derstandard.at, formerly derStandard Karriere), an Austrian job board, as an API: salary as a number, employment type, home office, industries, green jobs, full description. Off-topic results are skipped and free. Duplicates are free.

- **URL**: https://apify.com/aidnurs/derstandard-jobs-scraper.md
- **Developed by:** [Nursultan Imanov](https://apify.com/aidnurs) (community)
- **Categories:** Jobs, Lead generation
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 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.

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

### derStandard jobs scraper and API

**derStandard Jobs Scraper** extracts job listings from [derStandard Jobs](https://jobs.derstandard.at) (formerly derStandard Karriere), the job board of Austria's quality daily newspaper DER STANDARD. Search by keyword and location, filter by employment type, position level, job field, minimum salary, home office and green jobs, and get clean, structured data: **title, company, salary (as a number with period), employment type, home office flag, posting date, city, industries, tags and the full job description**.

Use it as a **derStandard Jobs API** for job market research, recruiting, salary benchmarking, lead generation for HR services, or to build your own job alerts for Austria.

### Why use this derStandard Jobs scraper?

- 💶 **Salary as numbers.** Every ad with a published salary gets `salaryMin`, `salaryCurrency` and `salaryPeriod` (`MONTH`, `YEAR`, `HOUR`), plus a readable `salaryText`.
- 🔁 **No duplicates charged.** Every job appears once per run. Repeats are skipped, not billed.
- 🔔 **Only new jobs since the last run.** Turn on *Only new jobs* and schedule the Actor: each run returns just the postings you have not received yet. Perfect for daily job alerts.
- 🎯 **No "similar jobs" noise.** When nothing matches your filters, the website falls back to unrelated suggestions. This Actor detects that and saves nothing, so you never pay for off-topic results.
- 🔤 **No paying for junk keywords.** derStandard's keyword search is semantic, so a typo-ridden or unknown keyword still returns ~200 random jobs. With *Skip results that don't match the keyword* (on by default) such runs save nothing and cost nothing; real typos like `Pyhton` still work.
- 📄 **Full description** (optional), plus industries, city, postal code and country.
- 🏷️ **Sponsored jobs flagged.** Top listings are marked with `isSponsored`.
- 🛡️ **GDPR-friendly by default.** Phone numbers, personal e-mails and contact-person names are masked or left out (role mailboxes like `jobs@` stay). Turn on *Include personal data* only if you have a legal basis.
- ⚡ **Fast and cheap.** Pure HTTP, no browser, no proxy needed. 50 jobs with full descriptions take about 3 seconds.

### How much does it cost to scrape derStandard Jobs?

You pay only for jobs saved to the dataset (pay per result). Empty searches cost nothing, and you can cap spending with *Max jobs* and the run's maximum cost.

### How to scrape derStandard Jobs

1. Enter **Keywords** (e.g. `Data Engineer`, `Buchhaltung`) or leave empty to browse all jobs.
2. Enter a **Location**: a city (`Graz`, `St. Pölten`), Vienna district or postal code (`1010`), or federal state (`Oberösterreich`). Leave empty for all of Austria. Unknown places stop the run with a suggestion instead of silently searching all of Austria.
3. Optionally choose employment types, job levels, job fields, minimum monthly salary, *Home office only* or *Green jobs only*.
4. Set **Max jobs** and click **Start**.
5. Download the results as JSON, CSV, Excel or HTML, or get them via the Apify API.

### Input example

```json
{
  "keywords": "python",
  "location": "Wien",
  "maxItems": 100,
  "includeDetails": true,
  "employmentTypes": ["Vollzeit"],
  "jobFields": ["IT & EDV"],
  "minMonthlySalary": 3500,
  "homeOfficeOnly": false,
  "onlyNewJobs": false
}
```

### Output example

```json
{
  "id": "ac82c6ac-e40b-3f4c-a0a6-194bdaa8bcc9",
  "url": "https://jobs.derstandard.at/detail/ac82c6ac-e40b-3f4c-a0a6-194bdaa8bcc9",
  "title": "Software Entwickler mit Fokus Python (w/m/x)",
  "companyName": "epunkt GmbH",
  "companyWebsite": "https://www.epunkt.com",
  "locations": ["Wien"],
  "city": "Wien",
  "country": "AT",
  "isHomeOffice": true,
  "employmentTypes": ["Vollzeit", "Teilzeit"],
  "salaryText": "3.400 € monatlich",
  "salaryMin": 3400,
  "salaryCurrency": "EUR",
  "salaryPeriod": "MONTH",
  "tags": ["Python", "Odoo", "PostgreSQL", "Docker"],
  "industries": ["INFORMATION_AND_COMMUNICATION"],
  "datePosted": "2026-09-30T09:18:03.280Z",
  "isSponsored": false,
  "descriptionText": "Sei erfolgreich in Softwareprojekten rundum Odoo ERP! ...",
  "source": "jobs.derstandard.at",
  "scrapedAt": "2026-10-07T12:15:38Z"
}
```

### Fields you get

| Field | Description |
|---|---|
| `title`, `url`, `id` | Job title, link and derStandard job ID |
| `companyName`, `companyWebsite`, `companyLogo`, `companyJobsUrl`, `brandName` | Employer data and a link to all of the employer's jobs |
| `locations`, `city`, `postalCode`, `region`, `street`, `country` | Where the job is |
| `salaryText`, `salaryMin`, `salaryCurrency`, `salaryPeriod` | Salary as published with the ad (`salaryMax` kept for compatibility, usually empty) |
| `employmentTypes`, `employmentTypeCodes` | Vollzeit, Teilzeit, ... and schema.org-style codes |
| `isHomeOffice`, `benefits`, `isSponsored`, `features` | Home office possible, benefits, promoted listing |
| `tags`, `industries` | Keywords and industry classification from derStandard |
| `datePosted`, `validThrough` | Posting dates |
| `applicationType` | How to apply: `LINK_OUT` (employer site) or `EMAIL` |
| `applyEmail` | Application e-mail. Off by default only role mailboxes (`jobs@`, `bewerbung@`); a personal address only when Include personal data is on |
| `contactPersonName` | Contact person named in the ad, only when Include personal data is on |
| `summary`, `descriptionText`, `descriptionHtml` | Short summary (when present) and full description |

### FAQ

**Is it legal to scrape derStandard Jobs?**
This Actor collects only publicly available job postings, the same pages any visitor sees. It never logs in, never uses accounts or cookies of real users, and never solves or bypasses CAPTCHAs.

**Personal data is off by default.** Phone numbers and personal e-mails inside job texts are masked (role mailboxes like `jobs@` or `office@` stay), and contact-person names, direct phones and e-mails are not saved. Names that an employer writes into the free text of a description can still appear as published.

If you turn on **Include personal data**, you get everything the site shows publicly, including the contact person's name, phone and e-mail where available. Personal data is protected by the GDPR in the EU and by similar laws elsewhere. Only enable it if you have a legal basis (for example, a documented legitimate interest), keep only what you need, and do not use it for unsolicited marketing. If you are unsure, consult a lawyer.

You are responsible for how you use the data and for complying with applicable laws and derStandard Jobs's terms. This Actor is not affiliated with or endorsed by derStandard Jobs. Read more: [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

Found something that should not be here? Open an issue on the Actor's Issues tab and we will look at it promptly.

**How many jobs can I get?**
Browsing without keywords reaches the whole catalog (about 2,800 jobs in October 2026). Keyword searches are ranked by relevance on derStandard's side and usually return up to about 200 results; the last results can be only loosely related to your keyword.

**Do I need a proxy?**
No. derStandard Jobs works without a proxy. For very large or frequent runs you can add Apify Proxy or your own proxies in the *Advanced* section.

**How do I get only new jobs every day?**
Turn on *Only new jobs since last run*, save the task and add a schedule. Use a different *Monitoring key* for each saved search.

**Something broke or a field is missing?**
Open an issue on the Issues tab. We usually respond within 24 hours.

# Actor input Schema

## `keywords` (type: `string`):

What to search for, e.g. job title or skill ("Data Engineer", "Buchhaltung"). Leave empty to browse all jobs (use filters below).

## `location` (type: `string`):

City, district, postal code or federal state in Austria, e.g. "Wien", "Linz", "1010", "Oberösterreich". Leave empty for all of Austria.

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

Maximum number of jobs to save. You only pay for jobs saved to the dataset.

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

Fetch every job's full description, industries and valid-through date.

## `includePersonalData` (type: `boolean`):

Off by default: phone numbers and personal e-mails inside job texts are masked (\[phone removed], \[email removed]; role mailboxes like jobs@ or office@ stay), and contact-person names, direct phones and e-mails are not saved.<br><br>Turn it on to get everything the site shows publicly, including the contact person's name, phone and e-mail where the employer published them.<br><br>⚠️ This returns personal data. You're responsible for having a legal basis to collect and use it under privacy laws (e.g. GDPR).

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

Only jobs where derStandard marks home office as possible.

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

Filter by employment type (Dienstverhältnis).

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

Filter by position level.

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

Filter by professional field (Berufsfeld).

## `minMonthlySalary` (type: `integer`):

Only jobs with an estimated gross monthly salary of at least this amount (derStandard's own salary filter).

## `greenJobsOnly` (type: `boolean`):

Only jobs tagged as Green Job by derStandard.

## `strictKeywordMatch` (type: `boolean`):

derStandard's keyword search is semantic: a misspelled or unknown keyword still returns about 200 loosely related jobs. When on (recommended), the run saves nothing and charges nothing if none of the first results mention your keyword (typos like "Pyhton" are tolerated). Turn off to always save what the site returns.

## `onlyNewJobs` (type: `boolean`):

Remember job IDs between runs and return only jobs you have not received yet. Ideal for scheduled runs and job alerts. Already-seen jobs are never charged.

## `stateKey` (type: `string`):

Name of the memory used by 'Only new jobs'. Use a different key for each saved search.

## `proxyConfiguration` (type: `object`):

derStandard Jobs works without proxy. Use your own or Apify Proxy if you run very large or frequent scrapes.

## Actor input object example

```json
{
  "keywords": "python",
  "location": "Wien",
  "maxItems": 20,
  "includeDetails": true,
  "includePersonalData": false,
  "homeOfficeOnly": false,
  "greenJobsOnly": false,
  "strictKeywordMatch": true,
  "onlyNewJobs": false,
  "stateKey": "default",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

Scraped job listings (table view).

## `jobsFull` (type: `string`):

All fields including full description.

# 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": "python",
    "location": "Wien",
    "maxItems": 20,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("aidnurs/derstandard-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": "python",
    "location": "Wien",
    "maxItems": 20,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("aidnurs/derstandard-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": "python",
  "location": "Wien",
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call aidnurs/derstandard-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,aidnurs/derstandard-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/JbzR6NNjTGAY3zMu6/builds/qRhnYC1kuGvCxquvu/openapi.json
