Skip to main content

JobSeek Expat 🌍

JobSeek Expat is a powerful, open-source CLI tool designed to help expats and international job seekers find English-speaking jobs in non-English speaking countries (like Germany, France, Netherlands, etc.).

It scrapes major job boards, filters out local-language requirements, and presents you with a clean, curated list of opportunities.

🚀 Features

  • Multi-Platform Scraping: Search LinkedIn, Indeed, and Glassdoor simultaneously.
  • Smart Filtering:
    • English Only: Automatically detects job description language.
    • No "Local Language" Required: Filters out jobs requiring C1/Fluent local language skills (customizable).
    • Experience Level: Filter by Seniority (Entry, Mid-Senior, etc. - Best on LinkedIn).
  • Flexible Locations: Search multiple cities or "Remote" in your target country.
  • Advanced Search:
    • Multiple Keywords: Search for "Developer, Designer" in one go.
    • Exclusion Lists: Hates specific terms? --exclude "intern, thesis".
  • Output Options:
    • Beautiful CLI Tables: Clickable links, color-coded output.
    • JSON: Machine-readable format for automation.

📦 Installation

From PyPI (Recommended)

pip install jobseek-expat

From Source

git clone https://github.com/electricalgorithm/jobseek-expat.git
cd jobseek-expat
pip install .

🛠️ Usage

Once installed, the jobseek-expat command (and its short alias je) is available globally.

Generic syntax:

jobseek-expat "KEYWORD" --country "COUNTRY_NAME" [OPTIONS]
# or simply:
je "KEYWORD" --country "COUNTRY_NAME" [OPTIONS]

Examples

1. The Classic Expat Search (Berlin) Find "Software Engineer" jobs in Germany (Berlin) that likely don't require German.

jobseek-expat "Software Engineer" --location "Berlin"

2. Multi-City & Remote Search Search for "Product Manager" in Amsterdam and Remote within the Netherlands.

jobseek-expat "Product Manager" \
  --country "Netherlands" \
  --location "Amsterdam, Remote" \
  --local-language "Dutch"

Note: We specify --local-language "Dutch" so it filters out "Dutch required" jobs.

3. The "Broad Net" Strategy Search for Developer OR Data Scientist roles in France, specifically Paris, excluding internships.

jobseek-expat "Developer, Data Scientist" \
  --country "France" \
  --location "Paris" \
  --local-language "French" \
  --exclude "intern, stage, internship" \
  --results-wanted 50

Command Line Options

Option Alias Description Default
KEYWORD Job title(s) or keywords (comma-separated). Required.
--country Target Country (e.g. Germany, France). Germany
--location Specific City/Region (comma-separated). Use "Remote" for country-wide remote. Whole Country
--local-language Language to filter out if required (e.g. German, Dutch). German
--hours-old Max age of job postings in hours. 24
--results-wanted Jobs to fetch per keyword/location. 20
--exclude Keywords to exclude (title/description). None
--site Sites: linkedin, indeed, glassdoor. All 3
--output -o Format: table or json. table
--verbose -v Show scraper debug logs. False

🤝 Contributing

We welcome contributions! Whether it's adding a new filter, improving the language detection, or supporting more job boards.

  1. Fork the Project
  2. Create your Feature Branch
  3. Commit your Changes
  4. Push to the Branch
  5. Open a Pull Request

📄 License

Distributed under the MIT License. See LICENSE for more information.


Built with ❤️ for the global expat community.

Metadata

Release files for jobseek-expat 1.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for jobseek-expat 1.2.0
File Size Uploaded
jobseek_expat-1.2.0.tar.gz 62.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for jobseek-expat 1.2.0
File Interpreter ABI Platform
jobseek_expat-1.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 74.3 kB

Release files / jobseek_expat-1.2.0.tar.gz

Download URL jobseek_expat-1.2.0.tar.gz
Size 62.0 kB
Tags Source
SHA-256 checksum
How to use checksums
f2bdf9e8702b0c4e4baa6af5574a6cccc0f4021ab1483ff5899f913e8eb423e4
BLAKE2b-256 checksum
How to use checksums
6f819947d5a906598e149376a1edfb9d96092a5536371c5c8620b77734d88dae
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 12, 2026.

Transparency log

Release files / jobseek_expat-1.2.0-py3-none-any.whl

Download URL jobseek_expat-1.2.0-py3-none-any.whl
Size 12.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ff5b84cb80f1ffbbd7ee01e9a8715cf9a495073a442653f543ea2ec28e490428
BLAKE2b-256 checksum
How to use checksums
5e289302073145ef8e87a38f80a7184584cba6f7e86418e8eb100ee0af560f85
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 12, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.2.0 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page