StepStone.de Scraper - Germany's Leading Job Board
Pricing
from $8.00 / 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 $8.00 / 1,000 job serp results
Rating
0.0
(0)
Developer

Alessandro Santamaria
Actor stats
0
Bookmarked
27
Total users
12
Monthly active users
2.8 hours
Issues response
a day 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.
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
- LLM Extraction: AI-powered extraction of requirements, benefits, and contact information
- Structured Output: Standardized
JobListingschema compatible with your data pipeline - Proxy Support: Built-in Apify proxy integration to avoid rate limits
- Lightweight: HTTP-only (CheerioCrawler) — no browser needed, fast and cost-efficient
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 |
|---|---|---|---|
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 | array | Filter by type (FULL_TIME, PART_TIME, FREELANCE, etc.) | [] |
experienceLevel | array | Filter by level (ENTRY_LEVEL, PROFESSIONAL, MANAGEMENT, etc.) | [] |
datePosted | string | Days since posted (1, 7, 30) | - |
sortBy | string | Sort order: date (newest first) or relevance | Default |
maxResultsPerQuery | integer | Max results per search keyword | 100 |
maxResults | integer | Total cap across all queries (0 = unlimited) | 0 |
includeJobDetails | boolean | Visit detail pages for full data | true |
llmApiKey | string | Groq/OpenRouter API key for AI extraction | - |
llmModel | string | LLM model (none, llama-3.1-8b-instant, mistral-small-3.1-24b-instruct) | none |
proxyConfiguration | object | Apify proxy settings | Datacenter |
Output
Each job listing follows the standardized schema:
{"id": "job-12345","title": "Senior Softwareentwickler (m/w/d)","company": "Tech GmbH","location": "Berlin","canton": "BE","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...","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": "https://...","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"}
Usage Examples
Example 1: Software Jobs in Berlin
{"searchQueries": ["Softwareentwickler"],"location": "Berlin","radius": 25,"employmentType": ["FULL_TIME"],"maxResultsPerQuery": 100,"includeJobDetails": true}
Example 2: Multiple Keywords — Nursing + Caregiving in Bayern
{"searchQueries": ["Krankenpfleger", "Altenpfleger", "Pflegefachkraft"],"bundesland": "BY","employmentType": ["FULL_TIME", "PART_TIME"],"datePosted": "7","maxResultsPerQuery": 50,"includeJobDetails": true,"llmApiKey": "gsk_xxxxx","llmModel": "llama-3.1-8b-instant"}
Results are deduplicated across keywords — a job appearing for both "Krankenpfleger" and "Pflegefachkraft" is only returned once.
Example 3: Remote Marketing Jobs (Last 30 Days)
{"searchQueries": ["Marketing Manager remote"],"datePosted": "30","maxResultsPerQuery": 100,"includeJobDetails": true}
Example 4: Entry-Level Jobs in Hamburg
{"searchQueries": ["Berufseinsteiger"],"location": "Hamburg","experienceLevel": ["ENTRY_LEVEL"],"datePosted": "7","maxResultsPerQuery": 50}
Example 5: 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 5: 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
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 |
LLM Extraction (Optional)
Enable AI-powered extraction for enhanced data quality:
-
Get an API key:
- Groq (fast, cheap): https://console.groq.com
- OpenRouter (more models): https://openrouter.ai
-
Configure extraction:
{"llmApiKey": "gsk_xxxxx","llmModel": "llama-3.1-8b-instant"} -
What it extracts:
- Job requirements (skills, qualifications, experience)
- Company benefits (perks, compensation, work culture)
- Contact information (name, salutation via LLM; email, phone, website via regex)
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~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}'
Performance & Pricing
Performance
- Search-only mode: ~100 jobs/minute (without detail pages)
- Full detail mode: ~20-30 jobs/minute (with detail pages)
- With LLM extraction: ~10-15 jobs/minute (depends on API speed)
Typical Compute Units (CU)
- 50 jobs (search only): ~0.002 CU
- 50 jobs (with details): ~0.01 CU
- 100 jobs (with details + LLM): ~0.03 CU
- 1,000 jobs (with details + LLM): ~0.3 CU
Technical Details
Architecture
- Platform: StepStone.de (server-rendered HTML)
- Crawler: CheerioCrawler (HTTP-only, no browser)
- Selectors: Data attributes and JSON-LD structured data
- Pagination: Automatic page-by-page crawling (25 jobs/page)
- Error Handling: Offline job detection (404), validation, retries
- Memory: 128-256 MB (vs 512-2048 MB with Playwright)
Data Quality
- Validation: Zod schema validation on all outputs
- Deduplication: Job IDs tracked to prevent duplicates
- Offline Detection: Flags expired/unavailable jobs
- 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 regex; names via LLM only (to avoid false positives)
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
- Use LLM extraction: For structured requirements and contact info
- Monitor costs: Check CU usage for large-scale scraping
- Respect rate limits: Use Apify's residential proxies
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
Jobs missing details
- Ensure
includeJobDetails: trueis set - Check if jobs are expired (they'll have
job_status: "offline") - Increase proxy quality if facing rate limits
LLM extraction not working
- Verify your API key is correct
- Check that
llmModelis not set to "none" - Ensure you have credits in your Groq/OpenRouter account
Support
For issues or questions:
- Apify Issues: Use the "Issues" tab on this actor's page
- Apify Community: https://community.apify.com
Part of the Santamaria Job Scrapers Suite - Professional-grade job data for the DACH region and beyond.
Other Scrapers
- jobscout24-ch: Swiss job market (11 cantons, 100,000+ jobs)
- stepstone-de: Germany (16 states, 200,000+ jobs) ← You are here
- jobs-ch: Switzerland's #1 job portal
- More coming soon for Austria, Netherlands, and other EU markets