StepStone.de Scraper - Germany's Leading Job Board
Pricing
from $2.50 / 1,000 job serp results
StepStone.de Scraper - Germany's Leading Job Board
Extract jobs from StepStone.de, Germany's largest job portal. Get job titles, companies, locations, descriptions, salary info & contact details. Supports search filters (location, Bundesland, employment type, experience level). Optional LLM extraction for requirements & benefits.
Pricing
from $2.50 / 1,000 job serp results
Rating
5.0
(1)
Developer
NanoScrape
Maintained by CommunityActor stats
5
Bookmarked
416
Total users
85
Monthly active users
9 days ago
Last modified
Categories
Share
StepStone.de Scraper - Germany's #1 Job Portal
Professional job scraper for StepStone.de, Germany's leading job board with over 200,000+ active job postings across all 16 federal states (Bundesländer) and all major industries.
Use with AI Agents (MCP)
Connect this actor to any MCP-compatible AI client: Claude Desktop, Claude.ai, Cursor, VS Code, LangChain, LlamaIndex, or custom agents.
Apify MCP server URL:
https://mcp.apify.com?tools=santamaria-automations/stepstone-de-scraper
Example prompt once connected:
"Use
stepstone-de-scraperto scrape job listings from stepstone de. Return results as a table."
Clients that support dynamic tool discovery (Claude.ai, VS Code) will receive the full input schema automatically via add-actor.
Features
- Comprehensive Coverage: All 16 German federal states (Bayern, Berlin, Hamburg, etc.)
- Advanced Filtering: Employment type, experience level, location radius, date posted
- Full Job Details: Optional deep scraping for complete job descriptions
- Structured Output: Standardized
JobListingschema compatible with your data pipeline - Multi-Query Search: Run multiple keywords in one execution with automatic deduplication
StepStone.de Overview
StepStone is Germany's #1 job portal, connecting millions of job seekers with employers:
- 200,000+ active job listings
- 16 federal states (Bundesländer)
- All industries and sectors
- Entry-level to executive positions
Input
| Field | Type | Description | Default |
|---|---|---|---|
searchUrls | array | Pre-built StepStone.de SERP URLs (search result pages). Paste browser search URLs to preserve every filter (sector, region, discipline, experience, skills). Paginated from page 1. Combines with searchQueries (results deduplicated by job ID). titleFilter still applies. | - |
directUrls | array | Direct StepStone.de job URLs to scrape (skips search) | - |
searchQueries | string[] | One or more search keywords. Each runs as a separate search, results deduplicated. | - |
searchQuery | string | Single search keyword (backward compatible, use searchQueries for multiple) | - |
location | string | City, region, or state name (e.g., "Berlin", "München", "Sachsen") | - |
radius | integer | Search radius in km (0, 5, 10, 25, 50, 100, 150, 200) | 25 |
bundesland | string | Federal state code (BY, BE, HH, NW, etc.), used when location is not set | - |
employmentType | string | Fleet-canonical filter: FULL_TIME, PART_TIME, INTERNSHIP, TRAINEE, TEMPORARY, CONTRACT. FULL_TIME/PART_TIME use StepStone wt= (Arbeitszeit); others use ct= (Anstellungsart). | - |
stepstoneContractTypes | array | StepStone-specific contract types: PERMANENT, WERKSTUDENT, AUSBILDUNG, HANDELSVERTRETER, ARBEITNEHMERUEBERLASSUNG, FRANCHISE. Multi-select, OR-combined with employmentType. | [] |
experienceLevel | string | Filter by level (ENTRY_LEVEL, PROFESSIONAL, MANAGEMENT, EXECUTIVE) | - |
postedWithinDays | integer | Only return jobs posted within the last N days (e.g., 1, 7, 30). 0 disables the age filter. Server-side where supported. Preferred over datePosted for programmatic use. | 0 |
datePosted | string | Legacy alias for age filter: 1, 7, or 30 days. Prefer postedWithinDays for new integrations. | - |
sortBy | string | Sort order: newest (recommended for scheduled runs) or relevance | newest |
titleFilter | string | Comma-separated title terms (case-insensitive substring OR-match). Filters SERP results by job title before detail fetch. Empty disables the filter. Example: "Sales Manager, Account Executive". | - |
maxResultsPerQuery | integer | Max results per search keyword. Total possible = maxResultsPerQuery x number of queries (deduplicated). 0 = unlimited per query. When titleFilter is active, counts post-filter results. | 100 |
maxResults | integer | Total cap across all queries (0 = unlimited) | 0 |
includeJobDetails | boolean | Visit detail pages for full data | true |
maxPagesFetched | integer | Safety cap on SERP pages fetched per query (Advanced). Each page returns up to 25 raw rows, so the default of 10 scans up to 250 rows per query before applying titleFilter and maxResultsPerQuery. Raise this when using a narrow titleFilter on a broad keyword. Sparse title matches mean many pages pass before enough results accumulate. Range: 1–100. | 10 |
Output
Each job listing follows the standardized schema:
{"id": "job-12345","title": "Senior Softwareentwickler (m/w/d)","company": "Tech GmbH","location": "Berlin","canton": "BE","state": "Berlin","state_code": "BE","post_code": "13359","work_from_home": "2","salary_text": "EUR 60,000 - 80,000 per year","employment_type": "full-time","workload_min": null,"workload_max": null,"remote_option": "remote","description_snippet": "Wir suchen einen erfahrenen Softwareentwickler...","description_full": "Full job description...","description_html": "<div><h2>Ihre Aufgaben</h2><ul><li>APIs entwickeln</li></ul></div>","description_md": "## Ihre Aufgaben\n\n- APIs entwickeln\n","requirements": ["5+ Jahre Erfahrung mit Java/Python","Kenntnisse in Cloud-Technologien (AWS, Azure)","Teamfähigkeit und selbstständiges Arbeiten"],"posted_at": "2026-01-15T10:00:00Z","expires_at": "2026-02-15T23:59:59Z","source_url": "https://www.stepstone.de/jobs/...","source_platform": "stepstone.de","contact_firstname": "Maria","contact_lastname": "Schmidt","contact_salutation": "Frau","contact_position": "Personalreferentin","contact_email": "jobs@tech-gmbh.de","contact_phone": "+49 30 12345678","apply_url": null,"company_url": "https://www.stepstone.de/cmp/de/Tech-GmbH-12345/jobs.html","company_website": "https://www.tech-gmbh.de","company_job_count": 15,"company_benefits": ["Homeoffice möglich","30 Tage Urlaub","Betriebliche Altersvorsorge"],"search_query": "Softwareentwickler","scraped_at": "2026-01-16T12:00:00Z"}
Field notes
state/state_code: German federal state of the job's primary (first listed) location, for exampleBerlin/BE.cantoncarries the same two-letter code and is kept for backward compatibility. Jobs whose first location is a place we cannot map unambiguously returnnullinstead of a guess. Jobs posted in several cities use the first city.requirements: bullet list taken from the "Ihr Profil" section of the detail page. Empty when the job ad has no such section orincludeJobDetailsis off.company_benefits: bullet list from the benefits section ("Wir bieten") of the detail page. Falls back to StepStone's benefit tags when the ad has no benefits text.company_url: StepStone company profile page. Taken from the detail page or search result, and built from the company name and ID when StepStone does not supply it.post_code: only present when StepStone publishes a postal code for the job.salary_min/salary_max/salary_period: only filled when the employer states a salary (structured data or an explicit range in the ad text). StepStone's own "Gehalt anzeigen" estimate needs a login and is never read, so most jobs have no salary.apply_url:nullfor most jobs. StepStone applications go through StepStone's own login-protected form, which does not expose the employer's application URL.work_from_home: StepStone's own flag:0= no home office mentioned,1= partial,2= home office possible (may be hybrid, not necessarily fully remote).remote_optionisremotewhen the flag is2.
Billing
- Every saved job is billed once as
job-serp-result. - A saved job that also has data from its detail page is additionally billed as
job-detail-result. - Jobs that are not saved are never billed: over the result cap, duplicates, filtered by
titleFilter, offline jobs, and failed dataset writes.
Usage Examples
Example 1: Title-filtered sales jobs across all 16 Bundeslaender (last 24h)
Searches German sales roles posted in the past 24 hours, nationwide. The titleFilter field ensures only postings whose title actually contains one of the searched roles are returned, eliminating broad keyword noise. Results are sorted newest-first.
{"searchQueries": ["Sales Manager", "Vertriebsmitarbeiter", "Account Executive"],"titleFilter": "Sales Manager, Vertriebsmitarbeiter, Account Executive, Sales, Vertrieb","employmentType": "FULL_TIME","datePosted": "1","sortBy": "newest","maxResults": 100,"maxResultsPerQuery": 34}
Sample output (Title filtered Sales jobs (24h), captured 2026-09-22): 77 items, 100% within last 24h, 76/77 FULL_TIME, 77/77 title-matched.
Example 2: Software Jobs in Berlin
{"searchQueries": ["Softwareentwickler"],"location": "Berlin","radius": 25,"employmentType": "FULL_TIME","maxResultsPerQuery": 100,"includeJobDetails": true}
Example 3: Multi-Keyword Search: Nursing + Caregiving in Bayern
{"searchQueries": ["Krankenpfleger", "Altenpfleger", "Pflegefachkraft"],"bundesland": "BY","employmentType": "FULL_TIME","datePosted": "7","maxResultsPerQuery": 50,"includeJobDetails": true}
Results are deduplicated across keywords: a job appearing for both "Krankenpfleger" and "Pflegefachkraft" is only returned once.
Example 4: Remote Marketing Jobs (Last 30 Days)
{"searchQueries": ["Marketing Manager remote"],"datePosted": "30","maxResultsPerQuery": 100,"includeJobDetails": true}
Example 5: Entry-Level Jobs in Hamburg
{"searchQueries": ["Berufseinsteiger"],"location": "Hamburg","experienceLevel": "ENTRY_LEVEL","datePosted": "7","maxResultsPerQuery": 50}
Example 6: Large-Scale Multi-Keyword Scrape with Total Cap
{"searchQueries": ["Data Scientist", "Machine Learning", "KI Engineer", "Data Analyst"],"location": "München","maxResultsPerQuery": 200,"maxResults": 500,"includeJobDetails": true}
Each keyword gets up to 200 results, but the total is capped at 500. The search_query field in each result shows which keyword found it.
Example 7: Advanced Filters via Paste-from-Browser (searchUrls)
Build a search on stepstone.de using its filter sidebar (sector, discipline, experience, skills), copy the resulting URL from your browser, and paste it into searchUrls. This captures every filter dimension the platform exposes without needing to know the underlying parameter names.
Scenario: Full-time software engineers in Berlin with 5+ years experience, newest first.
- Go to stepstone.de, search for "software engineer", set Location: Berlin, filter: Vollzeit, sort: Neueste zuerst.
- Copy the URL, e.g.
https://www.stepstone.de/jobs/software-engineer/in-berlin?wt=80001&ag=age_7&sort=2&action=sort_publish - Paste into
searchUrls:
{"searchUrls": ["https://www.stepstone.de/jobs/software-engineer/in-berlin?wt=80001&ag=age_7&sort=2&action=sort_publish"],"maxResultsPerQuery": 50,"includeJobDetails": true}
You can also combine searchUrls with searchQueries in the same run. Both sources share the same deduplication pool:
{"searchQueries": ["Data Scientist"],"searchUrls": ["https://www.stepstone.de/jobs/data-analyst"],"maxResults": 100,"includeJobDetails": true}
Example 8: Direct URL Mode (Status Checking)
{"directUrls": ["https://www.stepstone.de/stellenangebote--Software-Engineer--12345-inline.html","https://www.stepstone.de/stellenangebote--Data-Scientist--67890-inline.html"]}
Use direct URL mode to:
- Check if jobs are still online/active
- Update existing job data
- Monitor specific job postings
Employment Type and Contract Type Filters
StepStone uses two independent filter dimensions:
employmentType (fleet-canonical, single value):
| Value | StepStone param | German label |
|---|---|---|
FULL_TIME | wt=80001 | Vollzeit |
PART_TIME | wt=80002 | Teilzeit |
INTERNSHIP | ct=228 | Praktikum |
TRAINEE | ct=224 | Berufseinstieg / Trainee |
TEMPORARY | ct=223 | Befristeter Vertrag |
CONTRACT | ct=225 | Freie Mitarbeit / Projektmitarbeit |
stepstoneContractTypes (StepStone-specific, multi-select array):
| Value | StepStone param | German label |
|---|---|---|
PERMANENT | ct=222 | Feste Anstellung |
WERKSTUDENT | ct=229 | Studentenjobs / Werkstudent |
AUSBILDUNG | ct=226 | Ausbildung / Studium |
HANDELSVERTRETER | ct=232 | Handelsvertreter |
ARBEITNEHMERUEBERLASSUNG | ct=220 | Arbeitnehmeruberlassung |
FRANCHISE | ct=221 | Franchise |
Both fields are OR-combined: setting employmentType=INTERNSHIP and stepstoneContractTypes=["WERKSTUDENT"] returns jobs matching Praktikum OR Werkstudent.
Advanced Filters via searchUrls
The employmentType and stepstoneContractTypes fields cover the most common filter dimensions. For richer filtering (sectors/Branche, disciplines/Berufsfeld, experience/Berufserfahrung, languages/Sprache, skills/Fahigkeiten, commute radius by city), build the URL directly on stepstone.de using the filter sidebar, then paste the resulting URL into searchUrls.
Example: Software Engineer, full-time, Berlin, 5+ years experience
{"searchUrls": ["https://www.stepstone.de/jobs/software-engineer/in-berlin?wt=80001&radius=25&sort=2&action=sort_publish"],"maxResultsPerQuery": 50,"includeJobDetails": true}
Notes: the searchUrls field accepts any valid stepstone.de SERP URL. The actor strips any existing page/offset parameters and paginates from page 1. Any titleFilter you set still applies to URL-sourced results before detail fetch. searchUrls and searchQueries can be combined in one run; results are deduplicated by job ID across both sources. maxResultsPerQuery acts as the per-URL cap when searchUrls is used.
Location Filtering
You can filter by location in two ways:
locationparameter (recommended): Pass any city name, region, or state name directly (e.g.,"Berlin","München","Sachsen","Frankfurt am Main"). This is the most flexible option.bundeslandparameter: Pass a 2-letter state code (e.g.,"SN"for Sachsen). Only used whenlocationis not set.
If both location and bundesland are provided, location takes precedence.
German Federal States (Bundesländer)
The scraper supports all 16 German states via either the location or bundesland parameter:
| Code | State (German) | State (English) |
|---|---|---|
| BY | Bayern | Bavaria |
| BW | Baden-Württemberg | Baden-Württemberg |
| BE | Berlin | Berlin |
| BB | Brandenburg | Brandenburg |
| HB | Bremen | Bremen |
| HH | Hamburg | Hamburg |
| HE | Hessen | Hesse |
| MV | Mecklenburg-Vorpommern | Mecklenburg-Vorpommern |
| NI | Niedersachsen | Lower Saxony |
| NW | Nordrhein-Westfalen | North Rhine-Westphalia |
| RP | Rheinland-Pfalz | Rhineland-Palatinate |
| SL | Saarland | Saarland |
| SN | Sachsen | Saxony |
| ST | Sachsen-Anhalt | Saxony-Anhalt |
| SH | Schleswig-Holstein | Schleswig-Holstein |
| TH | Thüringen | Thuringia |
Via Apify Console
- Go to the actor page on Apify
- Configure input parameters
- Click "Start"
- Download results from the Dataset tab
Via API
curl -X POST "https://api.apify.com/v2/acts/santamaria-automations~stepstone-de-scraper/runs" \-H "Authorization: Bearer YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{"searchQueries": ["Softwareentwickler", "Backend Developer"],"location": "München","radius": 50,"maxResultsPerQuery": 100,"includeJobDetails": true}'
Data Quality
- Validation: Schema validation on all outputs
- Deduplication: Job IDs tracked to prevent duplicates across queries
- Offline Detection: Jobs whose detail page returns 404/410 ("page not found") are skipped, never saved as empty placeholder rows, and never billed. If any jobs were skipped, the run status message says how many (for example "49 jobs saved. 51 jobs skipped because StepStone returned 'page not found' for their detail pages (usually a temporary StepStone issue, try again later)."). The run log also warns as soon as more than 20% of detail pages fail.
- Date Parsing: Handles relative dates (e.g., "vor 3 Tagen")
- Location Mapping: Automatic Bundesland detection from cities
- Contact Extraction: Email, phone, and company website via pattern matching
Best Practices
- Use specific searches: Narrow queries yield better results
- Set reasonable limits: Start with 50-100 jobs for testing
- Enable job details: Full descriptions provide much richer data
- Monitor usage: Check your run stats for large-scale scraping
Troubleshooting
No jobs found
- Check if your search query is too specific
- Try broader location (e.g., state instead of city)
- Remove filters like employment type or experience level
- If using
titleFilteron a broad keyword, raisemaxPagesFetched(default 10 = 250 raw rows scanned). Sparse title matches may require scanning more SERP pages before enough results accumulate.
Jobs missing details
- Ensure
includeJobDetails: trueis set - Check the run status message: it lists jobs skipped because StepStone returned "page not found" for their detail pages. This is usually a temporary StepStone issue, so run again later.
- Jobs whose detail page could not be loaded at all are still saved with the data from the search results (no requirements or benefits) and are billed only as
job-serp-result.
Related Actors
Working across the German job market? These complement StepStone.de:
- Stellenmarkt.de Scraper: leading German national job board (peer generalist marketplace).
- Stellenanzeigen.de Scraper: German national job board (peer generalist).
- Arbeitsagentur.de Scraper: Germany's federal employment agency (Bundesagentur für Arbeit) public listings.
- Jobware.de Scraper: German IT/engineering specialist board.
- Meine Stadt Scraper: German local/regional jobs by city.
- Nicejob.de Scraper: German job board with company-culture focus.
- E-Fellows Scraper: German student/graduate jobs and internships.
DACH neighbours:
- Jobs.ch Scraper: Switzerland's #1 job site.
- Karriere.at Scraper: Austria's leading job board.
Global aggregators:
Enrich your job data
- Website Job Extractor: Extract jobs directly from company career pages
- Website Contact Extractor: Get emails and phone numbers from company websites
- Website Email & Phone Scraper: Fast email and phone extraction (no AI needed)
Support
For issues or questions:
- Issues tab
- Apify Community: https://community.apify.com
Part of the Santamaria Job Scrapers Suite. Professional-grade job data for the DACH region and beyond.