Analyze IT job offers from justjoin.it — salary stats, top companies, benefits
Project description
IT Job Offers Analyzer
Interactive CLI for analyzing IT job offers from justjoin.it — salary stats, top companies, benefits, and more.
Features
- Salary analysis — percentile distribution, median, IQR-based outlier detection
- Top companies — ranking by salary above configurable percentile threshold
- B2B benefits — paid vacation, sick leave, and extras extracted from offer descriptions
- Salary progression — compare junior through senior salary bands
- Cross-group comparison — compare by city, category, experience, employment type, or workplace
- Recent offers — browse newly published offers with per-day charts
- Company drill-down — view all offers for a company with vs-median deltas
- Interactive REPL — tab completion, session caching, ESC to cancel, auto-update check
Installation
pip install itjobs
Requires Python 3.10+. Dependencies (rich, prompt_toolkit) are installed automatically.
Quick start
itjobs
Then type any command — data is fetched automatically:
/analyze Kraków python senior b2b # salary stats
/top b2b >P75 # companies above P75
/progression Kraków python b2b # junior → senior
/compare Kraków Warszawa python b2b # city vs city
/recent 7 Kraków python # last 7 days
/benefits Kraków python senior # B2B perks
Commands
| Command | Description |
|---|---|
/analyze [city] [cat] [exp] [workplace] [type] |
Salary analysis with percentile and distribution tables |
/top [city] [cat] [exp] [workplace] [type] [>P75] |
Top companies by median salary (default: P90) |
/outliers [city] [cat] [exp] [workplace] [type] |
Offers outside the normal salary range |
/benefits [city] [cat] [exp] [workplace] |
B2B benefits — vacation, sick leave, extras |
/recent [days] [city] [cat] [exp] [workplace] [type] |
Recently published offers (default: 3 days) |
/progression [city] [cat] [type] [workplace] |
Salary progression across experience levels |
/compare <values...> [filters...] |
Compare salaries across cities, categories, or types |
/show <company> |
All offers for a company with vs-median deltas |
/companies |
List companies in loaded data |
/status |
Summary of loaded data and active filters |
/clear |
Clear screen and reset session |
/help |
Full command reference with examples |
/quit |
Exit |
Parameters
| Parameter | Allowed values |
|---|---|
[city] |
Warszawa, Kraków, Wrocław, Gdańsk, Poznań, Łódź, Katowice, ... |
[cat] |
javascript, python, java, net, devops, data, go, mobile, testing, ... |
[exp] |
junior, mid, senior, c_level |
[workplace] |
remote, hybrid, office |
[type] |
b2b, permanent, mandate, internship |
[>Pn] |
Percentile threshold for /top — e.g. >P75, >P90 |
[days] |
Number of days for /recent — e.g. 7 (default: 3) |
All filter parameters are optional — omit them to search broadly. Parameters can appear in any order.
/compare examples
/compare Kraków Warszawa python senior b2b # compare 2 cities
/compare Kraków python java senior b2b # compare categories
/compare Kraków python junior senior b2b # compare experience
/compare Kraków python senior b2b permanent # compare employment types
/compare Kraków python remote office b2b # compare workplace types
Pass 2+ values from one dimension — the rest are filters.
Development
git clone https://github.com/m-grzesiak/IT-job-offers-analyzer.git
cd IT-job-offers-analyzer
python -m venv .venv && source .venv/bin/activate
pip install -e .[test]
Run tests:
pytest
Build and publish:
pip install build twine
python -m build
twine upload dist/*
How it works
- Data fetching — pulls offers from the justjoin.it REST API with pagination. No external HTTP libraries — just
urllib. Browser-like headers for compatibility. - Salary normalization — the API's salary unit field is unreliable, so
normalize_monthly()uses value magnitude heuristics to detect hourly/daily/monthly/yearly rates and convert to monthly PLN. - Analysis — IQR-based outlier detection, percentile computation, and benefit keyword matching against HTML offer bodies.
- Caching — offers are cached per session. Re-fetching only happens when filters change or detail loading is needed.
Disclaimer
This project is intended for educational and personal use only. It is not affiliated with or endorsed by justjoin.it. No scraped data is stored or redistributed — all analysis happens locally in your terminal session. Use responsibly and in accordance with the target website's terms of service.
License
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file itjobs-0.3.0.tar.gz.
File metadata
- Download URL: itjobs-0.3.0.tar.gz
- Upload date:
- Size: 48.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
56f7a13fd75096c461f3c348b43e7254bb0869236905957b3c5a3c0a159c8eab
|
|
| MD5 |
a4f16ce67c83b03459c24967c6da3b2d
|
|
| BLAKE2b-256 |
85665810cb99fdab201d1f7b4eceb413f55ed71e31def5ab328f687de2a6c45b
|
File details
Details for the file itjobs-0.3.0-py3-none-any.whl.
File metadata
- Download URL: itjobs-0.3.0-py3-none-any.whl
- Upload date:
- Size: 39.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ade7991cb67bd84e4fdff6b5aae6322ebc9dfd16602d5cc582d88f22e254a018
|
|
| MD5 |
3b01b81b1559813ee6b59b9f4c109511
|
|
| BLAKE2b-256 |
84c9978c58f2b9cd1ccc6a4072762977f32b94082fb7e9e2d4af7ad41b985b9c
|