How to Scrape StepStone: Export German Job Listings to CSV
Want to know which companies are hiring on StepStone, the largest German job board, and get the listings into Excel or your own analysis? The StepStone.de Scraper collects the listings for your search term and location and returns them as a table: title, employer, location, date, salary (when stated) and a link to the ad. No code, a few minutes. German version.
In this tutorial
What you get
StepStone has no export function for job listings. The StepStone.de Scraper collects the listings for your search terms and stores them as a table you can download as CSV, Excel or JSON. For each listing you get, among other things:
- Title, employer and location, plus the federal state (Bundesland), postcode and every location named in the ad.
- Salary, when the employer states one, as text and as numbers.
- Publication date and a link to the original ad.
- With details: full text, requirements, benefits, industry and employer information (website, address, size).
All fields at a glance
These are the main fields according to the Actor's output schema. The schema has more, for example logo, labels and markers for sponsored ads. Without includeJobDetails, the fields that only exist on the detail page are missing.
| Field | Type | Content |
|---|---|---|
id | Text | Unique listing ID |
title | Text | Listing title |
company | Text | Employer |
location / locations | Text / list | Location and all locations named in the ad |
state / state_code / post_code | Text | Federal state (name and code) and postcode |
employment_type | Text | Employment type, for example full-time |
remote_option / work_from_home | Text | Home-office information from StepStone |
salary_text | Text | Salary as written in the ad |
salary_min / salary_max | Number | Salary as numbers |
salary_currency / salary_period | Text | Currency and period (yearly, monthly or hourly) |
industry | Text | Industry or field of the ad |
description_snippet / description_full / description_md | Text | Short preview, full text and Markdown version |
requirements / company_benefits | List | Requirements (the "Ihr Profil" section) and benefits |
apply_url / apply_email | Text | Link of the apply button and, if present, an application email |
contact_firstname, contact_lastname, contact_email, contact_phone | Text | Contact person, only when the ad names one explicitly |
company_url / company_website / company_job_count | Text / number | Company profile on StepStone, external website and number of open jobs |
company_address / company_size | Text | Address and size class from the company profile |
posted_at / expires_at | Date | Publication and expiry date |
source_url / source_platform | Text | Link to the original ad and platform (stepstone.de) |
search_query / scraped_at | Text | Search term that found the listing and time of the pull |
Example: who is hiring electricians in Berlin?
For recruiters and staffing agencies placing candidates in Germany, the first question is often which companies are hiring in a given region and trade right now. We ran the Actor once locally (21 October 2026) with the search term "Elektriker" (German for electrician), Berlin with a 25 km radius, newest listings first. The result:
- 249 job listings from 88 companies.
- 245 of them were published between 18 and 21 October 2026, so the list mostly shows what has just been advertised.
- Largest employer: Tesla Manufacturing Brandenburg SE with 122 listings, almost half of all hits. Counting by company shows quickly when one employer dominates a list.
- Only 5 listings stated a salary, so this search is not enough for salary benchmarking.
The input for this search looks like this:
{
"searchQueries": ["Elektriker"],
"location": "Berlin",
"radius": 25,
"maxResultsPerQuery": 400,
"sortBy": "newest",
"includeJobDetails": true
}By default the Actor reads up to 10 result pages per search term, with up to 25 rows each (maxPagesFetched), so about 250 listings at most. 249 is just below that cap, which means StepStone may have more listings for this search. If you want all of them, raise maxPagesFetched; maxResultsPerQuery (400 here) then limits the volume.
To count by company, make a pivot table on the company column of the exported table, or let Claude do it. Connect the Apify MCP server as a custom connector with this URL (see Apify's MCP documentation). It limits Claude to this one Actor:
https://mcp.apify.com?tools=santamaria-automations/stepstone-de-scraperThen paste this prompt. Claude tells you the cost first and waits for your OK:
Use the Apify MCP server. Run the Actor santamaria-automations/stepstone-de-scraper with
searchQueries ["Elektriker"], location "Berlin", radius 25, sortBy "newest", maxResultsPerQuery 400.
Before you start the run, tell me what it will cost and wait for my OK.
Then group the listings by employer (company) and give me a table with company,
number of listings and the earliest and latest posted_at, sorted by number of listings descending.
At the end, tell me how many listings in total, from how many companies, and how many state a salary.We tested the Actor and the inputs, not the prompt through MCP; Claude may word the cost statement differently.
Create an Apify account
- Open the StepStone.de Scraper page on Apify.
- Click Try for free and sign up with Google or email.
- You land in the Apify Console on the Actor's Input tab. For small runs, the monthly free credit of the Free plan is enough.
Enter search and location
In searchQueries ("Search Keywords") enter one or more search terms. Each term runs as its own search, and duplicate listings are removed across all terms. Enter the place in location and the radius in radius. Use German search terms, since the listings are in German. A small test input:
{
"searchQueries": ["Elektriker"],
"location": "Berlin",
"radius": 25,
"sortBy": "newest",
"maxResultsPerQuery": 20,
"includeJobDetails": true
}location: a city, region or federal state as text, for example "München" (Munich) or "Sachsen" (Saxony).radius: radius in kilometres. The schema lists 0, 5, 10, 25, 50, 100, 150 or 200 (default 25).maxResultsPerQuery: upper limit per search term (default 100).maxResultslimits the total across all search terms.sortBy:newest(newest first, default) orrelevance.includeJobDetails:truealso fetches the detail page of each listing (default).falseis faster and cheaper but returns fewer fields.
maxResultsPerQuery to 10 to 30. You see quickly whether the hits match your search term, and you pay only a few cents.Start the Actor and check the result
Click Save and Run at the bottom. On the run page, the Log tab shows progress and the Dataset tab shows the results as a table. Several search terms in one run look like this:
{
"searchQueries": ["Elektriker", "Elektroniker", "Elektroinstallateur"],
"location": "Berlin",
"maxResultsPerQuery": 50,
"includeJobDetails": false
}Export the data
- Open the Dataset tab of the run.
- Click Export.
- Choose the format: CSV, Excel, JSON and more are available. With the field selection you export only the columns you need, for example
title,company,location,posted_at,salary_textandsource_url.
Available filters
According to the input schema, the Actor filters by these settings:
- Search term (
searchQueries), location (location) and radius (radius). Alternativelybundesland(federal state), which applies only whenlocationis empty. - Publication (
postedWithinDays): listings from the last 1, 7 or 30 days. Other values are rounded to these levels (up to 7 days to 7, above that to 30). - Employment type (
employmentType): full-time, part-time, internship, trainee, fixed-term or freelance. AlsostepstoneContractTypesfor permanent position, working student (Werkstudent), apprenticeship (Ausbildung), sales representative, agency work (Arbeitnehmerüberlassung) and franchise. - Experience (
experienceLevel): entry level, professional, management or executive. - Title (
titleFilter): only listings whose title contains a phrase. Separate several phrases with commas. This helps because StepStone's search also returns hits from the ad text. - Sorting (
sortBy) and volume (maxResultsPerQuery,maxResults,maxPagesFetched). - Your own search links (
searchUrls): search on stepstone.de with all the filters you need and paste the address of the results page. Single listings (directUrls) can be fetched on purpose, for example to check whether they are still online.
There is no salary filter. Do that afterwards in the table with salary_min and salary_max.
Fetch by API and on a schedule
You can also call the Actor from your own scripts, n8n or Make. This call starts a run and returns the results directly (Apify endpoint run-sync-get-dataset-items):
curl -X POST "https://api.apify.com/v2/acts/santamaria-automations~stepstone-de-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"searchQueries": ["Elektriker"], "location": "Berlin", "radius": 25, "sortBy": "newest", "postedWithinDays": 7, "maxResultsPerQuery": 100}'You find your API token in the Apify Console under Settings → API & Integrations. For pulls that should run regularly, create a schedule in the Console under Schedules. Set sortBy to newest, use postedWithinDays and compare the results with your last pull (field id) so you only process new listings.
What it costs
The Actor charges per result. These are the prices on the Actor's Apify Store page for the Free plan (as of 21 October 2026); paid Apify plans are somewhat cheaper:
- Start: $0.001 per run.
- Listing from the results page (
job-serp-result): $0.003 per listing. - Detail page (
job-detail-result): an additional $0.005 per listing.
Every delivered listing therefore costs $0.003. If the Actor also fetched the detail page, $0.005 is added, $0.008 in total. Listings that are not saved (for example because they are no longer online) are not charged.
Worked example for the search above (249 listings):
- With details: $0.001 + 249 x $0.008 = $1.993, about $2.00.
- Without details (
includeJobDetailsset tofalse): $0.001 + 249 x $0.003 = $0.748, about $0.75.
If the run stops early because of the time limit, some listings may arrive with results-page data only and are then charged as such. You can always find the current prices on the Actor's Apify page.
What people use the data for
Recruiting and staffing agencies
Count by employer to see who is advertising many positions in your field and region. With company_website and, where the ad names one, the contact_* fields, you can prepare outreach. Note the guidance in the FAQ on using the data.
Market analysis
Run the newest listings for an occupation regularly and watch how many are added per week, which industries (industry) and places lead, and how strongly single employers shape the picture.
Feeding your own job list or job board
Use source_url to link to the original ad. Use expires_at to remove expired listings from your list.
Frequently asked questions
Do I need to know how to code to scrape StepStone?
No. In the Apify Console you fill in a form, click Save and Run and download the table. You only need code if you want to call the Actor through the API from your own system.
What data do I get from StepStone?
Title, employer, location, federal state (Bundesland), employment type, salary (when stated), publication date, a link to the original ad and, with includeJobDetails, the full text, requirements, benefits, industry and employer details. Which fields are filled depends on the individual ad.
Why is the salary field empty for most listings?
Because most German job ads do not state a salary. In the example run with 249 listings for electricians in Berlin, only 5 had a salary.
How do I get only new listings?
Use postedWithinDays (1, 7 or 30 days) and sortBy newest. For recurring runs, also compare the results with your last pull, for example by the id field.
How much does the StepStone scraper cost?
On the Free plan it costs $0.003 per listing from the results page, plus $0.005 per listing with its detail page and $0.001 per run start. 249 listings with details cost about $2.00, without details about $0.75.
Am I allowed to use the data?
That depends on your use case, especially for personal contact details such as the name, email or phone number of a contact person. Check this for your case before you store or reuse the data. In Germany and the EU, data protection law (GDPR) applies to personal data.
Related links
- StepStone.de Scraper, Actor page: input fields, output fields and pricing at a glance.
- StepStone.de Scraper on Apify: the Actor with documentation and all parameters.
- How to Scrape Every Job Online: job listings from 110+ job boards with one call.
- German version of this tutorial