Open-source job-search automation

Stop searching job boards by hand.

JobFinder collects fresh postings from LinkedIn, Indeed, Stepstone and Xing, removes duplicates, filters out the noise, and drops everything into one tidy spreadsheet — with optional AI scoring against your own CV.

4 job boards, one run Excel or Google Sheets Runs on a schedule
What is JobFinder?

A repeatable pipeline for your job hunt

Searching several job boards by hand is slow and repetitive. JobFinder runs the same search for you across multiple boards, keeps only what is new and relevant, and (if you want) asks OpenAI to score each role against your CV and build a tailored CV PDF for the good matches.

STEP 1
Scrape4 job boards
STEP 2
De-dupemerge matches
STEP 3
Filterremove noise
STEP 4
ExportExcel / Sheets
OPTIONAL
STEP 5
AI scoreverdict + fit
OPTIONAL
STEP 6
CV PDFstailored per job

JobFinder is configured with your own keywords, filters, prompt and CV. Those private files stay on your machine or in GitHub secrets — they are never committed to the repository.

Key features

Everything you need for a daily shortlist

Only features that exist in the project today — nothing invented.

One search, four boards

Search LinkedIn, Indeed, Stepstone and Xing in a single run, powered by Apify actors.

No duplicates

The same job posted on several boards is merged into one row — deterministic, with no AI involved.

Only new jobs

Scheduled runs can fetch only what was posted since your last run, using your spreadsheet's history.

Excel or Google Sheets

Export a timestamped sheet locally to Excel, to Google Sheets, or to both at once.

Optional AI scoring

OpenAI scores each job against your CV, writing a verdict, a 0–26 fit score, and reasons it may not fit.

Tailored CV PDFs

For promising roles it compiles a tailored LaTeX CV to PDF and links it from the sheet via Google Drive.

Runs on a schedule

Let GitHub Actions run it daily with no computer on. It even resumes an unfinished same-day run.

Filters you control

Exclude titles and companies, cap applicant counts, and choose how far back to search.

Crash-safe writes

Evaluations save row by row, so a later failure keeps everything already completed.

Quick start

Two ways to run it

Pick the path that fits you. Most people start with the no-code cloud option.

Fork the repository

Open the project on GitHub and click Fork to make your own copy. No installation required.

Add your secrets

In your fork, go to Settings → Secrets and variables → Actions and add your Apify token, keywords, Google token, and (for AI) your OpenAI key, prompt and CV.

Press Run

Open Actions → JobFinder Pipeline → Run workflow, choose your options, and start it. It can also run automatically on a daily schedule.

Read your results

A new dated tab appears in your Google Sheet. In scrape_and_evaluate mode it also gets the AI columns and CV PDF links.

Clone the repo, install it in a Python 3.14+ environment, and create your config files from the examples:

# 1. Clone and enter the project
git clone https://github.com/AmirDonyadide/JobFinder.git
cd JobFinder

# 2. Install it (Python 3.14+ recommended)
python -m pip install -e .

# 3. Create your private config from the examples
cp .env.example .env
cp configs/keywords.example.txt configs/keywords.txt
cp prompts/master_prompt.example.txt prompts/master_prompt.txt
cp cv/master_cv.example.tex cv/master_cv.tex

Add your APIFY_API_TOKEN to .env, put your search terms in configs/keywords.txt, then try your first run below.

Full Local guide →
Installation

What you need

Local Excel-only runs need just Python and an Apify token. The full pipeline adds Google and OpenAI.

Always required

  • Python 3.14+
  • An Apify API token (for all scraping)

For AI scoring & the full pipeline

  • An OpenAI API key
  • Google OAuth access (Sheets & Drive)
  • LaTeX (latexmk + xelatex) for CV PDFs

Install the package (editable):

python -m pip install -e .

Apify and OpenAI bill by usage, so a full AI run uses paid API credits. Local Excel-only scraping needs only an Apify token. See the cost & performance notes.

Basic usage

Run your first search

The quickest thing to try needs no Google account or OpenAI key — just an Apify token.

Scrape to a local Excel file

JOBFINDER_SCRAPER_OUTPUT_MODE=excel python linkedin_job_scraper.py

This writes the matching jobs to jobs.xlsx.

Check your setup (spends nothing)

python run_job_pipeline.py --preflight

Full run: scrape + AI scoring

python run_job_pipeline.py --mode scrape_and_evaluate

Build a command

Choose options and copy the exact command. Every option here maps to a real setting.

JOBFINDER_SCRAPER_SOURCES=all JOBFINDER_SCRAPER_OUTPUT_MODE=excel python linkedin_job_scraper.py
Common workflow

What a daily run looks like

The scheduled GitHub Actions pipeline, end to end.

It wakes up on schedule

GitHub Actions starts the pipeline in the morning, with same-day fallback runs in case the first is delayed.

It scrapes only what's new

Using since_previous_run, it fetches jobs posted after the newest entry already in your sheet.

It de-dupes, filters and writes a tab

Duplicates merge, excluded titles/companies drop out, and a new dated tab lands in your Google Sheet.

It scores each job and builds CV PDFs

OpenAI writes a verdict and a fit score; tailored CV PDFs are uploaded to Drive and linked in the sheet.

You open the sheet and apply

Sort by fit score, mark your application status, and move on — no manual searching required.

Documentation

Go deeper

Short, focused guides — read only what you need. All hosted in the repository.

FAQ

Common questions

No. The recommended path is to fork the repository and run it on GitHub Actions — you only add a few secrets and press Run. Running locally needs basic command-line comfort but no programming.

LinkedIn, Indeed, Stepstone and Xing, via Apify actors. You can search one board, a custom list, or all four with JOBFINDER_SCRAPER_SOURCES.

JobFinder itself is free, but it uses third-party APIs that bill by usage. Scraping needs a paid/credited Apify account, and AI scoring needs a paid OpenAI key. A local Excel-only scrape uses only your Apify credits.

Yes. Run in scrape_only mode (or the scraper alone) to collect and filter jobs without OpenAI. The AI scoring and CV PDFs are entirely optional.

In a spreadsheet. Local runs can write jobs.xlsx; cloud and full-pipeline runs add a new dated tab to your Google Sheet. Each run is timestamped so history is preserved.

Yes. Your keywords, prompt, CV and credentials live in local files (ignored by Git) or in GitHub secrets. The repository only ships example placeholders.

In your fork, open Actions → JobFinder Pipeline, click the menu, and choose Disable workflow. You can re-enable it any time.

It uses a custom non-commercial license: free to view, run, modify and share for personal, educational and other non-commercial purposes. Commercial use needs a separate written license. Read the full LICENSE before use.

Ready to automate your job search?

Fork the repo, add your keywords, and let JobFinder build your shortlist.

Start the Quick Start Star it on GitHub