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.
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.
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.
Only features that exist in the project today — nothing invented.
Search LinkedIn, Indeed, Stepstone and Xing in a single run, powered by Apify actors.
The same job posted on several boards is merged into one row — deterministic, with no AI involved.
Scheduled runs can fetch only what was posted since your last run, using your spreadsheet's history.
Export a timestamped sheet locally to Excel, to Google Sheets, or to both at once.
OpenAI scores each job against your CV, writing a verdict, a 0–26 fit score, and reasons it may not fit.
For promising roles it compiles a tailored LaTeX CV to PDF and links it from the sheet via Google Drive.
Let GitHub Actions run it daily with no computer on. It even resumes an unfinished same-day run.
Exclude titles and companies, cap applicant counts, and choose how far back to search.
Evaluations save row by row, so a later failure keeps everything already completed.
Pick the path that fits you. Most people start with the no-code cloud option.
Open the project on GitHub and click Fork to make your own copy. No installation required.
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.
Open Actions → JobFinder Pipeline → Run workflow, choose your options, and start it. It can also run automatically on a daily schedule.
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.
Local Excel-only runs need just Python and an Apify token. The full pipeline adds Google and OpenAI.
latexmk + xelatex) for CV PDFsInstall 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.
The quickest thing to try needs no Google account or OpenAI key — just an Apify token.
JOBFINDER_SCRAPER_OUTPUT_MODE=excel python linkedin_job_scraper.py
This writes the matching jobs to jobs.xlsx.
python run_job_pipeline.py --preflight
python run_job_pipeline.py --mode scrape_and_evaluate
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
The scheduled GitHub Actions pipeline, end to end.
GitHub Actions starts the pipeline in the morning, with same-day fallback runs in case the first is delayed.
Using since_previous_run, it fetches jobs posted after the newest entry already in your sheet.
Duplicates merge, excluded titles/companies drop out, and a new dated tab lands in your Google Sheet.
OpenAI writes a verdict and a fit score; tailored CV PDFs are uploaded to Drive and linked in the sheet.
Sort by fit score, mark your application status, and move on — no manual searching required.
Short, focused guides — read only what you need. All hosted in the repository.
Fork it and run on GitHub — no coding required.
Read guide →Every command, run mode, and output column explained.
Read guide →Every environment variable and config file in one place.
Read guide →Copy-paste recipes for common situations.
Read guide →The scraping, dedupe, history and evaluation flow.
Read guide →Fixes for the most common errors.
Read guide →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.
Fork the repo, add your keywords, and let JobFinder build your shortlist.