A professional-grade UK salary intelligence platform — built on ONS open data, deployable to AWS or GCP, and fully GDPR-compliant.
Developed by Shaz Moghaddam · London, UK
SalaryAxis aggregates UK salary data from the Office for National Statistics, applies statistical analysis and CPI inflation adjustment, and delivers fair salary benchmarks through a clean REST API and a polished React dashboard. Built to production standards — multi-stage Docker, zero-downtime ECS deploy, GDPR-compliant consent system.
| Feature | Description |
|---|---|
| Salary Benchmark | Fair salary range for any UK occupation, adjusted for region and experience. Verdict: fair / underpaid / above market. |
| Inflation-Adjusted Trends | Nominal and CPI-adjusted real salary growth 2015–2023. |
| Occupation Profiles | Full distribution stats (P10–P90, IQR, skewness) per SOC group. |
| Regional Analysis | Median pay by UK region with live ONS cost-of-living multipliers. |
| Gender Pay Gap | ONS-standard pay gap by occupation and region, 2015–2023 trend. |
| CAGR Analysis | Compound annual growth rates in real and nominal terms. |
| CSV Export | Every dataset downloadable as a timestamped CSV. |
| Shareable Benchmarks | URL-encoded results — share a benchmark link with anyone. |
| GDPR Compliant | No personal data collected. IP anonymised. Full privacy policy API. |
| Paid Source Ready | LinkedIn, Glassdoor, Indeed stubs — activate via environment variables. |
All data sourced from ONS open datasets under the Open Government Licence v3.0.
| Source | Dataset | Licence |
|---|---|---|
| ONS NOMIS | Annual Survey of Hours and Earnings (ASHE) — NM_99_1 | OGL v3.0 |
| ONS Beta API | Consumer Prices Index (CPIH) — series D7BT | OGL v3.0 |
git clone https://github.com/ShazMoghaddam/salaryaxis.git
cd salaryaxis
make install
python main.py # fetch ONS data → output/*.csv
make dev-api # Terminal 1: Flask :8080
make dev-ui # Terminal 2: React :3000See deploy/DEPLOYMENT.md for Docker and cloud deployment.
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/v1/health |
Liveness + GDPR + paid source status |
GET |
/api/v1/occupations |
SOC 2020 groups with salary stats |
GET |
/api/v1/salary/benchmark |
Fair salary range recommendation |
GET |
/api/v1/salary/trends |
Nominal + real trends 2015–2023 |
GET |
/api/v1/regions |
Median salary by UK region |
GET |
/api/v1/gender-gap |
Gender pay gap by occupation or region |
GET |
/api/v1/analysis/distribution |
Full distribution stats |
GET |
/api/v1/analysis/cagr |
Compound annual growth rates |
GET |
/api/v1/consent/status |
GDPR consent requirements |
POST |
/api/v1/consent/record |
Record consent decision |
GET |
/api/v1/privacy |
Machine-readable privacy policy |
salaryaxis/
├── config.py / main.py / wsgi.py / gunicorn.conf.py / Makefile
├── data/ ons_fetcher.py · cpi_fetcher.py · sources/paid_sources.py
├── pipeline/ processor.py · analyser.py · benchmarker.py · gender_analyser.py
├── api/ __init__.py · middleware/ · services/ · routes/
├── frontend/src/ context/ · components/ · hooks/ · pages/ · services/
├── tests/ 232 tests — all passing ✓
├── deploy/ DEPLOYMENT.md · aws/ · gcp/ · setup/
└── .github/ ci.yml · deploy-aws.yml · deploy-gcp.yml
make install make test make dev-api make dev-ui
make build make build-docker make deploy-aws make deploy-gcp
make pipeline make clean make healthNo personal data collected. Salary calculator runs client-side.
IP anonymised (last octet stripped). 30-day log retention.
Full privacy policy at /api/v1/privacy.
Python 3.12 · Flask 3 · Gunicorn · Pandas · NumPy · SciPy · React 18 · Vite · Recharts · Docker · nginx · GitHub Actions · AWS ECS Fargate or GCP Cloud Run · ONS open data
Shaz Moghaddam (Ethan Shahrooz Moghaddam) — London, UK
🌐 shazmoghaddam.github.io · 💼 linkedin.com/in/shazmoghaddam · 🐙 github.com/ShazMoghaddam · 📧 shaz.moghaddam@gmail.com
MIT — see LICENSE. Copyright © 2026 Shaz Moghaddam (Ethan Shahrooz Moghaddam).
Data from the ONS is licensed under the Open Government Licence v3.0.