LinkedIn Jobs Scraper - Salaries, Descriptions, No Login
Pricing
from $1.38 / 1,000 jobs
LinkedIn Jobs Scraper - Salaries, Descriptions, No Login
LinkedIn jobs scraper by keywords and location, with LinkedIn's filters (date, remote, job type, experience, Easy Apply). Up to 1,000 jobs per search, full description, seniority, applicants, apply type, recruiter, and the salary from the posting as numbers. No login. $2.50 per 1,000 jobs.
Pricing
from $1.38 / 1,000 jobs
Rating
0.0
(0)
Developer
Khandji Omar
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
2 days ago
Last modified
Categories
Security
Limited permissionsShare
LinkedIn job search by keywords and location (or your own LinkedIn search links), with LinkedIn's filters: date posted, remote / hybrid / on-site, job type, experience level, Easy Apply, under 10 applicants, companies. Up to 1,000 jobs per search. Every job comes with its full description, seniority, employment type, industries, applicants, apply type, the recruiter when LinkedIn shows one, and the salary written in the posting turned into numbers. No LinkedIn account, no cookies.
Price: $2.50 per 1,000 jobs, dropping to $0.35 per 1,000 on 17 November 2026, details included. The first 10 jobs of every run are free. Failed searches are never charged.
In short: what you give, what you get, what it costs
| You give | Keywords and a location, or your own LinkedIn job search links, with LinkedIn's filters |
| We do | Search LinkedIn's public job pages and open every job |
| You get | One row per job (up to 1,000 per search): title, company, location, date, applicants, full description, seniority, employment type, industries, apply type, recruiter when shown, and the salary turned into numbers |
| It costs | $2.50 per 1,000 jobs, $0.35 from 17 November 2026, no start fee. Optional scheduled monitoring: +$0.06 per check (one-off runs never pay it). The first 10 jobs of every run are free. Errors are never charged. No supplier fee |
| It does not | Sign in to LinkedIn, or give the external apply link (LinkedIn shows it only to signed-in members) |
A real result row is shown further down this page.
Free tier — 10 results free on every run
The first 10 results of every run are free, on every run you ever make — not a one-off trial. One guard: the free allowance never covers more than half of a run, so the offer stays sustainable.
Measured, not promised
Same search on 17 October 2026, "data engineer" in United States, 200 jobs, on three Actors. All three returned the same 200 jobs.
| LinkedIn Jobs Scraper (om_kh) | curious_coder (most used) | valig | |
|---|---|---|---|
| Jobs returned | 200 of 200 | 200 of 200 | 200 of 200 |
| Description, seniority, employment type, industries | 200 | 200 | 200 |
| Salary as numbers (min, max, period) | 142 | 0 (19 as text) | 0 (19 as text) |
| Apply type (Easy Apply or external) | 200 | — | 200 |
| Recruiter (name, title, profile) | 5 | 5 | 5 |
| Time | 86 s | 161 s | 133 s |
The 142 salaries come from the pay the employer writes in the description, such as "The projected compensation range for this position is $77,600.00 to $176,000.00 (annualized USD)".
A second search, "registered nurse" in Texas, past week, full-time: 50 of 50 jobs in 32 seconds.
What does this LinkedIn Jobs scraper do?
Type job titles or keywords and a location, or paste links copied from linkedin.com/jobs/search. Each keyword is searched in each location, so you can go past LinkedIn's 1,000 results per search by splitting a country into cities.
For each job you get one clean row:
title,companyName,companyUrl,companyLogo,location,postedDate(exact day),postedAgo;description(plain text) anddescriptionHtml;seniorityLevel,employmentType,industries;applicants("Over 200 applicants") andapplicantsCount;applyType:EASY_APPLYorEXTERNAL;salaryMin,salaryMax,salaryPeriod,salaryTextwhen the posting states its pay, andsalaryShownwhen LinkedIn displays a salary;benefits("Actively Hiring"), and the recruiter (jobPosterName,jobPosterTitle,jobPosterProfileUrl) when LinkedIn shows one;jobUrl,jobIdand thesearchQuerythat found it;- the company (option
includeCompany, on by default):companyDescription,companyEmployeesCount,companySize,companyWebsite,companyIndustry,companyHeadquarters,companyFollowers; - the same job under the field names other LinkedIn scrapers use, so a switch needs no code change:
id,link,descriptionText,postedAt,salaryInfo,companyLinkedinUrl, andapplyUrlfor Easy Apply jobs.
Compared with curious_coder/linkedin-jobs-scraper
Read on the Store on 2026-10-23 (Linkedin Jobs Scraper). Where it does better, this section says so.
- Built on the site's own data, not a resold scraper: no second Actor between you and the source.
- Every input of that Actor exists here: search links, keywords, location,
geoId, radius, date posted, company ids, under 10 applicants, a limit per source (limitPerSource), and splitting a country into its big cities (splitByLocation+splitCountry: US, CA, MX, GB, DE, FR, NL, CH). - Every output field exists here, including the company description, employees and website. We add more: salary as numbers, apply type, exact posting day.
- Free results on every run and a hard cost cap (
maxTotalChargeUsd). - Price: $2.5 per 1,000 here, $2 there.
Why use it
- Salaries you can sort. Pay written in the posting becomes numbers.
- LinkedIn's own filters, applied before the jobs are read.
- Many searches in one run. Keywords x locations, up to 50 searches.
- Only new jobs. Turn on
onlyNewJobsand schedule the run: each run returns only jobs you have not seen yet. - No account. It reads LinkedIn's public job pages, logged out. It never logs in and never solves a CAPTCHA.
- Pay only for jobs delivered. Failed searches are never charged, and
maxTotalChargeUsdcaps every run.
Price
| Price per 1,000 jobs | |
|---|---|
| Until 16 November 2026 | $2.50 |
| From 17 November 2026 | $0.35 |
Every job comes with its details (description, seniority, applicants, salary as numbers) at that price. The first 10 jobs of each run are free. Set Max cost per run (maxTotalChargeUsd) and the run stops before it spends more. Errors are never charged.
Example input
{"keywords": ["data engineer", "analytics engineer"],"locations": ["New York", "Austin", "Remote"],"datePosted": "pastWeek","workplace": ["remote", "hybrid"],"experienceLevels": ["midSenior"],"maxJobsPerSearch": 200,"includeDetails": true,"includeCompany": true}
Tips and limits
- LinkedIn shows at most 1,000 jobs per search: turn on
splitByLocation(one search per big city of a country) or list more places. - The external apply link is shown by LinkedIn only to signed-in members, so
jobUrlis the LinkedIn page of the job. - When LinkedIn slows a request down (429), the run switches to another address and waits.
Use cases
- Job market research: salaries and demand for a role in a city.
- Recruiting agencies: fresh postings with the recruiter and the apply type.
- Job boards and alerts: feed new LinkedIn jobs into your own site or Slack.
Use it from code (API)
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("om_kh/linkedin-jobs-scraper").call(run_input={"keywords": ["data engineer"], "location": "United States"})for job in client.dataset(run["defaultDatasetId"]).iterate_items():print(job["title"], job.get("salaryMin"), job["jobUrl"])
Integrations: n8n, Make, Zapier, Google Sheets
- n8n — the official Apify node, operation Run Actor and get dataset, Actor
om_kh/linkedin-jobs-scraper. - Make — Apify › Run an Actor, then Apify › Get Dataset Items.
- Zapier — Apify › Run Actor; map the dataset items into your next step.
- Google Sheets, webhooks, Slack — add an integration from the Integrations tab of this Actor.
- Schedules — run it every hour or day from Schedules in Apify Console.
Use it from an AI agent (MCP and x402)
Connect Claude Desktop, Cursor, VS Code or any MCP client to Apify's MCP server
at https://mcp.apify.com and add this Actor, om_kh/linkedin-jobs-scraper, as a tool — the
agent passes the same JSON as the run input and gets the dataset back.
AI agents that pay with x402 can run it too, without an Apify account: the Actor charges only per result delivered, so an agent pays exactly for what it gets.
How to use it in 3 steps
- Click Try for free; the form opens with a ready example in Job titles or keywords.
- Optional: change the other fields; every one has a description and a sensible default.
- Click Start and download the results as JSON, CSV or Excel, or read them from the API.
Output example
One real row from a run on Apify:
A real row from this Actor's latest run on Apify (2026-10-23; long texts are cut and people's names hidden here, your dataset has them in full):
{"status": "ok","type": "job","jobId": "4473512745","title": "Senior Data Engineer","companyName": "Faegre Drinker","companyUrl": "https://www.linkedin.com/company/faegredrinker","companyLogo": "https://media.licdn.com/dms/image/v2/D560BAQF36YOXj5UrZA/company-logo_100_100/B56ZfMszx0HEAQ-/0/1751485988648?e=2147483647&v=beta&t=UjiTM...","location": "Minneapolis, MN","postedDate": "2026-10-21","postedAgo": "2 days ago","benefits": "Actively Hiring","jobUrl": "https://www.linkedin.com/jobs/view/4473512745","searchQuery": "data engineer | United States","applicants": "99 applicants","applicantsCount": 99,"description": "Faegre Drinker is a firm designed for clients and designed for you. We understand that our people are critical to our success and we are...","descriptionHtml": "<strong><em>Faegre Drinker is a firm designed for clients and designed for you. We understand that our people are critical to our success...","seniorityLevel": "Not Applicable","employmentType": "Full-time","industries": "Law Practice","applyType": "EXTERNAL","salaryText": "$139,300 - $159,200","salaryMin": 139300,"salaryMax": 159200,"salaryPeriod": "year","salarySource": "posting_text"}
Every field
| Field | What it holds |
|---|---|
jobId | LinkedIn job ID |
title | job title |
companyName | company |
companyUrl | company page on LinkedIn |
companyLogo | company logo |
location | location |
postedDate | date posted |
postedAgo | how long ago, as LinkedIn shows it |
jobUrl | job page |
applicants | applicants text (e.g. Over 200 applicants) |
applicantsCount | applicants as a number |
description | full job description, plain text |
descriptionHtml | full job description, HTML |
seniorityLevel | seniority level |
employmentType | full-time, contract... |
industries | industries |
applyType | Easy Apply or company site |
benefits | benefits listed |
salaryText | salary as shown |
salaryMin | salary minimum |
salaryMax | salary maximum |
salaryPeriod | per year, per hour... |
salarySource | where the salary comes from (job post or LinkedIn estimate) |
salaryShown | true when a salary is shown |
jobPosterName | recruiter who posted it, when shown |
jobPosterTitle | recruiter's title |
jobPosterProfileUrl | recruiter's profile |
searchQuery | your search |
FAQ
Is it legal to scrape LinkedIn? This Actor collects only publicly available LinkedIn data and never logs in. You are responsible for how you use it; check LinkedIn's terms and your local law (GDPR, CCPA) if you store personal data, and ask a lawyer if unsure.
Do I need an account, cookies or an API key? No. You only need an Apify account to run it.
What data do I get? Jobs with title, company, place, exact date, full description, seniority, employment type, applicants, apply type and salary. Download it as JSON, CSV, Excel, HTML or XML, or read it from the API.
Am I charged when something fails? No. An input that fails is listed with its reason in the run summary and is never charged.
Can I run it on a schedule? Yes. Create a schedule in Apify Console (hourly, daily, weekly) and connect webhooks, Google Sheets, Slack, n8n, Make or Zapier.
Can I use it from Python, JavaScript or an AI agent?
Yes: see the code samples above, or connect AI agents through MCP with the linkedin_jobs tool.
All input fields
The main fields are described above; these are the others the form accepts:
companyIds(Company IDs) — Optional LinkedIn company IDs (the f_C value of a company's job search link).distanceMiles(Distance (miles)) — Radius around the location: 5, 10, 25, 50 or 100.easyApply(Easy Apply only) — Only jobs with LinkedIn Easy Apply.jobTypes(Job type) — Leave empty for all.searchUrls(Or paste LinkedIn job search links) — Links copied from linkedin.com/jobs/search with your filters already set.sortBy(Sort) — Order of the results.under10Applicants(Under 10 applicants) — Only jobs with fewer than 10 applicants.
Your feedback
Did this Actor save you time? A short review on the Reviews tab helps other people find it, and every review is read. Something missing or broken? Open an issue on the Issues tab: it is answered and fixed fast.