Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 

Repository files navigation

Germantechjobs Jobs Scraper

Germantechjobs Jobs Scraper collects structured German tech job listings and turns them into clean, analysis-ready records. Use it to centralize openings, compare roles across cities, and keep an always-current dataset for reporting, alerts, or market research. It’s built for repeatable extraction of German tech jobs data with consistent fields and predictable outputs.

Bitbash Banner

Telegram   WhatsApp   Gmail   Website

Created by Bitbash, built to showcase our approach to Scraping and Automation!
If you are looking for germantechjobs-jobs-scraper you've just found your team — Let’s Chat. 👆👆

Introduction

This project extracts job listings and key metadata from a German tech-focused job platform and normalizes the results into a structured dataset. It solves the problem of manually tracking fast-changing job boards by automating discovery and standardizing job details for downstream use. It’s for developers, analysts, recruiters, and job seekers who need reliable German tech jobs listings for monitoring, insights, or automation.

German Tech Hiring Dataset Builder

  • Collects technology-focused roles across Germany (engineering, DevOps, web, backend, frontend, and more).
  • Captures both job-level and company-level metadata to support filtering and segmentation.
  • Supports location coordinates for mapping, regional analysis, and geo-based alerts.
  • Preserves role requirements and tags (skills, categories, technologies) for trend analysis.
  • Produces a consistent dataset format for exports, dashboards, and pipelines.

Features

Feature Description
Query-based job discovery Pull listings using job titles, skill keywords, or category filters to target relevant roles.
Rich job metadata extraction Captures title, job type, experience level, workplace mode, visa sponsorship, and language.
Company profile fields Extracts company name, size, type, website, branding, and contact method.
Location intelligence Stores city category, address fields, and latitude/longitude for mapping and geo insights.
Salary range normalization Collects annual salary ranges when available for compensation benchmarking.
Tag and technology parsing Extracts technologies and filter tags for skill-demand and role clustering analysis.
Operational flags Keeps partner/paused/status flags to support de-duplication and lifecycle tracking.
Export-ready outputs Produces structured records suitable for JSON/CSV pipelines and analytics workflows.

What Data This Scraper Extracts

Field Name Field Description
_id Unique record identifier for the listing.
jobUrl Job listing path or slug used to build/open the job page.
name Job title as shown on the listing.
company Company name associated with the job.
companyId Unique identifier referencing the company record/source.
companyWebsiteLink Company website link or short URL if provided.
candidateContactWay Preferred contact method (e.g., Email).
workplace Workplace mode such as remote, onsite, or hybrid.
remoteType Remote scope indicator (e.g., country-limited) when available.
jobType Employment type (e.g., Full-Time).
expLevel Experience level (e.g., Junior, Regular, Senior).
language Working language for the role (e.g., English, German).
hasVisaSponsorship Whether visa sponsorship is offered when provided.
annualSalaryFrom Salary lower bound (annual), when present.
annualSalaryTo Salary upper bound (annual), when present.
techCategory Primary tech category (e.g., PHP) used for grouping/filtering.
technologies List of technologies mentioned for the role.
filterTags Tag list for role filtering (skills, domains, stacks).
perkKeys List of perks/benefits as standardized keys.
offerStockOrBonus Whether stock/bonus is mentioned (boolean when present).
tier Listing tier level (e.g., basic).
activeFrom Activation/publish date-time for the job listing.
isPartner Partner listing flag when present.
isPaused Whether the listing is paused/inactive when present.
hasLangCheck Language-check/status flag when present.
cityCategory City/region grouping label (e.g., Berlin).
actualCity City name derived from the listing.
address Street address if available.
postalCode Postal/ZIP code if available.
latitude Latitude coordinate for mapping.
longitude Longitude coordinate for mapping.
companyType Company type/category (e.g., Services).
companySize Company size band (e.g., <50).
logoImg Company logo filename or reference if available.
disableMethodology Platform-specific operational flag if present.
ba Additional listing flag/status value when provided.

Example Output

[
  {
    "_id": "66d9bc6dc2c192daf765eb42",
    "jobUrl": "keySquare-Network-UG--CoKG-Backend-Developer-mfd-with-a-Focus-on-PHP",
    "isPartner": false,
    "isPaused": false,
    "hasLangCheck": true,
    "companyId": "66d9b4edba8d3810ef51a6b3",
    "longitude": 13.41924219,
    "latitude": 52.5487464,
    "cityCategory": "Berlin",
    "tier": "basic",
    "logoImg": "keysquare-network-ug--cokg-logo-1725543991525.jpg",
    "activeFrom": "2024-09-10T00:00:00.000+02:00",
    "companyWebsiteLink": "visi.bi",
    "candidateContactWay": "Email",
    "workplace": "remote",
    "company": "keySquare Network UG & Co.KG",
    "address": "Wichertstr. 16/17",
    "actualCity": "Berlin",
    "postalCode": "10439",
    "companyType": "Services",
    "companySize": "<50",
    "hasVisaSponsorship": "No",
    "language": "English",
    "perkKeys": [
      "freshfruits",
      "weeksvacation4",
      "cooloffice",
      "flexiblework",
      "petfriendly",
      "remote2day",
      "hybridwork",
      "coffee",
      "maternity",
      "quietoffice",
      "sweets",
      "parttime",
      "remotefull"
    ],
    "offerStockOrBonus": false,
    "name": "Backend Developer (m/f/d) with a Focus on PHP",
    "jobType": "Full-Time",
    "expLevel": "Regular",
    "annualSalaryFrom": 40000,
    "annualSalaryTo": 60000,
    "techCategory": "PHP",
    "technologies": ["PHP", "MySQL", "JavaScript", "CSS", "WordPress"],
    "filterTags": ["Backend", "CSS", "Frontend", "JavaScript", "MySQL", "PHP", "Web", "WordPress"],
    "disableMethodology": true,
    "remoteType": "onlycountry",
    "ba": "Yes"
  }
]

Directory Structure Tree

Germantechjobs Jobs Scraper/
├── src/
│   ├── main.py
│   ├── runner.py
│   ├── http/
│   │   ├── client.py
│   │   └── retry.py
│   ├── extractors/
│   │   ├── jobs_extractor.py
│   │   ├── company_extractor.py
│   │   ├── salary_parser.py
│   │   ├── tags_parser.py
│   │   └── geo_parser.py
│   ├── normalize/
│   │   ├── schema.py
│   │   ├── validators.py
│   │   └── transformers.py
│   ├── outputs/
│   │   ├── exporters.py
│   │   ├── dataset_writer.py
│   │   └── dedupe.py
│   ├── config/
│   │   ├── defaults.json
│   │   ├── settings.example.json
│   │   └── logging.yaml
│   └── utils/
│       ├── dates.py
│       ├── text.py
│       └── metrics.py
├── tests/
│   ├── test_salary_parser.py
│   ├── test_tags_parser.py
│   ├── test_normalizers.py
│   └── test_dedupe.py
├── data/
│   ├── inputs.sample.json
│   └── sample_output.json
├── scripts/
│   ├── run_local.sh
│   └── export_csv.py
├── .env.example
├── .gitignore
├── requirements.txt
├── pyproject.toml
├── LICENSE
└── README.md

Use Cases

  • Job seekers use it to aggregate German tech jobs, so they can filter roles by stack, city, and remote type in one place.
  • Recruiters use it to monitor new listings and company activity, so they can identify hiring signals and outreach targets faster.
  • Market analysts use it to track salary ranges and skill demand, so they can build compensation and trend reports by quarter.
  • Engineering managers use it to benchmark role requirements, so they can write competitive job descriptions and set realistic hiring bars.
  • Data teams use it to feed dashboards and alerts, so they can automate weekly updates without manual scraping work.

FAQs

How do I target specific roles or skills? Use query parameters that represent job titles or skill keywords (e.g., "DevOps", "React", "Backend"). The extractor then focuses collection around those filters and returns listings with consistent tags and technology arrays for easier post-filtering.

What if some listings don’t include salary or exact address fields? The dataset keeps missing fields empty while preserving the record. Salary ranges and address fields are optional by nature; you can still use tags, city category, workplace mode, and technologies to analyze roles reliably.

How do I avoid duplicates across repeated runs? The project includes a de-duplication layer that keys off stable identifiers like job URL/slug plus company ID and title. This allows incremental refresh runs while keeping a single canonical record per listing.

Does it collect personal data? It focuses on job and company listing information intended for public job posts. If you extend it, avoid collecting personal data unless you have a legitimate purpose and a compliant legal basis under applicable privacy laws.


Performance Benchmarks and Results

Primary Metric: Average extraction speed of 35–70 job records per minute on typical query runs, depending on filters and response size.

Reliability Metric: 96–99% successful fetch rate across repeated runs when retries are enabled and network conditions are stable.

Efficiency Metric: Sustains steady throughput with bounded concurrency, averaging 250–450 MB RAM usage during medium-sized runs (5k–15k records).

Quality Metric: 92–97% field completeness for core fields (title, company, workplace, city category, technologies), with optional fields (salary/address) varying by listing availability.

Book a Call Watch on YouTube

Review 1

"Bitbash is a top-tier automation partner, innovative, reliable, and dedicated to delivering real results every time."

Nathan Pennington
Marketer
★★★★★

Review 2

"Bitbash delivers outstanding quality, speed, and professionalism, truly a team you can rely on."

Eliza
SEO Affiliate Expert
★★★★★

Review 3

"Exceptional results, clear communication, and flawless delivery.
Bitbash nailed it."

Syed
Digital Strategist
★★★★★

Releases

Packages

Contributors