LinkedIn Jobs Scraper avatar

LinkedIn Jobs Scraper

Pricing

from $0.60 / 1,000 jobs

Go to Apify Store
LinkedIn Jobs Scraper

LinkedIn Jobs Scraper

Scrape LinkedIn job postings to CSV, Excel or JSON: title, company, location, exact posting date and link. From $0.60 per 1,000 jobs. Descriptions, employment type, seniority and salary on request. Monitor and track new postings, or find remote roles and who is hiring in your city. No account.

Pricing

from $0.60 / 1,000 jobs

Rating

0.0

(0)

Developer

Stable

Stable

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Turn a LinkedIn job search into a spreadsheet. Type what you would type into the search box — or paste the URL of a search you already built on LinkedIn — and every posting comes back as a row.

No LinkedIn account. No cookie, session or password. Nothing to install.

One row, from a real run

{
"jobId": "4441090127",
"title": "Senior Python Developer",
"company": "Leidos",
"companyUrl": "https://www.linkedin.com/company/leidos",
"location": "San Antonio, TX",
"postedDate": "2026-08-04",
"postedAgo": "2 weeks ago",
"isNew": false,
"isActivelyHiring": true,
"isEarlyApplicant": false,
"url": "https://www.linkedin.com/jobs/view/4441090127",
"searchQuery": "python developer",
"searchLocation": "United States",
"scrapedAt": "2026-08-21T09:14:00+00:00"
}

16 fields on every job. Switch on descriptions and each row carries 27, or up to 35 when the employer published a pay range:

{
"descriptionText": "Description\n\nPython Developer\n\nWho We Are ...",
"descriptionLength": 6250,
"employmentType": "Full-time",
"seniorityLevel": "Mid-Senior level",
"jobFunction": "Engineering and Information Technology",
"industries": "IT Services and IT Consulting",
"applicants": 25,
"applicantsText": "Be among the first 25 applicants",
"applicantsAreExact": false,
"salaryText": "$85,000.00/yr - $120,000.00/yr",
"salaryMin": 85000,
"salaryMax": 120000,
"salaryPeriod": "year",
"salaryCurrency": "$",
"hasSalary": true
}

How complete the data is

Measured over 730 job cards from twelve keyword and location pairs across three countries, and 26 job pages:

FieldPresent on
Job title, company, company page, location100%
Exact posting date — 2026-08-04, not "2 weeks ago"100%
Company logo100%
"Actively hiring" / "Be an early applicant"61%
Marked new by LinkedIn17%
Description, employment type, seniority, job function, industries100% of job pages
Applicant count100% of job pages
Pay rangeabout 1 posting in 10 — it is there when the employer published one

Numbers that are not exact say so. LinkedIn stops counting applicants at 200 and writes "Over 200 applicants"; when it does, applicants is 200 and applicantsAreExact is false.

Filters, and which ones are real

LinkedIn's public job search — the one it serves without a login — accepts several of its own filters and does not apply them. Measured 21 August 2026: workplace type, job type, experience level, salary band, Easy Apply and sort order all come back as an unfiltered result set. Four mutually exclusive filters returned one identical page of sixty jobs, and not one of the sixty "remote" jobs had a remote location.

So this actor divides its filters into what LinkedIn really does and what it does itself.

Applied by LinkedIn, before anything is fetched — these cost you nothing:

  • keywords, including an exact phrase in quotes
  • location — a city, region or country
  • posted within the past 24 hours, week or month
  • a specific company, when your pasted URL carries its id

Applied by this actor, from each job's own page:

  • employment type — Full-time, Part-time, Contract, Temporary, Internship…
  • seniority level — Internship, Entry level, Associate, Mid-Senior, Director…
  • job title must contain / must not contain
  • posted on or after / on or before an exact date

Choosing employment type or seniority turns descriptions on, because those two values exist nowhere else. A job dropped by any filter is never charged for.

Not offered, because the data is not there: workplace type — remote, hybrid or on-site. It appears nowhere on LinkedIn's logged-out job search: the location field said "Remote" on 0 of 730 measured cards, and none of 26 job pages carried a workplace field. A filter for it here would be a switch that changes nothing.

Recipes

A weekly market report. Searches: python developer, data engineer, platform engineer. Location: Berlin, Germany. Posted within: Past week. Schedule it for Monday morning.

Only what is new. Posted within: Past 24 hours, on a daily schedule. LinkedIn applies that window itself, so the run is small and so is the bill.

Hiring signals for sales. Leave descriptions off, switch on Report how many jobs match in total, and run one search per target city. The company, companyUrl and isActivelyHiring columns are the list; the total tells you how hot each market is.

A shortlist you can read. Turn descriptions on, set Job title must contain to senior, and Skip job titles containing to intern, sales. Everything filtered out is filtered before it is billed.

Use LinkedIn's own filter UI. Build the search on LinkedIn, copy the URL from the address bar, paste it into Searches. The run tells you if a filter in it is one LinkedIn ignores when logged out.

What it costs

Two charges, and the second one only if you ask for it:

per 1,000
a job row$0.60
its full description, employment type and seniority+$0.30

A typical run — 1,000 jobs with no descriptions — is $0.60. The same 1,000 with descriptions is $0.90.

You are not billed for: a job that arrives twice (LinkedIn's own result list shifts between requests, so this happens on roughly one job in five), a job dropped by any filter, or a description that could not be fetched because the posting was taken down.

Limits, stated plainly

  • About 400–500 results per search. LinkedIn's public job search stops serving results past that depth — reached on nine of twelve measured searches, earlier on the other three. To cover a whole market, split it by city or by job title rather than asking one search for more.
  • The same job can appear on two pages. Duplicates are removed by job id and never billed twice.
  • Locations are matched literally. Berlin, Germany works; a misspelt city returns nothing rather than something close.
  • No workplace type. See above.
  • Public postings only. Anything behind a LinkedIn login — recruiter tools, saved searches, applicant data — is out of scope by design.
  • Free Apify plan: works. Large runs are limited by your own Apify usage, not by this actor. Start with maxJobs at 100.

Every run explains itself

Each run writes a RUN_SUMMARY record next to the dataset: jobs stored and charged, job pages fetched and how many had been taken down, searches that returned nothing, which filter dropped what and how many, duplicates skipped, how many jobs LinkedIn says match in total, and any filter in a pasted URL that LinkedIn ignores.

An empty dataset always says why it is empty.

Questions

Do I need a LinkedIn account or cookies? No. This reads the public job search LinkedIn serves to a visitor who is not signed in.

Can it get me applicants, recruiter details or InMail? No. That is behind a login and is not what this does.

Why is the posting date better than "2 weeks ago"? Because you can sort and filter by it. LinkedIn shows the words and carries the date; you get both.

Can I collect an entire country's job market? In slices. One search runs out at 400–500 results, so a country is covered by several searches — by city or by job title — which is also how you keep each run small and cheap.

How fresh is the data? It is fetched when you press Start. Nothing is cached.