English-speaking Jobs — DE,CH,NL - to be deleted not working
Pricing
from $0.01 / 1,000 results
English-speaking Jobs — DE,CH,NL - to be deleted not working
Aggregates English-speaking and remote/work-from-anywhere jobs for Germany and Switzerland from free APIs (Arbeitnow, Remotive, Jobicy, RemoteOK, We Work Remotely, Adzuna) plus optional LinkedIn/Indeed/Xing/StepStone Actors.
Pricing
from $0.01 / 1,000 results
Rating
0.0
(0)
Developer
akaji Banpu
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
English-speaking Jobs — Germany & Switzerland
An Apify Actor that aggregates English-speaking job listings focused on
Germany and Switzerland, plus remote/work-from-anywhere jobs regardless of
country (Netherlands is still supported via countries, just no longer the
primary focus).
Sources
Free, direct API calls (no key needed, no separate Actor cost, no known legal/ToS issue with this kind of use):
- Arbeitnow
- Remotive
- Jobicy — supports Germany, Switzerland, Netherlands via
geo= - RemoteOK — 100%-remote listings. Its own API response embeds an explicit terms clause: "please link back... and mention Remote OK as a source, so we get traffic back from your site. If you do not we'll have to suspend API access." If you build anything user-facing on top of this Actor's output, credit RemoteOK and link back to the job's URL on remoteok.com.
- We Work Remotely — 100%-remote listings via the RSS feed the site itself publishes for external consumption.
- Adzuna (optional — needs a free
adzunaAppId/adzunaAppKey) — officially supports Germany (de), Switzerland (ch), and Netherlands (nl) - Himalayas — free public JSON API, no key, documented, supports a
countryfilter - The Muse — free without a key (500 req/hr); its own
locationquery param didn't reliably narrow results in testing, so this fetches broadly and filters client-side like Arbeitnow - Jooble (optional — needs a free
joobleApiKeyfrom a signup form) — legitimate free API meant for exactly this use, but the free tier is a lifetime cap of 500 requests total (not per-day), so it's opt-in and should be used sparingly
RemoteOK, We Work Remotely, Himalayas, and The Muse are all global, English-by-default remote/job boards, so — unlike Arbeitnow, a German board mixing German/English postings — their results are not run through the English-language filter; nearly everything on them already qualifies, and the filter would mostly produce false negatives.
One official option investigated but not added: EURES, the EU/EFTA's own job mobility network (Switzerland is a full member via a bilateral agreement, confirmed). It has no sanctioned public API — only a reverse-engineered, community-documented endpoint exists, which could change or break without notice since it isn't actually meant for third-party use. Worth revisiting if you want the reach of an official government jobs database and are OK with that fragility.
Composed from existing Apify Store Actors (each is a separate, pay-per-result Actor run):
- LinkedIn — default
curious_coder/linkedin-jobs-scraper - Indeed — default
borderline/indeed-scraper - Xing — default
fatihtahta/xing-jobs-scraper - StepStone — default
trev0n/stepstone-scraper— covers Germany, Austria, Netherlands, and Belgium (only DE/NL are in ourcountrieslist; Switzerland is skipped, StepStone doesn't operate there). Filters for English-language ads directly via its ownadLanguageparam, so this source's results are more precisely English than the others in this section. Verified against a real run —title/location/url/companyNameall confirmed correct. - Robert Half — default
studio-amba/roberthalf-scraper— a staffing agency covering Germany, Netherlands, and Switzerland (via its English-languageCH-enlocale). Unverified — every test attempt (from two different Apify accounts) was rejected pre-flight with "exceeds remaining usage," seemingly due to this Actor's own Store pricing configuration rather than the caller's resource request. Verify before relying on it. - Relocate.me (visa-sponsored jobs) — default
khadinakbar/visa-sponsored-jobs-scraper— international tech roles with explicit visa sponsorship and a full relocation package (visa services, flights, housing, language courses); covers Germany and Netherlands, not Switzerland. Every listing from this source is inherently visa-sponsored, so it's tagged as"Relocate.me (Visa Sponsored)"in thesourcefield rather than adding a dedicated schema field for one source. Verified against a real run — note there's no singlelocationfield, it's split into separatecity/countryfields (handled in code).
Why compose existing Actors instead of scraping these sites directly
LinkedIn, Indeed, Xing, StepStone, Robert Half, and Relocate.me all prohibit automated scraping in their Terms of Service and run active anti-bot defenses (LinkedIn in particular has pursued legal action against scrapers). Rather than writing bespoke scraping logic against those defenses in this repo,
src/sources/{linkedin,indeed,xing,stepstone, robert_half,visa_sponsored}.pyActor.call(...)) and read
its output dataset. That plumbing (proxies, anti-bot handling,
markup-change maintenance) already lives in those Actors. You are still
bound by Apify's own platform terms and by whatever terms the upstream
Actor's author has agreed to — this doesn't remove the underlying legal
risk, it just avoids re-implementing scraping logic that the target sites
explicitly forbid. These six sources are excluded from the default
sources list precisely because of that residual legal exposure — the
free/direct-API sources above are the default, ToS-clean set.
You can swap in a different Actor for any of these via the
linkedinActorId / indeedActorId / xingActorId / stepstoneActorId /
robertHalfActorId / visaSponsoredActorId input fields.
Robert Half and Relocate.me both have small user counts on Apify (2 and 81 respectively) — lower track record than the others in this list, so treat their output field names as even less certain until you've run a real test.
Every composed-Actor call passes explicit memory_mbytes=512/
timeout_secs=180 (see src/sources/apify_actor.py) so cost stays bounded
regardless of the called Actor's own resource defaults — found necessary
during testing when one Actor's default allocation alone made Apify's
pre-flight cost estimate exceed a small account's remaining monthly free
credit, even before any real per-result charges applied. Each source is
also isolated in main.py (_safe() wrapper) so one failing composed
Actor — insufficient balance, the Actor being down, a bad input field —
can never discard the other sources' already-collected results; a failure
is logged and that source just comes back empty.
Two boards considered but not added: Glassdoor and Monster both have
usable Apify Store Actors, but weren't wired in this round — Monster in
particular describes itself as US-focused, a weak fit for Germany/Switzerland.
Add them the same way (a new src/sources/<site>.py following the
stepstone.py pattern) if you want them later.
Four expat/English-specific job sites were also investigated (iamexpat.nl, undutchables.nl, thelocal.de/jobs, berlinstartupjobs.com) as candidates for a custom scraper. Only undutchables.nl came back clear (no scraping clause in its ToS, permissive robots.txt); the other three either explicitly prohibit scraping in their terms or have no real job-listing surface left to scrape. None are implemented yet — see git history for the full per-site findings if you want to revisit undutchables.nl.
Known limitation: the Actor-composed sources (LinkedIn/Indeed/Xing/
StepStone/Robert Half/Relocate.me) are not run through the English-language
filter, since the exact output fields of those third-party Actors aren't
verified yet — see the NOTE in each module. StepStone is the exception:
its adLanguage: "en" input param filters for English ads server-side.
Input
See .actor/input_schema.json. Key fields:
| Field | Description |
|---|---|
keyword | Job title/keyword filter, e.g. "python developer" |
countries | ["germany", "switzerland"] by default; "netherlands" also supported |
remoteAnywhere | Default true — also include jobs tagged Worldwide/Anywhere/Europe/EMEA/Flexible regardless of countries, from arbeitnow/remotive/remoteok/weworkremotely/himalayas/themuse |
sources | Which sources to query. Default is the free, ToS-clean set: arbeitnow, remotive, jobicy, remoteok, weworkremotely, himalayas, themuse. jooble is free but opt-in (signup + 500-request lifetime cap). linkedin/indeed/xing/stepstone are opt-in and cost money per run — see the legal note above before enabling |
maxItemsPerSource | Cap on results per paid Actor — keep this low while testing |
adzunaAppId / adzunaAppKey | Only needed if adzuna is in sources |
joobleApiKey | Only needed if jooble is in sources |
linkedinActorId / indeedActorId / xingActorId / stepstoneActorId / robertHalfActorId / visaSponsoredActorId | Override which Store Actor to call |
Local development
pip install -r requirements.txtapify run
apify run needs the Apify CLI installed and
an APIFY_TOKEN configured (apify login) so it can call the LinkedIn/
Indeed/Xing/StepStone/Robert Half/Relocate.me sub-Actors if those sources
are enabled. The free sources (the default) work without a token.
Before enabling linkedin/indeed/xing/stepstone/roberthalf/
visasponsored: verify the output field names assumed in the corresponding
src/sources/*.py module (pick(item, "title", ...) etc.) against a small
test run of each upstream Actor in the Apify Console — Store search doesn't
expose output schemas, only input schemas, so those were written
defensively but unverified against live output.
Deploy to Apify
apify loginapify push