Stepstone Scraper: German Job Listings (stepstone.de) avatar

Stepstone Scraper: German Job Listings (stepstone.de)

Pricing

from $0.63 / 1,000 jobs

Go to Apify Store
Stepstone Scraper: German Job Listings (stepstone.de)

Stepstone Scraper: German Job Listings (stepstone.de)

Scrape stepstone.de job searches (keyword, city, radius, filters) exactly as the site lists them: every job, no suggested jobs mixed in, stops at the site's total. Title, company, locations, salary estimate, dates; optional full job page. Pay per result.

Pricing

from $0.63 / 1,000 jobs

Rating

0.0

(0)

Developer

Hexagone Data

Hexagone Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 hours ago

Last modified

Categories

Share

Stepstone Jobs Scraper — stepstone.de Job Offers (Germany)

Collect job offers from stepstone.de, Germany's large job board. Paste the search URLs you built on the site (keyword, city, radius, remote, contract type, language...) or type a keyword and a city, and get one clean record per job: title, company, all locations, Stepstone's salary estimate clearly marked as an estimate, posting and expiry dates, badges, and — optionally — the full description in sections, contract and work type, address and coordinates, benefits and how to apply.

Measured: exactly the jobs the site shows

On 30 October 2026 we ran this Actor on the search https://www.stepstone.de/jobs/steinmetz and compared its dataset with the site's own result pages, read just before and just after the run. The site showed 161 jobs for that search.

CheckedResult
Jobs of the search delivered161 of 161 — none missing, no duplicate
Suggested jobs mixed in0 — every row is a result of the search (Stepstone's "similar jobs" are skipped)
Salary as shown by the site130 of 161 jobs have one, like on the page; 31 sampled salaries all matched the page
Where it stopsAt the site's total: 161 jobs with maxItems set to 211, status done ("161 of 161 announced main results seen")
Time44 seconds (list only)

At today's price that run costs $0.15 (161 × $0.0009 + $0.005 start fee).

Why it matters: some tools read a different Stepstone interface that mixes suggested jobs into the results and does not go down to the last jobs of the list, so you pay for rows that are not your search and still miss real ones. This Actor reads the result pages you see on stepstone.de and tells you, per search, how many jobs it saw against the number the site announces.

Try it with 20 jobs

  1. Paste a search URL into Start URLs, e.g. https://www.stepstone.de/jobs/python.
  2. Keep Maximum number of jobs at 20 (the form's prefill).
  3. Start the Actor, then read the Run summary before exporting JSON, CSV or Excel.
{
"startUrls": [{"url": "https://www.stepstone.de/jobs/pflegefachkraft/in-hamburg?radius=50"}],
"maxItems": 20,
"includeDetails": false
}

In API calls, maxItems defaults to 500; 0 means no limit.

What to paste

InputExampleWhat you get
A search URL, filters includedhttps://www.stepstone.de/jobs/python?action=facet_selected;workFromHome;1&wfh=1Every job of that search, pages 1 to the last page the site announces. Filters are kept exactly as the site wrote them.
A city search with radiushttps://www.stepstone.de/jobs/elektriker/in-muenchen?radius=50Same; nearby jobs listed inside the pages are delivered with section: "regional".
A single job pagehttps://www.stepstone.de/stellenangebote--...--13850318-inline.htmlOne full record (job page + application type), charged as a job with details. If the URL no longer shows this job, nothing is delivered or charged (job_not_available).
Keyword + location + radius (no URL)python, Hamburg, 50Builds https://www.stepstone.de/jobs/python/in-hamburg?radius=50. Use a URL for any other filter.

Tips: to get English-language offers, add the site's language filter to your URL (&fdl=en); the site's own language field is not reliable, so the Actor does not output one. Fully remote jobs appear on Stepstone mainly as a location ("bundesweit, Home-Office"); the "Nur Home-Office" filter returned cards that all say "Teilweise Home-Office" when we checked. Jobs are deduplicated within a run by jobId, so overlapping searches never deliver the same job twice.

Suggestions are never delivered. Stepstone pads result pages with "similar jobs" from other searches — even an empty search shows 13 of them. They are not results of your search, so the Actor skips them and counts them in the summary.

Nearby jobs after the last page (includeNearbyJobs, off by default): some city searches list extra "in der Umgebung" jobs after the last announced page (Hamburg r50: 105 of them, measured 29 Oct 2026). Turn the option on to collect them too.

Output

FieldMeaning
jobId, harmonisedId, urlStepstone job number (text, deduplication key), global UUID, job page URL without tracking.
title, company, companyId, companyUrl, companyLogoAs shown on the card. company is null when Stepstone hides the employer — it is never guessed from the URL.
location, locationsLocation text as shown, and the same text split on ", " outside parentheses: location parts as shown, in order — usually cities, but also "Deutschland", "Home-Office", "Germany (remote)" or "bundesweit (Hamburg, Köln, …)" kept whole. Not a normalised city list.
workFromHomeThe remote badge shown: Teilweise Home-Office (site value "2"); null when the card shows none. The value "1" (Nur Home-Office) is mapped but was never seen on 2,809 offers. Any other value is delivered as-is with an UNKNOWN_VALUE warning.
salaryMin, salaryMax, salaryPeriod, salaryCurrency, salaryIsEstimateStepstone's salary estimate ("geschätzt für Vollzeit"), not a salary published by the employer: salaryIsEstimate is true on every salary we have seen (2,121 of 2,809 offers had one). null everywhere when no salary is shown. The period comes from the data (year, month, hour), because annual cards print only "/". Hourly estimates keep their decimals, as on the card ("18.09 - 20.27 /Stunde" gives 18.09 and 20.27).
postedAt, expiresAtISO 8601 UTC (the card's "vor 6 Tagen" is not reused).
snippet, labels, quickApplyCard summary, badges (Schnelle Bewerbung, Anschreiben nicht erforderlich), quick-apply flag.
isSponsored, isHighlighted, isTopJobFlags from the site's data (all false on the 2,809 offers we checked).
sectionmain (search result) or regional (nearby job).
sourceUrl, page, position, scrapedAt, detailsSourceProvenance; detailsSource is jobPage when the job page was read.
With includeDetailscontractType, workType (job page header), employmentType, industry (schema.org), address, latitude, longitude (when the page gives an address: 19 of 31 checked), descriptionSections (name, title, html, text — collapsed sections such as contact details included), description (all sections as text), benefits, applicationType, externalApply (true = apply on the company website).

Unknown values are null — never an empty string, false or 0 made up by the Actor.

Real output example

This is a real record produced by this Actor's code from the stepstone.de pages captured on 29 October 2026 (search https://www.stepstone.de/jobs/python, details on). Nothing was reordered or picked; only long texts (snippet, description and each section's html/text) are cut with "…" here. It shows the format, not today's offers.

{
"jobId": "13850318",
"harmonisedId": "c582c330-a53c-449e-99ac-874cfc102a2c",
"url": "https://www.stepstone.de/stellenangebote--Senior-Python-Backend-Engineer-AI-Focus-Karlsruhe-Koeln-Muenchen-Stuttgart-Erlangen-inovex-GmbH--13850318-inline.html",
"title": "Senior Python Backend Engineer* (AI Focus)",
"company": "inovex GmbH",
"companyId": "24494",
"companyUrl": "https://www.stepstone.de/cmp/de/inovex-gmbh-24494/jobs",
"companyLogo": "https://www.stepstone.de/upload_DE/logo/2/logoinovex-GmbH-24494DE-2305301051.gif",
"location": "Karlsruhe, Köln, München, Stuttgart, Erlangen",
"locations": [
"Karlsruhe",
"Köln",
"München",
"Stuttgart",
"Erlangen"
],
"workFromHome": "Teilweise Home-Office",
"salaryMin": 75000,
"salaryMax": 90000,
"salaryPeriod": "year",
"salaryCurrency": "EUR",
"salaryIsEstimate": true,
"postedAt": "2026-10-21T09:03:07.617Z",
"expiresAt": "2026-11-20T09:23:56.27Z",
"snippet": "inovex ist ein IT-Beratungsunternehmen mit 500 Expert:innen, das Unternehmen bei Digitalisierung und Agilisierung unters…",
"labels": [],
"quickApply": false,
"isSponsored": false,
"isHighlighted": false,
"isTopJob": false,
"section": "main",
"sourceUrl": "https://www.stepstone.de/jobs/python",
"page": 1,
"position": 2,
"scrapedAt": "2026-10-29T10:09:54+00:00",
"detailsSource": "jobPage",
"contractType": "Feste Anstellung",
"workType": "Homeoffice möglich, Vollzeit",
"employmentType": "FULL_TIME",
"industry": "IT, IT-Softwareentwicklung",
"address": null,
"latitude": null,
"longitude": null,
"descriptionSections": [
{
"name": "introduction",
"title": null,
"html": "<p>Seit 25 Jahren unterstützen wir bei inovex mit rund 500 IT-Expert:innen Unter…",
"text": "Seit 25 Jahren unterstützen wir bei inovex mit rund 500 IT-Expert:innen Unterneh…"
},
{
"name": "description",
"title": "Was du bei uns bewegen kannst",
"html": "<ul>\n\t<li>\n\t<p><strong>Agile Projektarbeit: </strong>In cross-funktionalen Teams…",
"text": "Agile Projektarbeit: In cross-funktionalen Teams setzt du Projekte für Kunden un…"
},
{
"name": "profile",
"title": "Wer gut zu uns passen würde",
"html": "<ul>\n\t<li><strong>Senior-Expertise mit AI-Fokus: </strong>Dein Fundament sind mi…",
"text": "Senior-Expertise mit AI-Fokus: Dein Fundament sind mindestens 7 Jahre exzellente…"
},
{
"name": "benefits",
"title": "Was wir dir bieten",
"html": "<ul>\n\t<li><strong>inovex Culture:</strong> Kommunikation auf Augenhöhe, flache H…",
"text": "inovex Culture: Kommunikation auf Augenhöhe, flache Hierarchien, Arbeiten in sel…"
},
{
"name": "additionalInformation",
"title": "Interessiert?",
"html": "<p><strong>Dann möchten wir dich kennenlernen!</strong><br>\nDas&nbsp;People &amp…",
"text": "Dann möchten wir dich kennenlernen!\n\nDas People & Culture Team ist dein Ansprech…"
}
],
"description": "Seit 25 Jahren unterstützen wir bei inovex mit rund 500 IT-Expert:innen Unternehmen bei der Digitalisierung und Agilisie…",
"benefits": [
"Kfz-/Reisezulage",
"Coaching-Angebote",
"Firmenwagen",
"Mitarbeiter-Laptop",
"Betriebsarzt im Unternehmen",
"Firmenhandy",
"Betriebliche Altersvorsorge",
"Mitarbeiterrabatte",
"Zusätzlicher Urlaubstag",
"Fitnessangebote",
"Flexible Arbeitszeiten",
"Gute Verkehrsanbindung",
"Homeoffice",
"Firmenevents- und Veranstaltungen",
"Vorsorgeuntersuchung",
"Parkplatz",
"Sabbatical",
"Sportaktivitäten",
"Studienförderung"
],
"applicationType": "ThirdParty",
"externalApply": true
}

Run summary

Every run leaves an OUTPUT record (JSON) and a readable Run summary (HTML, Output tab). For each start URL you see the status, the jobs delivered, the distinct jobs seen versus the number the site announced, the pages that failed, and plain-English warnings (anomalies).

StatusMeaning
doneEvery announced page was read and the main results seen match the site's announced count (nearby jobs count towards it only when includeNearbyJobs is on). On lists of 2+ pages a gap of up to 1.5 % is tolerated, because Stepstone reorders results while you page through them (19 of 2,129 measured); on a single-page list no gap is tolerated. The summary always prints "X of Y announced main results seen" and, separately, the nearby jobs.
partial_collectionYou did not get the full listing: a page failed after retries, came back empty, only repeated earlier jobs, the page count shrank during the run, or the gap is larger than normal reordering. Numbers are in the summary and an ANO_COUVERTURE warning.
stopped_at_site_limitThe site announces more jobs than its pages can show. Split the search (smaller radius, more filters, several cities).
stopped_at_limitYour maxItems or maximum charge was reached.
no_resultsThe site announced 0 results. Warning NO_RESULTS: the search is empty, the URL is wrong or the site is down.
no_new_jobsEvery job of this URL was already delivered by an earlier start URL.
job_not_availableA job page URL returned something else (a search listing, or another job): nothing is delivered or charged.
not_processedNot reached: your maxItems or maximum charge was reached first.
interruptedThe run stopped (time limit or abort) while this URL was being read; resurrect the run to continue it.
not_foundThe site answered 404: the search or job page does not exist (a removed job, a mistyped URL). Read once, nothing delivered or charged.
blocked_by_site, rate_limited, unrecognized_page, structure_changed, network_error, http_error, site_maintenance, internal_errorThe site refused every proxy session, limited the requests, served something that is not a job listing or a maintenance page, or the Actor hit an unexpected error. This is never reported as an empty search.

If no start URL delivers a job, the run fails with a message that names the cause. One empty URL next to URLs that deliver only adds a warning. With details on, job pages that could not be read are counted (detailErrors, warning ANO_DETAILS) and those jobs are delivered without detail fields. If 5 job pages in a row are refused by the site, the Actor stops reading job pages for the rest of the run and delivers the remaining jobs without details (detailsSkipped, warning DETAILS_STOPPED). The summary never says "all fine" in any of these cases.

Pricing

Pay per result, plus a start fee:

  • Job (apify-default-dataset-item): $0.0009 per delivered job — $0.90 per 1,000 jobs.
  • Job details (job-details): $0.0005 per delivered job whose job page was actually read (detailsSource: "jobPage") — only with includeDetails, or for a job page URL you pasted.
  • Actor start (apify-actor-start): $0.005 per run (once per GB of memory; the default is 1 GB).

Apify subscribers pay less automatically, on every event: 10% off on the Bronze plan, 20% on Silver, 30% on Gold and above.

RunPrice
20 jobs, list only$0.023
20 jobs, with details$0.033
1,000 jobs, list only$0.905
1,000 jobs, with details$1.405

These totals include the $0.005 start fee.

A job delivered without its details (job page refused, removed, or details stopped after 5 refusals in a row) costs only the job price. Searches that return nothing, suggestions and duplicates are not charged. The final message and the Run summary give the number of job-details events charged (detailsCharged).

Maximum charge per run: with details on, the Actor only reads a job page if both the job and its details still fit in your limit. When the limit no longer covers a job with its details, the run stops cleanly (stopped_at_limit, "maximum charge per run was reached") instead of delivering jobs without the details you asked for; a few cents may remain unspent when some job pages could not be read. If a run is migrated by the platform exactly between writing a batch of jobs and charging its details, those details are not charged (never charged twice).

Known limits

  • Access: stepstone.de refuses datacenter proxies; the default is Apify residential proxy, Germany. Some residential IPs are refused too; the Actor switches to a new IP on each refusal (up to 8 per request) and retries random server errors, then gives each page one last try after a pause. A page that still fails is skipped, counted and reported (partial_collection), never silently dropped. If you turn the proxy off or choose a non-residential group, the Actor respects it and says so in the final message and the Run summary (PROXY_SETTING).
  • Speed: 3 to 5 seconds between requests. A list page holds 25 jobs, so 1,000 jobs take about 40 pages (~3-4 minutes). With details, each job costs two more requests (job page + apply-button API): 500 jobs take about 70 minutes, 1,000 about 2.3 hours. The default run timeout is 2 hours (enough for the default 500 jobs with details, with margin); raise it, or lower maxItems, for bigger runs with details.
  • Completeness: judged on the main results only. Stepstone reorders results during paging; a full read of 2,129 jobs missed 19 (0.9 %). Beyond 1.5 % (any gap on a single-page list) the URL is reported partial_collection.
  • Salary: always Stepstone's estimate. The employer's own salary, when any, is only inside the description text. A few estimates give only a lower bound (salaryMax null).
  • Address: given by 19 of 31 job pages checked; sometimes only a city, sometimes in English ("80331 Munich, Germany"). Delivered as written.
  • Application link: externalApply says whether you apply on the company site; the external URL itself is behind a Stepstone redirect and is not delivered.
  • Not covered: logged-in content (salary behind "Gehalt anzeigen"), Stepstone sites of other countries.

Support

Check the Run summary first. For a problem you can reproduce, open an issue in the Actor's Issues tab with the run ID, the start URLs and what you expected versus what you got (never paste API tokens).

This Actor is maintained by Hexagone Data. It is not affiliated with, endorsed or sponsored by StepStone GmbH; "StepStone" and "Stepstone" are trademarks of their owner, used here only to describe the website the data comes from. It reads public job pages without logging in; use the data in line with the site's terms and applicable law (personal data in job descriptions, such as contact names, is delivered as published).