levels.fyi Salary Scraper — Tech Compensation Data avatar

levels.fyi Salary Scraper — Tech Compensation Data

Pricing

Pay per event

Go to Apify Store
levels.fyi Salary Scraper — Tech Compensation Data

levels.fyi Salary Scraper — Tech Compensation Data

Scrape individual salary & total-compensation records from levels.fyi by company slug, company-salaries URL, or job-family URL. One flat row per submission: title, level, focus, years of experience, base, stock, bonus, total comp, location & demographics. JSON/CSV.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Muhamed Didovic

Muhamed Didovic

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

2 days ago

Last modified

Categories

Share

levels.fyi Salary Scraper 💰

How the levels.fyi Salary Scraper works

Pull real, individual salary and total-compensation records from levels.fyi — the community-sourced database that tech workers use to benchmark pay. Feed it a company slug (google, meta, amazon), a company-salaries URL, or a specific job-family URL, and get back one clean, flat row per submission: company, title, level, focus, years of experience, base / stock / bonus, total comp, location, work arrangement and self-reported demographics.

No login, no browser automation, no manual copy-paste from tables — just structured JSON/CSV you can drop straight into a spreadsheet, a comp model, or a dashboard.


💡 Why use this scraper

  • Individual records, not just averages. Most levels.fyi views show medians. This actor harvests the underlying per-submission samples — the raw data points behind the charts.
  • Benchmark compensation across companies, levels and locations for offer negotiation, comp-band design or market research.
  • Whole-company sweeps. Give it just google and it walks every job family (Software Engineer, Product Manager, Data Scientist, Sales, and 50+ more) automatically.
  • Rich per-row detail — base salary, average annual stock, bonus, total comp, first-year figures, focus tag (e.g. Machine Learning), years of experience / at company / at level, work arrangement, and demographics when the submitter shared them.
  • Fast & reliable — pure HTTP over residential IPs against the embedded page data; typical runs finish in seconds.

📋 What you can scrape

InputExampleWhat you get
Company sluggoogleEvery job family on Google's salaries page → all individual records
Company-salaries URLhttps://www.levels.fyi/companies/meta/salariesSame as above, from a pasted URL
Job-family URLhttps://www.levels.fyi/companies/amazon/salaries/software-engineerJust that one role's individual records
Job-family filter["software-engineer", "product-manager"]Restrict a company sweep to specific roles

🔧 Input

FieldTypeDescription
companySlugsarrayCompany slugs, e.g. ["google", "meta", "amazon"]. Each expands to every job family on that company's salaries page.
startUrlsarrayCompany-salaries URLs and/or specific job-family salary URLs. Auto-classified.
jobFamiliesarrayOptional filter — only scrape these job-family slugs (e.g. software-engineer, data-scientist). Empty = all.
maxItemsintegerHard cap on total rows for the run.
maxItemsPerCompanyintegerCap records harvested per company.
maxConcurrencyintegerParallel requests (default 6).
proxyobjectFree-tier proxy config (defaults to Apify Residential, US). Paid runs use a built-in US residential pool.

Example input

{
"companySlugs": ["google", "meta"],
"jobFamilies": ["software-engineer", "product-manager"],
"maxItems": 2000
}

⚙️ How it works

  1. Company page — for each company slug / URL, the actor loads /companies/{slug}/salaries and reads the embedded page data to enumerate every job family listed for that company.
  2. Job-family pages — it then visits each /companies/{slug}/salaries/{jobFamily} page and extracts the individual salary submissions embedded in the page's data payload (grouped by company level).
  3. Flat rows — every submission becomes one dataset row with a stable uuid, so re-runs and multi-family sweeps deduplicate cleanly.

All requests go through US residential proxies with automatic session rotation and retries on rate-limits, so runs stay reliable at scale.


📤 Output

Each row is one individual compensation submission:

{
"rowType": "salary",
"uuid": "6e828129-7eb5-400f-8c56-85f9c6379956",
"company": "Google",
"companySlug": "google",
"title": "Software Engineer",
"jobFamily": "Software Engineer",
"jobFamilySlug": "software-engineer",
"level": "L3",
"levelName": "L3",
"focusTag": "Full Stack",
"yearsOfExperience": 0,
"yearsAtCompany": 0,
"yearsAtLevel": null,
"offerDate": "2026-06-07T05:33:59.048Z",
"location": "Pittsburgh, PA",
"countryId": 254,
"dmaId": 508,
"workArrangement": "hybrid",
"compPerspective": "offer",
"employmentType": "full_time",
"baseSalary": 139000,
"totalCompensation": 159000,
"avgAnnualStockGrantValue": 20000,
"avgAnnualBonusValue": 0,
"gender": "female",
"ethnicity": null,
"education": null,
"sourceUrl": "https://www.levels.fyi/companies/google/salaries/software-engineer",
"scrapedAt": "2026-07-06T03:19:23.279Z"
}

Key output fields

FieldMeaning
uuidStable levels.fyi submission id (dedup key)
company / title / levelCompany, role and company-native level (L3, E5, …)
focusTagSpecialization (e.g. Machine Learning, Full Stack)
yearsOfExperience / yearsAtCompany / yearsAtLevelExperience context
baseSalary / avgAnnualStockGrantValue / avgAnnualBonusValueComp breakdown
totalCompensationHeadline total comp
firstYearTotalCompensationFirst-year total (where reported)
location / workArrangement / compPerspectiveWhere, how and offer-vs-current
gender / ethnicity / educationSelf-reported demographics (when shared)
offerDateWhen the offer/submission was dated

❓ FAQ

Are these individual data points or averages? Individual submissions. The actor pulls the underlying per-record samples behind levels.fyi's charts, so you can slice and aggregate them yourself.

Which companies are supported? Any company on levels.fyi. Use the slug from the URL — https://www.levels.fyi/companies/**stripe**/salariesstripe.

Which job families can I scrape? Whatever the company page lists — Software Engineer, Product Manager, Software Engineering Manager, Data Scientist, Hardware Engineer, Sales, Recruiter, Technical Program Manager and dozens more. Leave jobFamilies empty to grab them all.

Is the money in USD? Amounts are the values levels.fyi stores for each record. For US roles that is USD. International records carry their own currency where levels.fyi provides it.

How much data can I get per company? levels.fyi surfaces a bounded set of recent sample records per level, so expect dozens to a few hundred individual records per company depending on how many families and levels it has.


🛟 Support

Run into a company that won't parse, a field you need added, or a schema question? Open an issue on the actor's Issues tab with the input you used — most requests are quick fixes.


⚠️ Disclaimer

This actor collects publicly available compensation data from levels.fyi for research, benchmarking and analytics. It does not access any login-gated content and stores no personal-account data. Individual submissions on levels.fyi are self-reported and anonymized by the source. You are responsible for using the scraped data in compliance with levels.fyi's Terms of Service and all applicable laws (including data-protection regulations). This actor is not affiliated with, endorsed by, or sponsored by levels.fyi.


🔎 SEO Keywords

levels.fyi scraper, levels fyi salary scraper, tech salary data, total compensation scraper, tech comp benchmarking, software engineer salary data, FAANG salary scraper, compensation dataset, salary benchmarking API, levels.fyi API, stock and bonus data, tech pay data, salary negotiation data, comp band research, levels fyi companies salaries.