π YourFirm.de Job Scraper β Search German Job Listings π
Pricing
Pay per usage
π YourFirm.de Job Scraper β Search German Job Listings π
Scrape job listings from YourFirm.de by keyword, location, contract type, and more. Supports full pagination and filters. Requires a German proxy.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Muhammad Shamshad Aslam
Maintained by CommunityActor stats
5
Bookmarked
3
Total users
3
Monthly active users
19 days ago
Last modified
Share
YourFirm.de Job Scraper
Scrape job listings from YourFirm.de β one of Germany's leading job boards for the SME sector. Search by keyword and filter by location, contract type, working hours, and more.
What it does
- Searches YourFirm.de by any number of job title keywords (e.g.
Tiefbauer,Elektriker,Maurer), across any number of locations - Duplicate-free β the same posting found under several keywords is emitted once, deduplicated by YourFirm's own job id
- Scrapes everything by default β every page of every keyword. YourFirm serves 25 jobs per page, so set
maxPagesto 4 for roughly 100 jobs per keyword if you want to stop earlier - Scrapes all result pages automatically with smart early-stop (stops if pages return no results)
- Applies filters: location, radius, working hours, contract model, home office, and posting date
- Outputs structured data ready for CSV export, webhooks, or CRM import
Output fields
Every job includes the search-card fields:
| Field | Description |
|---|---|
jobId | Unique job ID on YourFirm.de (e.g. REG28901958, YF-46946) |
title | Full job title |
company | Employer name |
location | City or region (comma-separated when multi-location) |
url | Direct link to the job listing |
employmentType | Full-time / Part-time |
benefits | List of perks (e.g. company car, job bike, 30+ vacation days) |
postedDate | Date the listing went live (DD.MM.YYYY) |
refNo | Employer's internal reference number |
logoUrl | Company logo image URL |
keyword | The search keyword used |
With Fetch Full Job Details (fetchDetails) enabled, each job additionally includes:
| Field | Description |
|---|---|
description | Full job description (plain text) |
descriptionHtml | Full job description (original HTML) |
datePosted | Posting date (ISO) |
validThrough | Listing expiry date (ISO) |
employmentTypeDetail | Structured type, e.g. FULL_TIME |
companyLogo | High-resolution logo URL |
jobLocations | Structured locations: city, postal code, region, country, latitude/longitude β one entry per work location |
applyUrl | Employer's application URL (when the listing has one) |
Mined from the description
Employers bury their real contact details in the job text. With fetchDetails on, these are
pulled out into flat, single-value fields:
| Field | Description |
|---|---|
email | Application email. Taken from the structured application data when present, otherwise from the body text |
phone | Phone number found after Telefon: / Tel. / Fon |
companyWebsite | The employer's own site, normalised to its origin (e.g. https://iwakempten.de) |
addressStreet | Street and house number from the address block |
addressPostalCode | German 5-digit postcode |
addressCity | City, including any suffix (e.g. Kempten (AllgΓ€u)) |
responsibilities | Bulleted duties, when the heading is recognisable |
requirements | Bulleted requirements (Ihr Profil, Das sollten Sie mitbringen, β¦) |
benefits | Bulleted perks (Das bieten wir Ihnen, Wir bieten, β¦) |
{"email": "Bewerbung@iwa-kempten.de","phone": "0831 52283-0","companyWebsite": "https://iwakempten.de","addressStreet": "Ulrich-Mair-StraΓe 4","addressPostalCode": "87435","addressCity": "Kempten (AllgΓ€u)","requirements": ["Abgeschlossenes Hochschulstudium im Bauingenieurwesen", "..."],"benefits": ["Unbefristeter Arbeitsvertrag", "30 Urlaubstage und eine sehr gute Work Life Balance", "..."]}
responsibilities / requirements / benefits only fill when the employer used a heading the
actor recognises; German job ads vary a lot in wording. The full text is always available in
description / descriptionHtml.
Input parameters
| Parameter | Type | Description |
|---|---|---|
keywords | Array | Required. One or more job titles or skills. Each is searched separately and the results merged, deduplicated by job id. The run stops with an error if empty β there is no fallback keyword |
locations | Array | Cities or postcodes. Every keyword is searched in every location. Empty = all of Germany |
maxPages | Integer | Result pages to scrape per keyword. YourFirm serves 25 jobs per page, so 4 pages β 100 jobs per keyword. 0 (default) = every page, i.e. all the jobs there are |
maxEmptyPages | Integer | Stop after N consecutive empty pages (default: 2) |
location | String | City, postal code, or region (e.g. Berlin, 10115) |
perimeterRadius | Integer | Radius in km around location (e.g. 25) |
employmentType | String | vollzeit = Full-time, teilzeit = Part-time |
contractType | String | festanstellung, ausbildung, praktikum, freiberufler, etc. |
homeOfficeType | String | 100-homeoffice or hybrides-arbeiten |
onlyAdsOnlineForDays | Select | Online since: All time (0), Since yesterday (1), Last week (7), Last month (30) |
webhookUrl | String | Optional. POST each job to your URL as it's found β one request per job |
fetchDetails | Boolean | Visit each job page for the full description, structured locations, and apply URL/email (see detail fields above) |
proxyConfig | Object | Recommended: Apify Residential proxy with country=DE |
Proxy requirement
YourFirm.de is a German job board and may restrict access from non-German IP addresses. For reliable results, use Apify Residential Proxies with apifyProxyCountry: "DE" β this is pre-configured in the default input.
Use cases
- Recruitment agencies β monitor new job postings in specific trades
- Lead generation β find companies hiring in your target industry
- Market research β track hiring trends across German SMEs
- Job aggregators β feed listings into your own platform
Webhook delivery
Set webhookUrl and every job is POSTed to you the moment it's scraped β one HTTP request
per job, with that job as the entire JSON body. Nothing to unwrap, no array to split, and no
need to fetch the dataset afterwards. That's the shape Clay, n8n, Make and Zapier expect: each call
fires one workflow run with the job fields already at the top level.
POST https://your-endpoint.example/hookContent-Type: application/json{ "jobId": "1001", "title": "Tiefbauer (m/w/d)", "company": "Bau GmbH", ... }
The dataset is always written first, so a webhook can never cost you data. Failed calls
retry 3 times with backoff; if they still fail the job is logged and the run carries on, with a
summary at the end (Webhook: 12 item(s) delivered, 2 failedβ¦). A dead endpoint never fails
the run.
One request per job means a 1,000-job run makes 1,000 calls. If your endpoint rate-limits, keep the page count modest or make sure it responds quickly β the actor waits for each call.