Skip to content
eyayawPublic

About

Rake job postings off the boards

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Repository files navigation

jobrake

Scrape job postings together and heap them up. Read the launch post here.

Read it as "job-rake".

Say it quickly and you hear "job break"—a break from the search doomscroll. (^_~)

Did Jo show up? Jo hit the brake, too.

jobrake is a Python package and CLI tool for fetching job postings from LinkedIn and Indeed.

jobrake linkedin \
  --query "data scientist" \
  --location "amsterdam, netherlands" \
  --max-age 48 \
  --results 5 \
  --details
jobrake indeed \
  -q "data scientist" \
  -l amsterdam -c netherlands \
  -a 48 \
  -n 5 \
  --radius 100

Installation

jobrake is not on PyPI. Install it from GitHub with uv:

uv add git+https://github.com/eyayaw/jobrake
# Install as a CLI tool
uv tool install git+https://github.com/eyayaw/jobrake

Usage

CLI

jobrake -h

# LinkedIn ----
## Search
jobrake linkedin \
        -q "research economist" \
        -l "London, England" \
        -n 5 \
        -a 24 \
        -d \
        -o jobs.csv

## Fetch details
# You can pass several urls/ids
jobrake details linkedin \
        "https://uk.linkedin.com/jobs/view/senior-data-scientist-at-hm-treasury-4461975556"
        # or just 4461975556
## Resolve place names
jobrake places linkedin "amsterdam" # then use the display name in search
                                    # -l "Amsterdam, North Holland, Netherlands"
# Use the geoid of the place directly (instead of location)
jobrake linkedin -q "data scientist" -g 102011674 -n 2 # Amsterdam, Netherlands

# Indeed ----
## Search and fetch details
jobrake indeed \
        -q "data analyst" \
        -c "UK" \
        -l "London" \
        -n 5 \
        -a 24 \
        -o jobs.jsonl
# Resolve place names
jobrake places indeed -c netherlands "amsterdam"

The CLI writes JSON to stdout by default. --format | -f selects JSON, JSONL, or CSV, and --output | -o writes to a file. See the guide for file formats, returned fields, custom fetchers, and piping.

As a library

import asyncio

from jobrake import scrape


async def main():
    return await scrape(
        "indeed",
        query="economist",
        country="United States",
        results=2,
    )


jobs = asyncio.run(main())

Supported job boards

Site Search Posting details
indeed Mobile-app GraphQL API Included in search results
linkedin Login-free guest API Optional, paced, and cached

Indeed requires country. LinkedIn accepts either location or a geoId. See the guide for search queries, geography, filters, pagination, rate limits, retries, and LinkedIn detail fetching.

Warning

LinkedIn answers posting pages with HTTP 999 from data center IPs, such as a Hetzner VPS. Searches still work there, but --details and jobrake details linkedin return no details. So use jobrake from the comfort of your home. :D

Credits

jobrake's Indeed GraphQL endpoint and LinkedIn guest-search approach are based on python-jobspy. Huge thanks.

Disclaimer

Warning

jobrake has no affiliation with LinkedIn or Indeed. Use it to find jobs, not to build datasets by scraping regularly. Scraping may violate their terms of service, and either site may rate-limit or block your IP address. You are responsible for checking and complying with their terms.

About

Rake job postings off the boards

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages