English-speaking Jobs — DE,CH,NL - to be deleted not working avatar

English-speaking Jobs — DE,CH,NL - to be deleted not working

Pricing

from $0.01 / 1,000 results

Go to Apify Store
English-speaking Jobs — DE,CH,NL - to be deleted not working

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

akaji Banpu

Maintained by Community

Actor 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 country filter
  • The Muse — free without a key (500 req/hr); its own location query param didn't reliably narrow results in testing, so this fetches broadly and filters client-side like Arbeitnow
  • Jooble (optional — needs a free joobleApiKey from 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 our countries list; Switzerland is skipped, StepStone doesn't operate there). Filters for English-language ads directly via its own adLanguage param, so this source's results are more precisely English than the others in this section. Verified against a real runtitle/location/url/companyName all confirmed correct.
  • Robert Half — default studio-amba/roberthalf-scraper — a staffing agency covering Germany, Netherlands, and Switzerland (via its English-language CH-en locale). 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 the source field rather than adding a dedicated schema field for one source. Verified against a real run — note there's no single location field, it's split into separate city/country fields (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}.py
each call an existing, actively-maintained Actor from the Apify Store over the Apify API (Actor.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:

FieldDescription
keywordJob title/keyword filter, e.g. "python developer"
countries["germany", "switzerland"] by default; "netherlands" also supported
remoteAnywhereDefault true — also include jobs tagged Worldwide/Anywhere/Europe/EMEA/Flexible regardless of countries, from arbeitnow/remotive/remoteok/weworkremotely/himalayas/themuse
sourcesWhich 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
maxItemsPerSourceCap on results per paid Actor — keep this low while testing
adzunaAppId / adzunaAppKeyOnly needed if adzuna is in sources
joobleApiKeyOnly needed if jooble is in sources
linkedinActorId / indeedActorId / xingActorId / stepstoneActorId / robertHalfActorId / visaSponsoredActorIdOverride which Store Actor to call

Local development

pip install -r requirements.txt
apify 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 login
apify push