Software engineer salaries in India, parsed from Leetcode compensation posts and refreshed automatically.
Leetcode Compensation fetches salary posts from Leetcode discussion forums, parses and normalizes them into structured data using LLMs, and presents everything in a filterable dashboard. Data stays fresh through automated GitHub Action PRs that sync new posts on a regular cadence.
Install uv from Standalone Installers or from PyPI:
uv sync # Install all dependencies from pyproject.tomlThe project uses LM Studio by default (LLM_PROVIDER=lm_studio) with the openai/gpt-oss-20b model for:
- Parsing salaries, years of experience (YOE), and other compensation details from posts
- Normalizing fields like companies, roles, and locations into structured format
uv run leetcomp-syncuv run leetcomp-sync --provider llama_server --model unsloth/Qwen3.5-9B-GGUFSupported providers:
lm_studio(default)llama_server(also supports aliasllama-server)github_models(requiresGITHUB_TOKEN)zai(requiresZAI_API_KEY)
Optional env overrides:
LLM_PROVIDERLLM_MODELLLM_BASE_URL
/opt/homebrew/bin/llama-server \
--hf-repo unsloth/Qwen3.5-9B-GGUF \
--hf-file Qwen3.5-9B-Q4_K_M.gguf \
--port 5000 \
-c 65536
uv run leetcomp-sync --provider llama-server --model unsloth/Qwen3.5-9B-GGUFI've written all the data parsing logic in python by hand. Most of the prompts have been generated with the assistance of claude-sonnet-4.5 and pretty much all of the html file has been generated by claude-opus-4.5.