Germany Visa-Sponsored Jobs
Pricing
from $5.00 / 1,000 enriched job results
Germany Visa-Sponsored Jobs
Find Germany jobs that sponsor work visas (Blue Card, Skilled Worker, ICT). Pulls the federal Bundesagentur Jobboerse, enriches with full descriptions, classifies visa-sponsorship likelihood (regex + opt-in LLM tie-breaker), and dedupes across runs. For relocation services and intl. job seekers.
Pricing
from $5.00 / 1,000 enriched job results
Rating
0.0
(0)
Developer
CG Nguyễn
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
germany-visa-jobs — German jobs that actually sponsor work visas, as a JSON feed
The Bundesagentur federal job board, filtered for visa sponsorship. For relocation consultants, expat engineers, and AI agents who can't ask candidates "but will they sponsor?" one more time.
Searches Germany's federal job board (Bundesagentur für Arbeit Jobboerse, ~1.6M live listings) and emits structured JSON with a visa-sponsorship classifier stamped on every row: confirmed | likely | unlikely | unknown. Pay-per-result.
Why this exists
The federal Bundesagentur board has every German job opening worth looking at — but it has no "sponsors visa" filter, no salary band, and no English search. So every Tier-3 country candidate, every relocation consultant, every AI job-search agent ends up doing the same thing: fetch a listing, eyeball the description for "visa sponsorship" / "Aufenthaltstitel" / "Blue Card", repeat 200 times.
This actor closes that gap. One API call, structured JSON, visa status pre-classified.
It is not a job board. There's no UI. You bring the automation; we bring the typed, deduplicated, classified data.
Who it's for
| Persona | Use case |
|---|---|
| Relocation consultancy | Daily pull of confirmed + likely Berlin SWE roles into a Notion DB. Replace ~3 hrs/week per junior consultant. |
| Expat job-mover | Pipe new confirmed-status Blue Card roles for your stack into a personal Telegram bot. Apply within hours of listing. |
| AI job-search agent (MCP) | Apify Actors are auto-exposed as MCP tools. Claude / / Codex agents call this when a user asks about visa-sponsoring German jobs. Zero integration work. |
| Recruitment SaaS | Source side of a visa-aware ATS. License via Apify Enterprise. |
| Researcher / labour-market analyst | Time-series of sponsorship signals across regions and professions. The federal API doesn't expose this — we synthesize it. |
The moat: visa-sponsorship classifier
Every dataset row carries a visaStatus plus the evidence we used to label it.
visaStatus | What it means | How we decide |
|---|---|---|
confirmed | Multiple hard-positive sponsorship phrases. Apply with confidence. | ≥2 hard-positive signals AND no hard-negatives |
likely | One explicit sponsorship phrase ("visa sponsorship", "Blue Card", "relocation support", "Aufenthaltstitel"). | ≥1 hard-positive AND no hard-negatives |
unlikely | Hard-negative phrase or known citizenship-restricted employer (e.g. BWI GmbH = Bundeswehr IT). | ≥1 hard-negative |
unknown | Description doesn't mention visa either way. Default majority. | Neither side fires |
Reality check from production runs: ~93% of German listings fall to unknown because most employers simply don't state sponsorship in text. This is the actual market signal, not a bug. For agencies who only want safe bets, filter to confirmed + likely. For aggressive sourcers, filter to confirmed + likely + unknown and assume "unknown = ask the recruiter."
Optional LLM tie-breaker (useLlmTiebreaker: true) escalates the bottom 30% of ambiguous cases to Claude Haiku 4.5 for a final read. Costs $0.001 per escalation, capped at a configurable fraction of the run. Default off.
Output — real, unredacted
One verified dataset row from a Berlin "visa sponsorship" search:
{"refnr": "15170-448146640-S","title": "Quality Engineer (f/m/d) Investment Castings","employer": "Siemens Energy Global GmbH & Co. KG","profession": "Ingenieur/in - Maschinenbau","city": "Berlin","postalCode": "13629","region": "BERLIN","country": "DEUTSCHLAND","fullTime": true,"isStaffingAgency": false,"url": "https://www.arbeitsagentur.de/jobsuche/jobdetail/15170-448146640-S","visaStatus": "likely","visaClassifier": "regex-v1","visaReason": "1 hard-positive: visa sponsorship","visaSignals": {"hardPositive": ["visa sponsorship"],"hardNegative": [],"soft": ["global organization"]},"descriptionPreview": "A Snapshot of Your Day — This position combines Project, Quality, and Supplier Management...","fetchedAt": "2026-05-17T11:19:45.990Z"}
And a hard-negative example (correctly filtered as unlikely):
{"title": "Software Engineer Full Stack (m/w/d)","employer": "BWI GmbH","city": "München","visaStatus": "unlikely","visaReason": "Hard-negative signal(s): BWI GmbH (Bundeswehr IT — citizenship typically required)","visaSignals": {"hardPositive": [],"hardNegative": ["BWI GmbH (Bundeswehr IT — citizenship typically required)"],"soft": ["remote / mobile work"]}}
Full field list: refnr, title, employer, profession, city, postalCode, region, country, coordinates, salaryFromEUR, salaryToEUR, salaryKind, salaryRange, fullTime, partTime, shiftWork, isStaffingAgency, isPrivatePlacement, employerHomepage, publishedAt, modifiedAt, description, descriptionPreview, descriptionLength, allLocations, url, visaStatus, visaClassifier, visaReason, visaSignals, fetchedAt.
Three dataset views are exposed (overview, confirmed-only, full-details) — pick from the Apify console.
Input
Full schema with descriptions: see the Input tab in the Apify console.
| Field | Type | Default | Notes |
|---|---|---|---|
searchTerm | string | required | Role keyword, EN or DE. E.g. "Software Engineer", "Data Scientist", "Pflegefachkraft". |
location | string | "" | German city or postal area. Empty = all Germany. |
radiusKm | integer | 25 | Search radius around location. |
salaryMinEUR | integer | 0 | Minimum yearly salary filter (federal API field). |
remoteAllowed | boolean | false | Filter to remote-allowed listings only. |
publishedDaysAgo | integer | 7 | Skip listings older than N days. |
offerTypes | array<enum> | ["1"] | 1=permanent, 2=temp, 4=apprenticeship, etc. |
includeTemporaryAgency | boolean | false | Include staffing agencies (often visa-unfriendly). |
visaStatusFilter | array<enum> | ["confirmed","likely","unknown"] | Drop everything else from the dataset. |
useLlmTiebreaker | boolean | false | Escalate ambiguous cases to Claude Haiku 4.5. Requires anthropicApiKey. |
anthropicApiKey | string (secret) | "" | Your Anthropic API key. Only needed if tie-breaker is on. |
llmTiebreakerMaxFraction | number | 0.3 | Cap LLM calls at this fraction of the run. |
dedupAcrossRuns | boolean | true | Persistent KV store of seen refnrs; skip on repeat. |
dedupHorizonDays | integer | 7 | Prune dedup cache entries older than N days. |
maxResults | integer | 100 | Hard cap per run. |
includeRawDescription | boolean | false | Emit full description in addition to the preview. |
Pricing — Pay Per Event
| Event | Price | Fires when |
|---|---|---|
actor-start-gb | $0.00005 / GB | At run start. First 5 seconds waived. |
enriched-result | $0.005 | A job that passes classifier + filter + dedup and lands in the dataset. |
llm-tiebreaker-call | $0.001 | One Anthropic Haiku 4.5 escalation. Only if useLlmTiebreaker: true. |
≈ $5 per 1,000 enriched results. You pay for results, not for cycles. Repeated runs skip already-seen jobs and cost nothing.
| You are... | Cadence | Enriched/mo | Monthly cost |
|---|---|---|---|
| Solo job-mover (one role, one city) | Daily | ~150 | ~$0.75 |
| Active consultancy (5 roles × Berlin/Munich/Hamburg) | Daily | ~1,500 | ~$7.50 |
| Recruitment SaaS (50 client searches) | Daily | ~15,000 | ~$75 |
How it stays clean
- Federal API direct —
bundesagentur-jobsucheupstream, no scraping fragile HTML, no Cloudflare challenges, no proxy needed. - Deduplication across runs — refnrs persisted in an Apify KV store. Poll daily without paying twice for the same job.
- Stale-prune — refnr cache older than 7 days (configurable) is dropped to keep the store light.
- Classifier transparency — every row exposes
visaReason+visaSignals. You can override our judgement; we don't hide the evidence. - Cost ceiling — LLM tie-breaker is opt-in and capped at a fraction of the run. Worst-case cost is bounded before you press Start.
Limits & legal
- Reads only the public Bundesagentur Jobboerse API via client
jobboerse-jobsuche(no OAuth, no scraping). De-facto public, no formal commercial-use restriction documented — verify before running at scale. - The visa classifier is heuristic, not legal advice.
confirmeddoes not guarantee sponsorship will be offered;unlikelydoes not guarantee it won't. Always confirm with the employer. - We don't store personal data beyond what the federal API itself publishes.
Frequently asked
Q: Why not just grep "visa sponsorship" yourself? You can. But the federal API only returns 25 listings per page, requires base64 keys for detail fetches, has German-only category codes, and returns no sponsorship signal of its own. Doing this once is fine. Doing it on a cadence for 5 roles across 3 cities is a part-time job.
Q: What's the false-positive rate on confirmed?
The classifier is rule-based and conservative: confirmed requires multiple hard-positive phrases AND no hard-negatives, so false positives are rare in practice (we have not yet published a hand-graded benchmark). False negatives in unknown are the dominant error class — most German employers simply don't state sponsorship policy in text. The LLM tie-breaker is the lever for catching those.
Q: Can I add my own classifier rules? Not in v0.2. Patch list / employer hard-negatives are coming in v0.3 — open a request via the Apify console issues tab.
Q: Is there an MCP endpoint?
Yes — automatically. Every Apify Actor with an input schema is exposed as an MCP tool. Point your Claude / / Codex client at the Apify MCP and this actor appears as germany-visa-jobs.
Q: Why "pay-per-event" and not subscription? Because most users only need a few hundred fresh listings per month. PPE means you pay for results, not for cycles. Sleeping users cost nothing.
Roadmap
- v0.2 (current) — federal API, regex-v1 classifier, optional Haiku 4.5 tie-breaker, persistent dedup.
- v0.3 — user-supplied hard-negative employer patches; per-row salary inference from text; German-language
Aufenthaltstitel/Blaue Kartesynonym set. - v0.4 — Stepstone + LinkedIn Jobs sibling actor wired into the same classifier.
- v1.0 — calibrated probability output instead of bucket labels.
Sister actor
Need somewhere to live in the same city? cg_nguyen/wg-gesucht-de emits new WG-Zimmer listings minutes after they're posted. Same author, same pricing model.
Author
Built by @cg_nguyen. Senior Backend Engineer at SOA (Source of Asia), Hanoi. Working with European clients; lived the Tier-3 visa search myself. Bugs and feature requests via the Apify console issues tab.