Jobs
Levels.fyi Compensation Scraper
Scrape verified tech compensation data from Levels.fyi by company — total comp, base salary, stock, bonus, and level breakdowns by job family, normalized into one row per data point for CSV, JSON, or API export.
Free Apify credit covers a first run. No credit card to try.
What this Actor scrapes
Levels.fyi crowdsources tech-industry compensation reports and normalizes them into levels, total comp, base, stock, and bonus per company and job family — the closest thing to a public pay ladder for tech roles. This Actor parses that data straight out of the page's own embedded JSON: point it at one or more companies and it writes one structured row per individual submission (base, stock, and bonus kept separate — the differentiator most compensation scrapers flatten away) or one row per title in a lightweight company-wide overview, ready for comp-benchmarking spreadsheets, recruiting tools, or internal pay-band research.
What we handle for you
- 🎯 Two granularities, your call — component-separated individual submissions (base/stock/bonus kept apart) or lightweight company-wide aggregates.
- 🔁 We retry with exponential backoff on
408 / 429 / 503and honourRetry-After— up to 5 attempts per page. - 🌐 We route every request through Apify Proxy, residential preferred and pinned to the US, so your dataset isn't tied to one exit IP.
- 🧊 Clean, typed dataset rows — Pydantic-validated, ISO-8601 timestamps, deduped by submission ID, JSON / CSV / Excel export straight from the Apify Console.
- 🔍 Every row carries its submission-count context — so you always know how much of the underlying sample you're looking at, never presented as more complete than it is.
- 💰 Pay-Per-Event pricing — you only pay for rows that hit your dataset. No data, no charge.
Use cases
- Comp benchmarking — pull Levels.fyi's per-level total comp, base, stock, and bonus for target companies into a spreadsheet or BI tool.
- Offer negotiation research — compare a candidate's offer against Levels.fyi's published bands for the same company and job family.
- Recruiting + TA analytics — feed normalized, component-separated compensation rows into a sourcing or comp-modeling pipeline.
- Internal pay-band research — track how a peer company's published levels and comp move over time.
Input
Paste this into the Apify Console, or send it as the run input over the API. Proxy settings are on by default; you rarely need to touch them.
| Field | Type | Required | What it does |
|---|---|---|---|
mode | string | no | 'Company + job family' pulls per-level compensation rows for one or more job families at each company. 'Company overview' pulls the company-wide summary row instead. |
companies | array | yes | Levels.fyi company URL slugs, e.g. 'google', 'meta', 'apple' — not arbitrary display names. |
jobFamilies | array | no | Levels.fyi job-family URL slugs, e.g. 'software-engineer', 'product-manager'. Required (non-empty) when Mode is 'Company + job family'; every (company, job family) pair is fetched. |
maxResults | integer | no | Hard cap on dataset rows for this run. |
{
"mode": "company_job_family",
"companies": [
"google"
],
"jobFamilies": [
"software-engineer"
],
"maxResults": 5,
"proxyConfiguration": {
"useApifyProxy": true
}
} Output
One row per result, schema-validated before it is written. Export JSON, CSV, Excel or XML from the run, or read it over the API.
granularitycompanycompany_slugjob_familyjob_family_slugtitleleveltracklocationyears_of_experienceyears_at_companybase_salarystock_annual_valuebonus_annual_valuetotal_compensationcurrency_code
{
"granularity": "individual_submission",
"company": "Google",
"company_slug": "google",
"job_family": "Software Engineer",
"job_family_slug": "software-engineer",
"title": "Software Engineer",
"level": "L3",
"track": "ML / AI",
"location": "New York, NY",
"years_of_experience": 0.0,
"years_at_company": 0.0,
"base_salary": 140000.0,
"stock_annual_value": 2500.0,
"bonus_annual_value": 0.0,
"total_compensation": 142500.0,
"currency_code": "USD",
"offer_date": "2026-07-09T17:59:59.627+00:00",
"level_submission_count": 46,
"level_submission_count_last_12_months": 1134,
"source_url": "https://www.levels.fyi/companies/google/salaries/software-engineer",
"scraped_at": "2026-08-06T09:00:00+00:00"
} Pricing
| Event | Price | When |
|---|---|---|
| Actor start | $0.20 | Once per run, covers warm-up and proxy session setup. |
| Result row | $0.0018 | Per result written to the dataset. |
You pay only for results that land. Cap any run with maxTotalChargeUsd. See pricing & billing for worked examples.
FAQ
Do I need a Levels.fyi account or API key?
What's the difference between the two modes?
Are the individual-submission rows the complete Levels.fyi dataset?
level_submission_count and level_submission_count_last_12_months so you can see exactly how much of the underlying sample you're getting, instead of mistaking a preview for the full population.What format do company and job-family slugs need to be in?
What happens if I request a company or job family that doesn't exist?
Ready to run it?
Open the listing on Apify, paste the input above, and watch rows land. If it ever breaks, it is our problem before it is yours.
Related Actors