eyayaw/jobrake

Rake job postings off the boards

1

stars

163

commits

Python

primary language

Sep 7, 2026

updated

indeed
job-search-automation
linkedin
python

README

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 \
  -r 100 \
  -a 48 \
  -n 5

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 'data science AND "economics"' \
        -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 science AND economics' \
        -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 usage and output 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

SiteSearchPosting details
indeedMobile-app GraphQL APIIncluded in search results
linkedinLogin-free guest APIOptional, paced, and cached

Indeed requires country. LinkedIn accepts either location or a geoId. See provider behavior for geography, filters, pagination, rate limits, retries, and LinkedIn detail fetching.

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.

Contributors

eyayaw

163 commits

eyayaw/jobrake

Rake job postings off the boards

1

stars

163

commits

Python

primary language

Sep 7, 2026

updated

indeed
job-search-automation
linkedin
python

README

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 \
  -r 100 \
  -a 48 \
  -n 5

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 'data science AND "economics"' \
        -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 science AND economics' \
        -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 usage and output 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

SiteSearchPosting details
indeedMobile-app GraphQL APIIncluded in search results
linkedinLogin-free guest APIOptional, paced, and cached

Indeed requires country. LinkedIn accepts either location or a geoId. See provider behavior for geography, filters, pagination, rate limits, retries, and LinkedIn detail fetching.

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.

Contributors

eyayaw

163 commits

Languages

Python

100.0%