GermanTechJobs Scraper avatar

GermanTechJobs Scraper

Pricing

from $1.20 / 1,000 results

Go to Apify Store
GermanTechJobs Scraper

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

Unfenced Group

Maintained by Community

Actor stats

1

Bookmarked

16

Total users

8

Monthly active users

13 days ago

Last modified

Share

GermanTechJobs Scraper

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

ParameterTypeDefaultDescription
keywordstring(empty)Keyword matched against title, company, tech category and stack. Empty returns all listings.
citystring(empty)City name or category (e.g. Berlin, Munich). Case-insensitive partial match.
jobTypestringAllFull-Time, Part-Time, Internship, or Contract.
expLevelstringAllJunior, Regular, Senior, or Lead.
workplacestringAlloffice (on-site), hybrid, or remote.
languagestringAllWorking language: German, English, or Dutch.
techCategorystring(empty)Technology category (e.g. DevOps, Java, SAP, Data, Security).
technologiesstring(empty)A specific stack technology (e.g. Python, Kubernetes, React).
companySizestringAllEmployer size band: <50, 50-200, 200-500, 500-1k, 1k-5k, 5k+.
companyTypestringAllProduct, Services, or Startup.
minSalaryinteger0Minimum published annual salary in EUR. 0 disables.
visaSponsorshipOnlybooleanfalseReturn only listings offering visa sponsorship.
daysOldinteger0Only listings published within this many days. 0 disables.
startUrlsarray[]Specific germantechjobs.de job URLs to scrape. Overrides the search filters.
skipRepostsbooleanfalseSkip listings already returned in a previous run. Ideal for daily feeds.
maxResultsinteger5Maximum number of results after filtering. 0 for no limit.
fetchDetailsbooleanfalseFetch 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)

FieldTypeDescription
idstringUnique listing ID.
titlestringJob title.
companystringEmployer name.
companyIdstring|nullInternal company reference (present for direct, non-partner employers).
urlstringCanonical job detail URL.
slugstringURL slug of the listing.
applyUrlstring|nullExternal application URL.
companyPageUrlstring|nullEmployer's profile page on germantechjobs.de, where published.
companyWebsitestring|nullEmployer's corporate website, where published.
citystring|nullCity the job is located in.
cityCategorystring|nullNearest major-city category the source groups the job under.
postalCodestring|nullPostal code of the workplace.
addressstring|nullStreet address of the workplace.
latitudenumber|nullWorkplace latitude.
longitudenumber|nullWorkplace longitude.
workplacestringoffice, hybrid, or remote.
remoteScopestring|nullFor remote roles, how far the remote arrangement extends: Germany only, Germany & EU, or Worldwide. null for non-remote roles.
jobTypestringFull-Time, Part-Time, Internship, or Contract.
expLevelstringJunior, Regular, Senior, or Lead.
languagestringRequired working language.
techCategorystringTechnology category.
metaCategorystring|nullHigher-level category grouping.
technologiesarrayTechnology stack tags.
filterTagsarrayAdditional search/filter tags.
annualSalaryFromnumberMinimum published annual salary (EUR).
annualSalaryTonumberMaximum published annual salary (EUR).
salaryMinnumberAlias of annualSalaryFrom.
salaryMaxnumberAlias of annualSalaryTo.
salaryPeriodstring|nullAlways yearly when a salary is present.
salaryCurrencystring|nullAlways EUR when a salary is present.
hasSalarybooleanWhether a salary range is published.
companySizestring|nullEmployer size band.
companyTypestring|nullProduct, Services, or Startup.
hasVisaSponsorshipbooleanWhether the employer offers visa sponsorship.
candidateContactWaystring|nullHow candidates apply (CompanyWebsite or Email).
sourcePartnerstring|nullOrigin partner/board the listing was syndicated from, where applicable.
isPartnerbooleanWhether this is a partner (featured) listing.
isPausedbooleanWhether the listing is currently paused by the employer.
onBundesagenturbooleanWhether the job is also listed on the German Federal Employment Agency.
perksarrayHuman-readable perks (e.g. Relocation support, 30 days vacation).
perkKeysarrayRaw perk keys as returned by the source.
publishDatestring|nullPublish date (YYYY-MM-DD, Europe/Berlin).
publishDateISOstring|nullPublish date as a full ISO 8601 timestamp.
isRepostbooleantrue if this job was already seen in a previous run.
originalPublishDatestring|nullFirst-seen publish date when the job is a repost.
originalUrlstring|nullFirst-seen URL when the job is a repost.
contentHashstringStable hash of the listing's identity.
sourcestringAlways germantechjobs.de.
scrapedAtstringISO timestamp of when the record was scraped.

With fetchDetails: true (from the detail page)

FieldTypeDescription
firstListedAtstring|nullWhen the listing was first created on the source.
lastUpdatedAtstring|nullWhen the listing was last updated on the source.
descriptionstring|nullFull job description, plain text.
descriptionTextstring|nullFull job description, plain text.
descriptionHtmlstring|nullFull job description as HTML.
descriptionMarkdownstring|nullFull job description as Markdown.
requirementsstring|nullMust-have requirements.
requirementsNicestring|nullNice-to-have requirements (null when the employer lists none).
responsibilitiesstring|nullRole responsibilities.
engineeringPracticesobject|nullEngineering-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.

ResultsCost
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 sizeTypical time
5 resultsunder 30 seconds
100 resultsunder 1 minute
1,000 results2–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, companyPageUrl and perks are published mainly for direct (non-partner) employers; syndicated partner listings usually leave them empty.
  • isRepost, originalPublishDate and originalUrl populate 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