Levels Fyi Salary Scraper avatar

Levels Fyi Salary Scraper

Pricing

from $2.80 / 1,000 results

Go to Apify Store
Levels Fyi Salary Scraper

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

ShhhLabs

ShhhLabs

Maintained by Community

Actor stats

0

Bookmarked

6

Total users

3

Monthly active users

7 days ago

Last modified

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

FieldTypeDefaultDescription
modestring"specific""specific" = exact company+role combos. "companies" = all roles for given companies.
companiesstring[]["google"]Company slugs. Find slugs in Levels.fyi URLs (e.g. levels.fyi/companies/google"google").
rolesstring[]Role slugs. Used in specific mode only — ignored in companies mode. See full list below.
maxResultsinteger0Maximum rows to output. Actor stops when reached. 0 = unlimited.
maxRequestsPerSecondnumber20Rate limit (1–50 req/s).
timeoutSecondsinteger300Max 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

FieldTypeDescription
uuidstringUnique submission identifier
offerDatestringWhen the salary was submitted
yearsOfExperiencenumberTotal years of professional experience
yearsAtCompanynumberYears at the current company
focusTagstring | nullSpecialization (e.g. "Data", "ML", "Backend")
locationstringSubmitter's work location
baseSalarynumberAnnual base salary
totalCompensationnumberTotal annual compensation (base + stock + bonus)
stockGrantAnnualnumberAnnual stock grant value
bonusAnnualnumberAnnual bonus amount
companystringCompany display name
companySlugstringURL-safe company identifier
companyIdnumberLevels.fyi internal company ID
industrystring | nullIndustry classification
tickerstring | nullStock ticker (public companies)
hqCity / hqStatestring | nullCompany HQ location
employeeCountnumber | nullApproximate employee count
fundingStagestring | nullpre_seed through post_ipo
vestingTypestring | nullRSU, ISO, etc.
rolestringJob family display name
roleSlugstringURL-safe role identifier
levelstringPrimary level name (e.g. "L3", "ICT4")
levelSecondaryNamestringAlternative level name (e.g. "SWE II")
levelMedianTCnumberMedian total compensation at this level
levelAvgBasenumberAverage base salary at this level
levelAvgStocknumberAverage annual stock grant at this level
levelAvgBonusnumberAverage annual bonus at this level
levelSubmissionsnumberSalary submissions at this level
levelSubmissionsLast12MonumberSubmissions in the last 12 months
levelUrlstringLevel-specific page path
roleTotalSubmissionsnumberTotal submissions across all levels for this company × role
percentilesobjectp10/p25/p50/p75/p90 for TC, base, stock, bonus (role-wide)
subTitles[]arrayRole specializations with median TC
currencystringAlways "USD"
scrapedAtstringISO 8601 timestamp
sourceUrlstringLevels.fyi page URL

Pricing

Pay Per Result — each individual salary submission is one row.

ScenarioRows (approx.)Description
1 company, 1 role~50–15010–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,000varies 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):

  1. All requests completed — every company × role combination has been scraped.
  2. Max results reached — the maxResults limit is hit. The actor saves all rows collected so far and stops.
  3. Timeout reached — the timeoutSeconds limit 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 maxResults or timeoutSeconds to cap runs.