Stellenanzeigen.de Scraper - German Job Listings · $1.5/1K
Pricing
from $0.75 / 1,000 result items
Stellenanzeigen.de Scraper - German Job Listings · $1.5/1K
Extract job postings from stellenanzeigen.de (Germany) by keyword and state: title, employer, place, job type, salary range, posting date, URL, newest first.
Pricing
from $0.75 / 1,000 result items
Rating
0.0
(0)
Developer
Yusuke Suda
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Stellenanzeigen.de Scraper — German job listings by keyword and Bundesland
Extract job postings from stellenanzeigen.de (Germany) by keyword and state: title, employer, place, job type, salary range, posting date, URL, newest first.
Three rows from a real run
| Title | Employer | Location | Salary | Posted |
|---|---|---|---|---|
| Pflegefachkraft (w/m/d) - Pflege mit Herz | Ruhesitz Stein GmbH | Gefrees | 4050–4550 EUR per month | 2026-10-07T02:00:00+02:00 |
| Gelernte Pflegehilfskraft (m/w/d) - Kommen Sie in unser Team… | Argentum Lebenszentrum Ottobeuren | Ottobeuren | 3300–4075 EUR per month | 2026-10-07T02:00:00+02:00 |
| Gelernte Pflegehilfskraft (m/w/d) in Teilzeit - Werden Sie T… | AWO Seniorenresidenz Wörth | Wörth am Main | 3300–4050 EUR per month | 2026-10-07T02:00:00+02:00 |
A run with searchTerms: ["Pflege"], location: "Bayern" and maxItems: 100 on 2026-10-07 returned 100 postings in 18 seconds and would cost about $0.15 at the current price. Full fields for every row are shown below.
stellenanzeigen.de is one of Germany's long-running job boards, run by stellenanzeigen.de GmbH & Co. KG in Munich, with close to 30,000 postings online at any time. This Actor turns its search results into a clean table: the job title, the employer, the town, full- or part-time, the salary range where the posting shows one, and the day it went online.
Press Start. The defaults return the newest Pflege postings across Germany, with no configuration needed.
What a row looks like
{"title": "Pflegefachkraft (m/w/d) als Nachtwache für die Versorgung von Menschen mit Behinderung - Gestalte mit uns die Zukunft!","company": "Stiftung Innovation & Pflege - Herrenberg - GWW","location": "Sindelfingen","employment_type": "Full-time, Part-time","salary_min": 4050,"salary_max": 4550,"salary_currency": "EUR","salary_period": "month","posted_at": "2026-09-23T02:00:00+02:00","source_url": "https://www.stellenanzeigen.de/job/pflegefachkraft-m-w-d-als-nachtwache-fuer-die-versorgung-von-menschen-mit-behinderung-gestalte-mit-uns-die-zukunft-sindelfingen-sde-112249/","external_id": "SDE-112249"}
company is the employer as the site names it, often a care provider, a
public employer or a recruitment agency. Business names only: where the site marks the advertiser as a private person, or the name on the card is or contains a person's name (a sole trader's trade name), the field is left empty. Contact persons, email addresses and
phone numbers are never collected. The site's own data carries the application
email for every posting, and this Actor does not read it. It also leaves out
the office postcode and map point, and never opens the job text. Where the
site hides the employer ("Unternehmen aus dem Bereich: …"), company is
empty.
A posting in several places lists each town once. A posting for all of
Germany says Deutschland, and those postings also come up in a Bundesland
search, because the site includes them there.
Every row also carries source_site and scraped_at.
| Field | What it holds | How often it is filled |
|---|---|---|
title, location | Job title; Location | Always |
company | Employer | About 7 in 10 (74 of 100). Empty where the site hides the employer or the name is a person's |
employment_type | Employment type | Always |
salary_min, salary_max, salary_currency | Salary from; Salary to; Salary currency | About 4 in 10 (45 of 100) |
salary_period | Salary period | About 4 in 10 (45 of 100) |
posted_at | Posted | Always |
source_url, external_id | Posting URL; Posting ID | Always |
application_deadline, company_url, company_rating, workplace_postal_code, workplace_address, latitude, longitude | Catalogue-wide columns; stellenanzeigen.de's list does not show them | Always empty here |
Fill rates are from a 100-row run on 6 October 2026.
Only what you searched for
Below its matches, stellenanzeigen.de shows "ähnliche Jobs": similar postings that did not match your keyword. Under "Pflege" that can mean an export clerk or a sales manager. This Actor stops where the matches end, and the count it reports is the site's count of matches. So a search that finds nothing returns no rows, not a page of similar jobs.
When a posting went online
posted_at is the day the posting shows on the site, on German time. Many
postings carry only the day, which appears as midnight German time, or 02:00
in summer when the site stamps midnight UTC. So postedAfter compares by day.
The list is read newest first, so a run with postedAfter stops as soon as the
postings are older. A posting the employer published again shows the new day.
What people use it for
Tracking which employers in a Land are hiring, for a trade or a skill, week by week. Salary benchmarks from the ranges employers publish (about six in ten care postings show one). Feeding a job board or a newsletter with German openings in a niche. Labour-market research that needs structured rows, not a page of links.
Input
| Field | What it does |
|---|---|
searchTerms | Keywords, e.g. Pflege, Python, Buchhaltung. Each keyword is its own search. Leave empty for everything. |
location | A Bundesland: Bayern, Nordrhein-Westfalen (or NRW), Berlin, Baden-Württemberg and so on. Or one of the site's own place ids, as its search URL shows them after locationIds=, e.g. M-DE-1494 for Stuttgart, which the site widens by 30 km. Leave empty for all of Germany. |
postedAfter | Only keep postings from this day on, e.g. 2026-09-20. Handy for daily runs that should return just what is new. |
sinceDays | The same, as a rolling window: 1 keeps yesterday and today, 7 the last week. Set it once on a scheduled task and never edit the date again. |
maxItems | Hard stop, so your bill is predictable. |
proxyConfiguration | Off by default. Most runs do not need one. |
Town names are not accepted as text, because the site searches by its own place ids and its place lookup is not open to crawlers. A Bundesland or an id from the site's URL always works.
How much one run returns
stellenanzeigen.de serves 25 postings per page and at most 10,000 per search (400 pages). A search that reaches that limit is reported as capped, not as complete. To go beyond it, split by keyword or Bundesland across runs.
The site does not keep a fixed order for postings from the same day between
one page and the next. A posting can come back on two pages, and this Actor
removes the repeat, so a long crawl can miss a few postings from the same day.
A daily run with postedAfter — or sinceDays: 1 on a scheduled task — is
the reliable way to catch everything new.
Pricing
$1.50 per 1,000 listings, dropping to $0.75 per 1,000 on higher Apify plans, plus $0.005 each time a run starts. Platform usage is not passed on to you.
You are charged for rows you actually receive. If you set a maximum charge for the run, it stops cleanly at that limit instead of overshooting it.
Daily new listings
Make a task from this Actor, set sinceDays to 1 with your search, and
schedule it each morning. Every run then returns only what was posted since
the previous day, in the same columns as a full run. The list is read newest
first, so the run stops once the postings are older than the cutoff. A daily
task for Pflege in Bayern returned 79 new postings on 29 September 2026 and
left out 67 older ones.
How this compares
Another stellenanzeigen.de Actor is on the Store. Checked on 2 October 2026 from its Store description and input form:
- Results page only. It can open each posting for its full details. This Actor never opens a posting: it reads the search results only.
- No personal data. It advertises contact information. This Actor collects
no contact person, e-mail address or phone number;
companyis the employer's name only. - One price per row. It charges a separate event for each posting it opens, on top of the listed result. Here every row costs the same, and you pay only for rows you receive.
- Daily new postings. It has a filter by posting age in days. Here
sinceDaysis a rolling window you set once on a scheduled task.
Scope and limits
Public listings only, from the search results pages (/suche/), which
stellenanzeigen.de's robots.txt allows. The paths it disallows (place
suggestions, job views, print pages, application flows, tracking) are never
requested, and neither is the job text. remote, workload, apply_url and
categories ship always empty, so that one parser works across every job
Actor here.
Every page is checked against what you asked for: the keyword, the place, the newest-first order and the page number. The site answers an unknown place id with postings from all of Germany. When a place id is unknown, or a Bundesland comes back under another name, the run fails rather than return rows you did not ask for and charge you for them.
If stellenanzeigen.de changes its page structure, the run goes red. It does not return zero rows and report success. A silent scraper is worse than a broken one, because you find out weeks later.
A run that is blocked or cut short partway also goes red, even though the rows it did collect are in the dataset and yours to keep. Red here means "this is not the complete answer", not "you lost the data". On a schedule, a run that quietly came back short is the thing you most need to hear about.
Every run also publishes the site's own result count next to the rows it delivered, so you can see "100 rows of 434 the site reports" without going back to the site to check. That number is what the site says, not a promise about what one run returns.
Same shape, other sites
This Actor shares its output shape with the Jobware Scraper (Germany), the jobs.at Scraper (Austria), the jobs.ch and JobScout24 Scrapers (Switzerland) and the Jobindex Scraper (Denmark). A parser you write for one keeps working on the others, and on the countries added next.
Support
Open an issue on this Actor with the run ID and your input. Answered within one business day.