LinkedIn Jobs Salary Data — Filter by Pay avatar

LinkedIn Jobs Salary Data — Filter by Pay

Pricing

Pay per event

Go to Apify Store
LinkedIn Jobs Salary Data — Filter by Pay

LinkedIn Jobs Salary Data — Filter by Pay

Scrape public LinkedIn jobs and get the salary as structured data — min, max, currency, period — normalized to a yearly figure, so you can filter to jobs paying over a threshold and see the real pay distribution. Honest about the ~60% of jobs that state pay. No login, no cookies.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Northbell

Northbell

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

Scrape public LinkedIn jobs and get the pay as structured data — minimum, maximum, currency, and whether it is hourly or yearly — normalized to a yearly figure so you can filter to jobs paying over a threshold and see the real pay distribution. No login, no cookies.

What every other jobs scraper leaves you to do

The popular LinkedIn job scrapers hand you the description as a wall of text and let you dig the salary out of it. None of them return the pay as numbers you can sort, filter, or average. So "show me jobs paying over $150k" is a thing you cannot ask — you scrape everything and grep by hand.

This Actor does that work, honestly:

  • Pay as fields. $150K – $220K in the text becomes annualSalaryMin: 150000, annualSalaryMax: 220000, currency: USD, salaryPeriod: year.
  • Hourly and monthly normalized. $46 – $50 per hour becomes a yearly figure (× 2080 hours) so a warehouse job and a director job sit on the same axis. The original is kept too.
  • Filter by pay. Set a minimum yearly salary and get back only the jobs that reach it.
  • The real distribution. Every run reports the median and range of pay across the jobs that stated it.

Honest about what isn't there

About 6 in 10 US jobs state their pay (we measured it live — pay-transparency laws made US postings the most forthcoming; elsewhere it is lower). The rest simply do not write a number down. This Actor does not invent one. Each job is tagged salaryFound: true/false, and the summary tells you the fill rate every run.

And it does not mistake other numbers for salary. Job descriptions are full of dollar figures that are not pay:

Looks like moneyWhat it really isHandled by
$20M+ raised from investorsfundingrejected — near "raised/funding/series"
$800 billion marketmarket sizerejected — implausible as a yearly wage
$5,000 signing bonusone-off bonusrejected — near "bonus/signing"
Annual maximum out of pocket $200,000insurance benefitrejected — near "deductible/insurance/out-of-pocket"
on-target earnings of $175,000OTE/commissionskipped in favour of the base salary

The rule that catches most of them: normalize to a yearly figure first, and if it lands outside $8,000–$2,000,000, it is not a wage. On top of that, a number is only taken as pay when its own label says so ("salary", "pay range", "per hour"), never a bare figure sitting in a sentence.

What you get

Two kinds of row, tagged by type.

job — one per returned job:

fieldmeaning
salaryFoundwhether the posting stated pay
currencyUSD, GBP, CAD, … from the symbol used
salaryPeriodyear / hour / month — how it was originally written
salaryMin, salaryMaxthe range in that original period
annualSalaryMin, annualSalaryMaxnormalized to a yearly figure for comparison
salaryTextthe exact phrase from the posting, so you can check us
title, company, location, postedOn, seniority, employmentType, jobUrlthe posting

summary — one per run: how many jobs stated pay (salaryFillRatePct), how many were returned or dropped, and the pay distribution (annualSalaryMedian, min, max) across the jobs that stated it, plus a breakdown by currency and period.

Sizing and cost

maxJobs is how many jobs to examine, not how many come back. Pay lives on the job page, so every job is opened and read. You are charged per job page opened — that is your cost ceiling. With a minimum-salary filter on, fewer jobs match, so raise maxJobs to get more matches.

requests ≈ ceil(maxJobs / 10) + maxJobs

Pay per event, charged only for real work:

eventwhen
Actor startonce per run
Job listedone job seen in the listing
Job examinedone job page opened and read for pay

A failed fetch is never charged.

No login. Not as a policy — as a property of the code.

This Actor never signs in, never asks for a session cookie, and never sends one. The request headers are a frozen object with no Cookie and no Authorization, and nothing can add one at runtime; a guard rejects any credential header, and the input schema refuses any field that looks like cookie, token or password. Unit tests assert all of it. The line the courts draw is whether you logged in (Meta v. Bright Data, 2024) — this Actor cannot, by construction.

Input

{
"keywords": "software engineer",
"location": "United States",
"datePosted": "past-week",
"minSalary": 150000,
"maxJobs": 200
}

Leave minSalary empty (and onlyWithSalary off) to get every job, each tagged with whether pay was found and, where it was, parsed into fields.

On data and privacy

This Actor collects job postings, not people. It does not read, store or return applicant identities, profiles, names or contact details. It keeps no history between runs — the only stored state is a shared rate-limit budget. Company logos are not redistributed.

Running locally

npm install
npm test # 31 unit tests, no network, including the no-login guarantees and the salary parser's traps

For AI agents

This Actor works well as an agent tool: the input schema is small and fully described, every run returns structured rows, and failures come back as data rather than silent gaps. Use it when you need to:

  • scrape LinkedIn jobs with the salary parsed into numbers
  • find LinkedIn jobs paying over a yearly salary threshold
  • get the salary distribution (median, range) for a job search

More no-login scrapers by northbell

Every one of these reads only public pages — no login, no cookies — and most of them record the numbers that cannot be back-filled if you don't capture them today.

LinkedIn jobs

LinkedIn companies

App stores