GermanTechJobs Scraper
Pricing
from $1.20 / 1,000 results
GermanTechJobs Scraper
Scrape German tech job listings from germantechjobs.de. Filter by city, role, experience level, workplace, company size and type, tech stack, and language. Every job carries a salary range; full descriptions, perks, geo-coordinates, and engineering-practice signals available on request.
Pricing
from $1.20 / 1,000 results
Rating
0.0
(0)
Developer
Unfenced Group
Maintained by CommunityActor stats
1
Bookmarked
16
Total users
8
Monthly active users
13 days ago
Last modified
Categories
Share

Extract tech job listings from germantechjobs.de at scale, with the richest field set available: full descriptions, structured salary on every job, company profiles, precise geo-coordinates, perks, and per-employer engineering-practice signals. No API key required.
Why this scraper?
🎯 Built for Germany
A dedicated German tech-jobs scraper, not a global tool with a country dropdown. Salary parsing, location handling and currency (EUR) are tuned for germantechjobs.de.
💶 Salary on every listing
germantechjobs.de publishes a salary range on every job, so salaryMin, salaryMax, salaryPeriod and salaryCurrency are populated on 100% of results — rare for a job board.
📄 Complete job data
Job title, full description in plain text, HTML and Markdown, apply URL, publish date, and (on detail fetch) requirements, responsibilities, and the date the job first appeared.
🏢 Company profiles
Company name, size band, type, corporate website, and company page where the source publishes them.
📍 Precise location
Street address, city, postal code, region, and latitude/longitude, plus workplace type (on-site, hybrid, remote).
🧰 Perks & engineering signals
Human-readable perks (relocation, remote days, pension, visa sponsorship, and more) plus, on detail fetch, an engineering-practices block: version control, unit tests, code reviews, CI, Scrum, pair programming and more.
🔁 Repost tracking
Every record carries a repost flag and, once a job is seen again in a later run, its original publish date and URL. Turn on Skip Reposts for clean daily feeds.
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
keyword | string | (empty) | Keyword matched against title, company, tech category and stack. Empty returns all listings. |
city | string | (empty) | City name or category (e.g. Berlin, Munich). Case-insensitive partial match. |
jobType | string | All | Full-Time, Part-Time, Internship, or Contract. |
expLevel | string | All | Junior, Regular, Senior, or Lead. |
workplace | string | All | office (on-site), hybrid, or remote. |
language | string | All | Working language: German, English, or Dutch. |
techCategory | string | (empty) | Technology category (e.g. DevOps, Java, SAP, Data, Security). |
technologies | string | (empty) | A specific stack technology (e.g. Python, Kubernetes, React). |
companySize | string | All | Employer size band: <50, 50-200, 200-500, 500-1k, 1k-5k, 5k+. |
companyType | string | All | Product, Services, or Startup. |
minSalary | integer | 0 | Minimum published annual salary in EUR. 0 disables. |
visaSponsorshipOnly | boolean | false | Return only listings offering visa sponsorship. |
daysOld | integer | 0 | Only listings published within this many days. 0 disables. |
startUrls | array | [] | Specific germantechjobs.de job URLs to scrape. Overrides the search filters. |
skipReposts | boolean | false | Skip listings already returned in a previous run. Ideal for daily feeds. |
maxResults | integer | 5 | Maximum number of results after filtering. 0 for no limit. |
fetchDetails | boolean | false | Fetch each detail page for the full description, nice-to-have requirements, responsibilities, engineering practices, and first-listed / last-updated dates. |
Output schema
Fields the source does not publish for a given job are returned as null (or an empty array) rather than omitted.
Always present (from the search response)
| Field | Type | Description |
|---|---|---|
id | string | Unique listing ID. |
title | string | Job title. |
company | string | Employer name. |
companyId | string|null | Internal company reference (present for direct, non-partner employers). |
url | string | Canonical job detail URL. |
slug | string | URL slug of the listing. |
applyUrl | string|null | External application URL. |
companyPageUrl | string|null | Employer's profile page on germantechjobs.de, where published. |
companyWebsite | string|null | Employer's corporate website, where published. |
city | string|null | City the job is located in. |
cityCategory | string|null | Nearest major-city category the source groups the job under. |
postalCode | string|null | Postal code of the workplace. |
address | string|null | Street address of the workplace. |
latitude | number|null | Workplace latitude. |
longitude | number|null | Workplace longitude. |
workplace | string | office, hybrid, or remote. |
remoteScope | string|null | For remote roles, how far the remote arrangement extends: Germany only, Germany & EU, or Worldwide. null for non-remote roles. |
jobType | string | Full-Time, Part-Time, Internship, or Contract. |
expLevel | string | Junior, Regular, Senior, or Lead. |
language | string | Required working language. |
techCategory | string | Technology category. |
metaCategory | string|null | Higher-level category grouping. |
technologies | array | Technology stack tags. |
filterTags | array | Additional search/filter tags. |
annualSalaryFrom | number | Minimum published annual salary (EUR). |
annualSalaryTo | number | Maximum published annual salary (EUR). |
salaryMin | number | Alias of annualSalaryFrom. |
salaryMax | number | Alias of annualSalaryTo. |
salaryPeriod | string|null | Always yearly when a salary is present. |
salaryCurrency | string|null | Always EUR when a salary is present. |
hasSalary | boolean | Whether a salary range is published. |
companySize | string|null | Employer size band. |
companyType | string|null | Product, Services, or Startup. |
hasVisaSponsorship | boolean | Whether the employer offers visa sponsorship. |
candidateContactWay | string|null | How candidates apply (CompanyWebsite or Email). |
sourcePartner | string|null | Origin partner/board the listing was syndicated from, where applicable. |
isPartner | boolean | Whether this is a partner (featured) listing. |
isPaused | boolean | Whether the listing is currently paused by the employer. |
onBundesagentur | boolean | Whether the job is also listed on the German Federal Employment Agency. |
perks | array | Human-readable perks (e.g. Relocation support, 30 days vacation). |
perkKeys | array | Raw perk keys as returned by the source. |
publishDate | string|null | Publish date (YYYY-MM-DD, Europe/Berlin). |
publishDateISO | string|null | Publish date as a full ISO 8601 timestamp. |
isRepost | boolean | true if this job was already seen in a previous run. |
originalPublishDate | string|null | First-seen publish date when the job is a repost. |
originalUrl | string|null | First-seen URL when the job is a repost. |
contentHash | string | Stable hash of the listing's identity. |
source | string | Always germantechjobs.de. |
scrapedAt | string | ISO timestamp of when the record was scraped. |
With fetchDetails: true (from the detail page)
| Field | Type | Description |
|---|---|---|
firstListedAt | string|null | When the listing was first created on the source. |
lastUpdatedAt | string|null | When the listing was last updated on the source. |
description | string|null | Full job description, plain text. |
descriptionText | string|null | Full job description, plain text. |
descriptionHtml | string|null | Full job description as HTML. |
descriptionMarkdown | string|null | Full job description as Markdown. |
requirements | string|null | Must-have requirements. |
requirementsNice | string|null | Nice-to-have requirements (null when the employer lists none). |
responsibilities | string|null | Role responsibilities. |
engineeringPractices | object|null | Engineering-practice booleans (version control, unit tests, code reviews, CI, Scrum, pair programming, etc.). null when the employer disables the block. |
Example record
{"id": "6a33c0eb36e0fb2b95b8e5c0","title": "PHP Backend Engineer","company": "zixio GmbH","companyId": "6a1f7b904246d74901c8e211","url": "https://germantechjobs.de/jobs/zixio-GmbH-PHP-Backend-Engineer","applyUrl": "https://zixio.de/careers/php-backend-engineer","companyWebsite": "zixio.de","city": "Berlin","cityCategory": "Berlin","postalCode": "10115","address": "Chausseestraße 12","latitude": 52.5321,"longitude": 13.3847,"workplace": "hybrid","remoteScope": null,"jobType": "Full-Time","expLevel": "Senior","language": "German","techCategory": "PHP","technologies": ["PHP", "Laravel", "Symfony", "MySQL"],"annualSalaryFrom": 65000,"annualSalaryTo": 85000,"salaryMin": 65000,"salaryMax": 85000,"salaryPeriod": "yearly","salaryCurrency": "EUR","hasSalary": true,"companySize": "50-200","companyType": "Product","hasVisaSponsorship": false,"candidateContactWay": "CompanyWebsite","perks": ["Coaching", "Flexible working hours", "Hybrid work", "Individual training budget"],"publishDate": "2026-07-06","publishDateISO": "2026-07-06T07:01:09.238+00:00","isRepost": false,"originalPublishDate": null,"originalUrl": null,"requirementsNice": "Yii2, Laravel, Symfony or similar PHP frameworks","engineeringPractices": {"versionControl": true, "unitTests": true, "integrationTests": true,"staticCodeAnalysis": true, "codeReviews": true, "pairProgramming": true,"buildServer": true, "scrum": true, "testers": true, "timeTracking": false},"source": "germantechjobs.de","scrapedAt": "2026-07-10T05:23:18.364Z"}
Examples
Search for Python roles in Berlin:
{"keyword": "Python","city": "Berlin","maxResults": 50}
Senior DevOps jobs at product companies, full detail:
{"techCategory": "DevOps","expLevel": "Senior","companyType": "Product","fetchDetails": true}
Scrape specific listings by URL:
{"startUrls": [{ "url": "https://germantechjobs.de/jobs/zixio-GmbH-PHP-Backend-Engineer" }],"fetchDetails": true}
Daily feed of new jobs only:
{"daysOld": 1,"skipReposts": true,"maxResults": 0}
💰 Pricing
$1.50 per 1,000 results — you only pay for successfully retrieved listings. Failed retries are never charged.
| Results | Cost |
|---|---|
| 100 | ~$0.15 |
| 1,000 | ~$1.50 |
| 10,000 | ~$15.00 |
| 100,000 | ~$150.00 |
Flat-rate alternatives typically charge $30–$100/month regardless of usage.
Subscription tiers lower the rate further, down to $0.90 per 1,000 at the highest tier. Use the Maximum Results cap in the input to control your spend exactly.
Performance
| Run size | Typical time |
|---|---|
| 5 results | under 30 seconds |
| 100 results | under 1 minute |
| 1,000 results | 2–4 minutes (with fetchDetails) |
Without fetchDetails, the whole listing set is returned from a single request in seconds.
Known limitations
- Nice-to-have requirements and the engineering-practices block are only present when the employer fills them in; both are often absent.
companyId,companyWebsite,companyPageUrlandperksare published mainly for direct (non-partner) employers; syndicated partner listings usually leave them empty.isRepost,originalPublishDateandoriginalUrlpopulate from the second run onward, once a job has been seen before.- Full descriptions, requirements and responsibilities require
fetchDetails: true.
Technical details
- Source: germantechjobs.de — German tech job listings
- Push notifications: get new results delivered to Telegram, Discord, Slack, WhatsApp or any webhook the moment a scheduled run finds them
- Coverage: nationwide, filterable by city, role, level, stack, company and more
- Repost storage: cross-run key-value store, 90-day retention
- Retry: automatic retry on network errors with exponential backoff
Rate this actor
If this scraper does its job, a short review on the Reviews tab helps other users find it. Something not working? Open an issue on the Issues tab instead — issues get fixed.
Need a custom scraper?
Unfenced Group builds Apify actors for any website — for free.
If the site you need isn't in our portfolio yet, just ask. We scope, build, and publish it at no cost to you. You only pay for results — we absorb the compute and proxy costs ourselves. Same pay-per-result pricing, same quality, same standards as every actor in this portfolio.
Get in touch: www.unfencedgroup.nl