StepStone Scraper avatar

StepStone Scraper

Pricing

from $0.75 / 1,000 results

Go to Apify Store
StepStone Scraper

StepStone Scraper

Scrape job listings from StepStone.de, Germany's leading job board. Extract job titles, companies, locations, salaries, full descriptions, employment types, posting dates and recruiter contact emails. Perfect for recruitment analytics, market research, salary benchmarking and lead generation.

Pricing

from $0.75 / 1,000 results

Rating

0.0

(0)

Developer

SilentFlow

SilentFlow

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Turn StepStone.de into structured, ready-to-use job data. Pull titles, companies, locations, salary, and full job descriptions from Germany's leading job board. Hundreds of listings in minutes, not hours.

How it works

How it works

✨ Why teams choose this over other StepStone scrapers

Tired of scrapers that only hand you a title and a link? Rebuilding job descriptions by hand because the data stops at the search page? Getting inconsistent rows every time you run a search?

  • 📄 Full job descriptions, not just search snippets. Turn on includeDetails and every row gets the complete description, employment type, and exact geo-location pulled from the job page itself, not the truncated preview shown on the results list.
  • 🎯 The richest StepStone data available. Most StepStone scrapers stop at search-result summaries. This one adds description, employment type, and precise location per job, the fields recruiters and analysts actually need.
  • 🧱 One clean row per job. Every listing lands in your dataset with the same structure: title, company, location, salary, dates, and skills, ready to filter, sort, or load into a spreadsheet without cleanup.
  • 🔓 No login required. Scrape all public job listings without an account, an API key, or any manual setup.
  • 🇩🇪 Built for the German market. Search by keyword and city, or paste StepStone.de search URLs directly. Locations, salary text, and posting dates come back exactly as StepStone publishes them.

🎯 What you can do with StepStone data

TeamWhat they build
Recruiters & staffing agenciesSource live roles and hiring companies, and monitor competitor job postings as they go up
HR & people analyticsBenchmark salary ranges and benefits language across roles, industries, and regions
Market researchersTrack German labor-market and hiring-trend shifts over time, by city, sector, or job title
Sales & lead generationFind companies actively hiring as a buying-intent signal for outbound targeting
Data teamsFeed a job-market dataset into dashboards, models, or internal search tools

📥 Input parameters

What to scrape

ParameterTypeDescription
searchUrlsarrayStepStone.de search-result URLs to scrape. Run a search on StepStone.de and paste the resulting URL here.
keywordstringJob keyword to search when no URL is given, e.g. "data engineer".
locationstringCity or region to focus the keyword search, e.g. "Berlin".

Options

ParameterTypeDefaultDescription
includeDetailsbooleanoffVisit each job page to add the full description, employment type, and exact location.

Limits

ParameterTypeDefaultDescription
maxItemsinteger50Maximum number of jobs to collect.

Advanced

ParameterTypeDefaultDescription
debugModebooleanoffDetailed logs for troubleshooting.

Note: Proxies are automatically configured in Pay Per Event mode. No proxy setup needed.

📊 Output data

Listing-level item (includeDetails off)

{
"id": 9876543,
"harmonisedId": "9876543_de",
"title": "Data Engineer (m/w/d)",
"url": "https://www.stepstone.de/stellenangebote--Data-Engineer-Berlin--9876543",
"companyName": "Beispiel GmbH",
"companyUrl": "https://www.stepstone.de/cmp/de/beispiel-gmbh",
"companyLogoUrl": "https://www.stepstone.de/logos/beispiel-gmbh.png",
"location": "Berlin",
"postCode": "10115",
"salary": "55.000 € - 70.000 €",
"datePosted": "2026-06-28",
"workFromHome": "2",
"textSnippet": "Wir suchen einen Data Engineer zur Verstärkung unseres Teams...",
"labels": ["Festanstellung", "Vollzeit"],
"skills": ["SQL", "Python", "Airflow"],
"section": "IT",
"isSponsored": false,
"searchUrl": "https://www.stepstone.de/jobs/data-engineer?ws=Berlin",
"scrapedAt": "2026-07-02T10:30:00Z"
}

Full detail item (includeDetails on)

{
"id": 9876543,
"harmonisedId": "9876543_de",
"title": "Data Engineer (m/w/d)",
"url": "https://www.stepstone.de/stellenangebote--Data-Engineer-Berlin--9876543",
"companyName": "Beispiel GmbH",
"companyUrl": "https://www.stepstone.de/cmp/de/beispiel-gmbh",
"companyLogoUrl": "https://www.stepstone.de/logos/beispiel-gmbh.png",
"location": "Berlin",
"postCode": "10115",
"salary": "55.000 € - 70.000 €",
"datePosted": "2026-06-28",
"workFromHome": "2",
"textSnippet": "Wir suchen einen Data Engineer zur Verstärkung unseres Teams...",
"labels": ["Festanstellung", "Vollzeit"],
"skills": ["SQL", "Python", "Airflow"],
"section": "IT",
"isSponsored": false,
"description": "Full job description text, unabridged, as published on the job page...",
"descriptionHtml": "<p>Full job description text, unabridged, as published on the job page...</p>",
"employmentType": "FULL_TIME",
"validThrough": "2026-08-15",
"latitude": 52.5200,
"longitude": 13.4050,
"streetAddress": "Musterstraße 12",
"searchUrl": "https://www.stepstone.de/jobs/data-engineer?ws=Berlin",
"scrapedAt": "2026-07-02T10:30:00Z"
}

🗂️ Data fields

CategoryFields
Identityid, harmonisedId, title, url
CompanycompanyName, companyId, companyUrl, companyLogoUrl
Locationlocation, postCode, streetAddress*, latitude*, longitude*
Compensationsalary, unifiedSalary
TimingdatePosted, validThrough*
Job detailsdescription*, descriptionHtml*, employmentType*, workFromHome, textSnippet
Recruiter contactcontactEmail*, contactPhone*
Classificationlabels, topLabels, skills, section, partnership, isSponsored, isAnonymous, isHighlighted, isTopJob
MetasearchUrl, scrapedAt

* Added only when includeDetails is turned on. contactEmail and contactPhone are the recruiter contact details when the listing publishes them, ready for outreach. workFromHome is StepStone's remote-work indicator, returned as a short code (values such as "1" or "2"), signalling whether a role offers remote or home-office work. salary can be empty when the employer does not publish a figure, which is common on StepStone.

  • companyId - StepStone's internal identifier for the hiring company.
  • unifiedSalary - structured salary range (min, max, currency, period) when available.
  • labels / topLabels - badges shown on the listing (for example new, top job).
  • skills - skills highlighted on the listing when present.
  • partnership - details when a listing comes from a partner job board.
  • isAnonymous - true when the employer is not named on the listing.
  • isHighlighted / isTopJob - promotion flags for the listing.

🚀 Examples

Search jobs by keyword and city

{
"keyword": "data engineer",
"location": "Berlin",
"maxItems": 50
}

Pull full descriptions for every result

{
"keyword": "product manager",
"location": "München",
"includeDetails": true,
"maxItems": 100
}

Scrape a StepStone search URL you already built on the site

{
"searchUrls": ["https://www.stepstone.de/jobs/software-engineer/in-hamburg"],
"maxItems": 200
}

Track new postings for a role in a specific city

{
"keyword": "data engineer",
"location": "Berlin",
"includeDetails": true,
"maxItems": 30
}

Fast, listing-only run for a large keyword sweep

{
"keyword": "sales manager",
"location": "Frankfurt",
"includeDetails": false,
"maxItems": 500
}

💻 Integrations

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("{username}/stepstone-scraper").call(run_input={
"keyword": "data engineer",
"location": "Berlin",
"includeDetails": True,
"maxItems": 100,
})
for job in client.dataset(run["defaultDatasetId"]).iterate_items():
print(f"{job['title']} at {job['companyName']} ({job['location']}) - {job['salary']}")

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('{username}/stepstone-scraper').call({
keyword: 'product manager',
location: 'München',
includeDetails: true,
maxItems: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach(job => {
console.log(`${job.title} at ${job.companyName}: ${job.salary || 'salary not published'}`);
});

📈 Performance

MetricValue
Speed (listing only)Fastest mode, one page fetch per batch of results
Speed (with includeDetails)One extra page fetch per job, for the full description and exact location
Data freshnessReal-time, listings reflect what is live on StepStone.de at scrape time
Max items per run10,000

💡 Tips for best results

  1. Start with maxItems: 50 to confirm your keyword and location return the roles you expect, then scale up.
  2. Set location precisely. "Berlin" returns tighter results than a broader region name.
  3. Turn on includeDetails for analytics work. Salary benchmarking, skills extraction, and remote-work analysis all need the full job description, not just the search snippet.
  4. Turn off includeDetails for large keyword sweeps. When you only need title, company, and location across thousands of jobs, the listing-only run is faster.
  5. Paste a searchUrls entry when you already filtered on the site. Any filters you set on StepStone.de (contract type, seniority, radius) carry over automatically because the URL encodes them.

❓ FAQ

Do I need a StepStone account? No. The scraper extracts publicly available job listings. No login, no API key.

What's the difference between listing-only and full detail runs? Listing-only returns the fields shown on the search page. Turning on includeDetails adds the complete job description, employment type, and exact location by visiting each job page.

Can I search by keyword without building a URL myself? Yes. Set keyword and, optionally, location. The scraper builds the search for you.

Can I paste a search URL directly from StepStone.de? Yes. Copy the URL from your browser after running a search on StepStone.de and add it to searchUrls.

Why is salary sometimes empty? Not every employer publishes a salary range on StepStone. When it is missing on the source page, it is left empty rather than guessed.

Does it handle pagination automatically? Yes. The scraper keeps collecting jobs across result pages until it reaches maxItems.

📬 Support

Need something this scraper doesn't do yet? We ship features fast.

  • Feature requests go straight to our backlog
  • Enterprise needs? We do custom integrations

Response time: usually under 24 hours.