Levels Fyi Salary Parser
Pricing
Pay per usage
Levels Fyi Salary Parser
Pricing
Pay per usage
Rating
0.0
(0)
Developer

Ivan Serebryakov
Actor stats
0
Bookmarked
1
Total users
0
Monthly active users
12 days ago
Last modified
Share
Levels.fyi Salary Parser
Apify Actor that scrapes salary data from Levels.fyi company salary pages. Outputs Base, Stock (/yr), Bonus, Level, Years at company, and Years exp per record.
Input
Provide start URLs — direct links to Levels.fyi salary pages, for example:
https://www.levels.fyi/companies/indriver/salaries/software-engineer?country=63&offset=0https://www.levels.fyi/companies/google/salaries/software-engineer?country=1
Optional: maxItems, useApifyProxy, maxConcurrency, maxRequestsPerMinute. See the input schema in the Apify Console or in .actor/input_schema.json.
Output
Dataset with one item per salary row (or one per page when using the .md API), with fields:
companySlug,companyName,positionSluglevel,base,stockPerYear,bonus(objects:{ raw, amount, currency })yearsAtCompany,yearsExpsourceUrl,scrapedAt,source(mdor from browser)
How it works
- For each URL, the Actor first tries the Levels.fyi .md endpoint (e.g.
.../salaries/software-engineer.md?country=63) via HTTP. If that returns data, it is parsed and pushed to the dataset (no browser). - If the .md request fails or returns no compensation data, the URL is opened with Playwright and salary cards (MuiGrid with Base, Stock, Bonus, etc.) are parsed.
This keeps runs fast when the .md API is available and avoids timeouts where possible.
Run locally
$apify run --input-file=INPUT.json
Deploy to Apify
apify loginapify push
Then run the Actor from Apify Console or via API. Using Apify Proxy (useApifyProxy: true) is recommended for browser runs to reduce blocks and timeouts.
Attribution
Data is sourced from Levels.fyi. When using or displaying results, attribute: Levels.fyi (https://www.levels.fyi). See Levels.fyi robots.txt and terms for crawling and use.