Pricing
from $2.80 / 1,000 results
Levels Fyi Salary Scraper
Scrape individual salary submissions from Levels.fyi β base, stock, bonus, TC by company, role, level, and location.
Pricing
from $2.80 / 1,000 results
Rating
5.0
(1)
Developer
Actor stats
0
Bookmarked
22
Total users
8
Monthly active users
26 days
Issues response
4 days ago
Last modified
Categories
Share
Levels.fyi Salary Scraper
Scrape salary data from Levels.fyi β individual salary submissions with company, role, level, location, YoE, and full comp breakdown. No API key needed.
Features
- 1 row = 1 salary submission: each individual submission is its own row with full comp breakdown
- 2 scraping modes: specific companyΓrole combos, or all roles for given companies
- Per-level context: median TC, base, stock, bonus for each career level (L3βL8, IC1βIC6, etc.) denormalized on each row
- Percentile data: p10/p25/p50/p75/p90 for total comp, base salary, stock grants, and bonus
- 80 job families: software engineer, product manager, data scientist, and 77 more
- 3,000+ companies: from FAANG to startups β every company with data on Levels.fyi
- Company metadata: industry, HQ location, employee count, funding stage, vesting type, ticker
- Sub-title breakdowns: specializations within each role (e.g. "Backend SWE", "ML Engineer") with median TC
- No headless browser: pure HTTP + JSON β fast, cheap, reliable
Input
| Field | Type | Default | Description |
|---|---|---|---|
mode | string | "specific" | "specific" = exact company+role combos. "companies" = all roles for given companies. |
companies | string[] | ["google"] | Company slugs. Find slugs in Levels.fyi URLs (e.g. levels.fyi/companies/google β "google"). |
roles | string[] | β | Role slugs. Used in specific mode only β ignored in companies mode. See full list below. |
maxResults | integer | 0 | Maximum rows to output. Actor stops when reached. 0 = unlimited. |
maxRequestsPerSecond | number | 20 | Rate limit (1β50 req/s). |
timeoutSeconds | integer | 300 | Max run time in seconds before graceful stop. |
Usage Examples
Scrape Google Software Engineer salaries:
{"mode":"specific","companies":["google"],"roles":["software-engineer"]}
Scrape all roles at FAANG companies:
{"mode":"companies","companies":["google","meta","apple","amazon","netflix"]}
Scrape multiple roles at multiple companies:
{"mode":"specific","companies":["stripe","coinbase","databricks"],"roles":["software-engineer","product-manager","data-scientist"]}
Output
Each result is one individual salary submission. For example, "Google Γ Software Engineer" at level L3 with 15 recent submissions produces 15 rows. Company, role, and level metadata is denormalized into every row for easy filtering and export.
Example Row
{"uuid":"d0c6e935-...","offerDate":"2026-03-18T10:02:08.653+00:00","yearsOfExperience":12,"yearsAtCompany":3,"focusTag":"Data","location":"New York, NY","baseSalary":120000,"totalCompensation":160000,"stockGrantAnnual":40000,"bonusAnnual":0,"company":"Google","companySlug":"google","companyId":1,"industry":"Tech","ticker":"GOOG","hqCity":"Mountain View","hqState":"California","employeeCount":258750,"fundingStage":"post_ipo","vestingType":"RSU","role":"Software Engineer","roleSlug":"software-engineer","level":"L3","levelSecondaryName":"SWE II","levelMedianTC":204005,"levelAvgBase":157074,"levelAvgStock":33157,"levelAvgBonus":13774,"levelSubmissions":54,"levelSubmissionsLast12Mo":904,"levelUrl":"/companies/google/salaries/software-engineer/levels/l3","roleTotalSubmissions":21959,"percentiles":{"totalComp":{"p10":175000,"p25":206000,"p50":319000,"p75":398750,"p90":490000},"baseSalary":{"p10":150000,"p25":166000,"p50":199000,"p75":220000,"p90":242000},"stockGrant":{"p10":25000,"p25":40000,"p50":90000,"p75":140000,"p90":200000},"bonus":{"p10":0,"p25":0,"p50":30000,"p75":38750,"p90":48000}},"subTitles":[{"title":"Backend Software Engineer","slug":"backend-software-engineer","medianTC":285000,"count":524}],"currency":"USD","scrapedAt":"2026-04-16T17:30:00Z","sourceUrl":"https://www.levels.fyi/companies/google/salaries/software-engineer"}
Output Fields
| Field | Type | Description |
|---|---|---|
uuid | string | Unique submission identifier |
offerDate | string | When the salary was submitted |
yearsOfExperience | number | Total years of professional experience |
yearsAtCompany | number | Years at the current company |
focusTag | string | null | Specialization (e.g. "Data", "ML", "Backend") |
location | string | Submitter's work location |
baseSalary | number | Annual base salary |
totalCompensation | number | Total annual compensation (base + stock + bonus) |
stockGrantAnnual | number | Annual stock grant value |
bonusAnnual | number | Annual bonus amount |
company | string | Company display name |
companySlug | string | URL-safe company identifier |
companyId | number | Levels.fyi internal company ID |
industry | string | null | Industry classification |
ticker | string | null | Stock ticker (public companies) |
hqCity / hqState | string | null | Company HQ location |
employeeCount | number | null | Approximate employee count |
fundingStage | string | null | pre_seed through post_ipo |
vestingType | string | null | RSU, ISO, etc. |
role | string | Job family display name |
roleSlug | string | URL-safe role identifier |
level | string | Primary level name (e.g. "L3", "ICT4") |
levelSecondaryName | string | Alternative level name (e.g. "SWE II") |
levelMedianTC | number | Median total compensation at this level |
levelAvgBase | number | Average base salary at this level |
levelAvgStock | number | Average annual stock grant at this level |
levelAvgBonus | number | Average annual bonus at this level |
levelSubmissions | number | Salary submissions at this level |
levelSubmissionsLast12Mo | number | Submissions in the last 12 months |
levelUrl | string | Level-specific page path |
roleTotalSubmissions | number | Total submissions across all levels for this company Γ role |
percentiles | object | p10/p25/p50/p75/p90 for TC, base, stock, bonus (role-wide) |
subTitles[] | array | Role specializations with median TC |
currency | string | Always "USD" |
scrapedAt | string | ISO 8601 timestamp |
sourceUrl | string | Levels.fyi page URL |
Pricing
Pay Per Result β each individual salary submission is one row.
| Scenario | Rows (approx.) | Description |
|---|---|---|
| 1 company, 1 role | ~50β150 | 10β20 submissions Γ 5β8 levels |
| 5 FAANG companies, all roles | ~3,000β6,000 | ~10β20 submissions per level |
| Top 200 companies, 1 role | ~10,000β30,000 | varies by company size |
Free tier: test with a few companyΓrole combos before committing.
Available Role Slugs
All 80 job families supported by Levels.fyi:
What Stops the Actor
The actor stops when any of these conditions is met (whichever comes first):
- All requests completed β every company Γ role combination has been scraped.
- Max results reached β the
maxResultslimit is hit. The actor saves all rows collected so far and stops. - Timeout reached β the
timeoutSecondslimit is hit. The actor saves all data collected so far and exits gracefully.
In all cases, data already pushed to the dataset is preserved.
Limitations
- Data freshness: Levels.fyi caches pages at CDN for 6 hours. Data reflects submissions up to that window.
- Coverage: Not all companies have data for all 80 roles. Most companies have 2β10 roles with salary data.
- Currency: All compensation figures are in USD. Non-US salaries are converted to USD by Levels.fyi.
- Submissions per level: Each level returns 10β20 recent submissions, not the full history.
- BuildId rotation: Levels.fyi changes its internal buildId on each deploy. The actor handles this automatically β if a request fails, it re-extracts the buildId and retries.
- Volume: ~20,000β30,000 companyΓrole pages exist in total. A full catalog crawl takes several hours. Use
maxResultsortimeoutSecondsto cap runs.
