Skip to content

Repository files navigation

jobsearch - automate job board searches

Tests uv Ruff

Jobsearch launches a browser instance and automatically searches all provided search terms on all configured URLs, one tab per search. It also has a subcommand, jobsearch network, to automatically open the activity feeds configured LinkedIn profiles for easy access to people you want to interact with instead of relying on the algorithm.

It is built using Playwright and Python 3.14.

It is designed to be easily extensible and configurable, and is free to use, modify, and distribute under the terms of the GPL.

Installation

First, Install uv and Clone this repo.

Navigate to the project directory:

 cd jobsearch

Install jobsearch locally:

uv pip install -e . 

Install the Playwright browsers:

uv run playwright install 

Configuration

Jobsearch is configured as-is to be useful to me. Unless you live in the same place and are looking for the same types of jobs, you will want to configure it to be useful to you.

Of the included sites (located in src/jobsearch/sites), builtin.py is Boston-specific, while greenhouse.py and linkedin.py default to Boston searches, and google.py defaults to Massachusetts. You can update them to suit your requirements.

The file config.toml in the root directory contains search terms and the sites to be searched. To add or edit search terms, just edit the list terms on line 2.

Jobsearch currently supports searches on LinkedIn, Greenhouse, BuiltinBoston, and Google. To add support for another site, you will need to:

  1. Add a module for it in the sites directory (use the existing modules as models; the tricky part is figuring out each site's url format);
  2. Import it and add it to the SITES dict in browser.py ;
  3. Add it to the enabled list in the [sites] table of config.toml;
  4. (Optional but recommended) Add tests of your new module to test_sites.py.

Note

The searches in the Google module tend to trigger Google's captchas, which eliminates the convenience of including them at all. For now I'm disabling the google module by default, but you can enable it in config.toml if you'd like to try it out. In the meantime, I recommend using Brian's Job Search instead (more clicks than jobsearch, but less than doing a Google captcha for each search)

Configuring the network command

To use the network command, you will need to add some LinkedIn usernames to the LINKEDIN_PROFILES field in .env (some dummy ones are filled by default in .env-template to show the format).

Running jobsearch

To search all configured sites:

uv run jobsearch 

To search one configured site:

uv run jobsearch --site greenhouse 

or

uv run jobsearch -s greenhouse 

To open the activity feeds of all configured profiles:

uv run jobsearch network 

Loading user settings

Sites like LinkedIn are easier to use if you're logged in. You can point jobsearch at your browser's config folder (and thus run jobsearch with all your saved logins) by copying the file .env-template into a file called .env:

cp .env-template .env 

The value of USER_DATA_DIR should be the path to your browser's settings directory. For example, for the Chromium browser on my system, this is ~/.config/chromium.

Note

If you are already running a separate instance of Chromium, it will block Playwright's access to the user settings folder. One way around this is to copy the folder somewhere else (like into the project folder) and then point jobsearch at that folder.

Feedback

  • For bug reports, please open an issue with a description of what you expected vs what you got
  • For suggestions, please open an issue with a description of the desired behavior
  • For gratuitous praise, please send a toot to https://fosstodon.org/@jeffjacobson
  • Thanks for stopping by!

Acknowledgments

The google searches in google.py reproduce functionality provided by Brian's Job Search.

About

Automate searches of multiple job boards

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages