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.

Level: Beginner
Time: 5 minutes
Cost: 249 listings with details: about $2.00
Tools: Apify Console (no code)
Open the Actor on Apify → See the cost

In this tutorial

  1. What you get
  2. All fields
  3. Example: who is hiring electricians in Berlin?
  4. Step 1: Create an Apify account
  5. Step 2: Enter search and location
  6. Step 3: Start the Actor
  7. Step 4: Export the data
  8. Available filters
  9. API and schedules
  10. Cost
  11. Use cases
  12. FAQ

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:

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.

FieldTypeContent
idTextUnique listing ID
titleTextListing title
companyTextEmployer
location / locationsText / listLocation and all locations named in the ad
state / state_code / post_codeTextFederal state (name and code) and postcode
employment_typeTextEmployment type, for example full-time
remote_option / work_from_homeTextHome-office information from StepStone
salary_textTextSalary as written in the ad
salary_min / salary_maxNumberSalary as numbers
salary_currency / salary_periodTextCurrency and period (yearly, monthly or hourly)
industryTextIndustry or field of the ad
description_snippet / description_full / description_mdTextShort preview, full text and Markdown version
requirements / company_benefitsListRequirements (the "Ihr Profil" section) and benefits
apply_url / apply_emailTextLink of the apply button and, if present, an application email
contact_firstname, contact_lastname, contact_email, contact_phoneTextContact person, only when the ad names one explicitly
company_url / company_website / company_job_countText / numberCompany profile on StepStone, external website and number of open jobs
company_address / company_sizeTextAddress and size class from the company profile
posted_at / expires_atDatePublication and expiry date
source_url / source_platformTextLink to the original ad and platform (stepstone.de)
search_query / scraped_atTextSearch term that found the listing and time of the pull
Not every field is always filled. Salary, contact person and application email appear in only some listings. In the example below, 5 of 249 listings stated a salary.

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:

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-scraper

Then 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.

Cost of this run: about $2.00 on the Free plan with details, or about $0.75 without details. The calculation is in the Cost section.
STEP 1

Create an Apify account

  1. Open the StepStone.de Scraper page on Apify.
  2. Click Try for free and sign up with Google or email.
  3. 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.
STEP 2

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
}
Start small. For your first run, set maxResultsPerQuery to 10 to 30. You see quickly whether the hits match your search term, and you pay only a few cents.
STEP 3

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
}
STEP 4

Export the data

  1. Open the Dataset tab of the run.
  2. Click Export.
  3. 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_text and source_url.

Available filters

According to the input schema, the Actor filters by these settings:

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:

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):

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

Open the Actor on Apify → All tutorials