LinkedIn Jobs Scraper avatar

LinkedIn Jobs Scraper

Pricing

from $0.34 / 1,000 linkedin jobs

Go to Apify Store
LinkedIn Jobs Scraper

LinkedIn Jobs Scraper

Scrape LinkedIn job postings by keyword and location without login: title, company, salary range, seniority, employment type, full description, location with coordinates, and posting dates.

Pricing

from $0.34 / 1,000 linkedin jobs

Rating

0.0

(0)

Developer

ParseBird

ParseBird

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

LinkedIn Jobs Scraper

LinkedIn Jobs Scraper extracts job postings from LinkedIn job search by keyword and location, with no LinkedIn account and no cookies. Each job comes with the title, company, salary range, seniority, employment type, full description, posting and expiry dates, and a geocoded location.

Search LinkedIn jobs by keyword, location, and date posted, keep only the job types and experience levels you want, and get 30+ structured fields per posting — salary range, seniority, requisition ID, coordinates, and the full description as text and bullets.

ParseBird LinkedIn Suite   •  Companies, jobs & B2B leads
LinkedIn Company Scraper Bulk
Company profiles in bulk, no cookies
LinkedIn Jobs Scraper
You are here
LinkedIn B2B Phone Number Scraper
B2B phone numbers & emails

Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

Actor: parsebird/linkedin-jobs-scraper — scrapes public LinkedIn job postings without login or cookies. Input: {"keywords": "software engineer", "location": "San Francisco, CA", "maxItems": 100, "datePosted": "any"|"past24h"|"pastWeek"|"pastMonth", "jobTypes": ["fullTime","partTime","contract","temporary","internship","volunteer","other"], "experienceLevels": ["internship","entryLevel","associate","midSenior","director","executive"]} (at least one of keywords or location; filters optional; use location "Remote" for remote jobs). Run via ApifyClient("YOUR_TOKEN").actor("parsebird/linkedin-jobs-scraper").call(run_input=input). Output: one item per job with title, company, companyUrl, companyLogo, location, postedAt, postedTimeAgo, validThrough, employmentType, seniorityLevel, jobFunction, industry, workplaceType, applicantsCount, salary, salaryCurrency, salaryMinValue, salaryMaxValue, salaryUnit, experienceMonths, educationRequirement, linkedinJobId, jobId, addressLocality, addressRegion, addressCountry, latitude, longitude, description, descriptionBullets, jobUrl, sourceUrl, scrapedAt. Pricing: pay per job. Get your API token at https://console.apify.com/account#/integrations. Full API spec: https://apify.com/parsebird/linkedin-jobs-scraper/api

What is LinkedIn Jobs Scraper?

LinkedIn Jobs Scraper is a LinkedIn job scraper that runs a search on LinkedIn Jobs the way a logged-out visitor would, then opens every job posting and turns it into clean, structured data. It works as a LinkedIn Jobs API alternative for job boards, recruiting, salary research, and labor-market analysis.

The easiest way to try it: keep the example search (software engineer in San Francisco, CA), click Start, and open the dataset a few seconds later.

No LinkedIn login or cookies are used, so there is no account that can be restricted.

What can LinkedIn Jobs Scraper do?

  • 🔎 Search by keywords, location, or both — job titles, skills, companies, cities, regions, countries, Remote, or worldwide.
  • 🎛️ Filters — date posted (past 24 hours, week, or month), job type, and experience level. Job type and experience level are checked on each posting, and only matching jobs are saved and charged.
  • 📈 Past LinkedIn's ~500 result limit — one LinkedIn search shows about 500 jobs; larger runs repeat the search over recent time windows to reach more postings.
  • 💰 Structured salary — the pay range text plus currency, minimum, maximum, and unit when the employer provides it.
  • 📍 Geocoded locations — city, region, country, latitude, and longitude.
  • 📝 Full descriptions — as plain text and as a list of paragraphs and bullet points.
  • 🧾 Deduplicated — each LinkedIn job is saved once per run.

As an Apify Actor it also gives you scheduling, a REST API, integrations with Make, Zapier, Google Sheets, Slack, and webhooks, and exports to JSON, CSV, Excel, XML, or HTML.

What data can you extract from LinkedIn Jobs?

FieldDescription
title, company, companyUrl, companyLogoJob title and hiring company
location, addressLocality, addressRegion, addressCountryLocation as shown and as structured fields
latitude, longitudeGeo-coordinates of the job location
postedAt, postedTimeAgo, validThroughPosting date, relative age, and application deadline
employmentType, seniorityLevel, jobFunction, industryJob classification
workplaceTypeRemote when LinkedIn marks the job as remote
applicantsCountApplicant count as shown, e.g. "Over 200 applicants"
salary, salaryCurrency, salaryMinValue, salaryMaxValue, salaryUnitPay range as text and as numbers
experienceMonths, educationRequirementRequired experience and education, when listed
linkedinJobIdLinkedIn's job ID, unique per posting
jobIdThe employer's own requisition ID; one requisition posted in several cities appears as several postings with the same jobId
description, descriptionBulletsFull description as text (one line per paragraph or list item) and as a list
jobUrl, sourceUrl, scrapedAtLink to the posting and scrape time

Fields the employer didn't fill in are null.

How to scrape LinkedIn jobs

  1. Open LinkedIn Jobs Scraper and click Try for free.
  2. Enter Keywords (e.g. product manager), a Location (e.g. London), or both.
  3. Optionally set Date posted, Job type, and Experience level.
  4. Set Maximum jobs and click Start.
  5. Download the jobs from the Output tab as JSON, CSV, or Excel, or read them through the API.

Input

ParameterTypeRequiredDefaultDescription
keywordsstringOne of keywords/location—Job title or keywords
locationstringOne of keywords/location—City, region, or country
maxItemsintegerNo10How many jobs to collect (up to 10,000)
datePostedstringNoanyany, past24h, pastWeek, pastMonth
jobTypesarrayNoallKeep only fullTime, partTime, contract, temporary, internship, volunteer, other
experienceLevelsarrayNoallKeep only internship, entryLevel, associate, midSenior, director, executive
proxyConfigurationobjectNooffOptional fallback proxy for requests that stay blocked

Example input:

{
"keywords": "software engineer",
"location": "San Francisco, CA",
"maxItems": 100
}

Output example

{
"title": "Senior Development Engineer I",
"company": "Yokohama Tire Corporation",
"companyUrl": "https://www.linkedin.com/company/yokohamatirecorp",
"companyLogo": "https://media.licdn.com/dms/image/v2/C560BAQFcm0yog2D3NA/company-logo_200_200/...",
"location": "Cornelius, NC",
"postedAt": "2026-09-28T20:56:26.000Z",
"postedTimeAgo": "5 days ago",
"validThrough": "2026-10-28T20:56:26.000Z",
"employmentType": "FULL_TIME",
"seniorityLevel": "Mid-Senior level",
"jobFunction": null,
"industry": "Automotive",
"workplaceType": null,
"applicantsCount": "Be among the first 25 applicants",
"salary": "$91,000.00/yr - $120,000.00/yr",
"salaryCurrency": "USD",
"salaryMinValue": 91000,
"salaryMaxValue": 120000,
"salaryUnit": "YEAR",
"experienceMonths": 72,
"educationRequirement": "bachelor degree",
"linkedinJobId": "4471214530",
"jobId": "2373",
"addressLocality": "Cornelius",
"addressRegion": "NC",
"addressCountry": "US",
"latitude": 35.48491,
"longitude": -80.85885,
"description": "Summary\nThe Senior Development Engineer I requires knowledge of advanced engineering principles and methods related to tire design and analysis to meet target objectives. ...",
"descriptionBullets": [
"Summary",
"The Senior Development Engineer I requires knowledge of advanced engineering principles and methods related to tire design and analysis to meet target objectives. ...",
"Responsibilities",
"Perform all types of development programs including for both replacement tire lines and original equipment customers."
],
"jobUrl": "https://www.linkedin.com/jobs/view/senior-development-engineer-i-at-yokohama-tire-corporation-4471214530",
"sourceUrl": "https://www.linkedin.com/jobs/view/senior-development-engineer-i-at-yokohama-tire-corporation-4471214530"
}

Use cases

  • Job boards and aggregators — feed fresh LinkedIn postings into your own board, filtered by role and location.
  • Recruiting and sales intelligence — find companies hiring for specific roles as a buying signal.
  • Salary benchmarking — collect posted pay ranges by title, seniority, and city.
  • Labor-market research — track hiring volume by industry, job function, or region over time.
  • Job alerts — schedule a daily run with Date posted: Past 24 hours and send new jobs to Slack or email.

How much does it cost to scrape LinkedIn jobs?

LinkedIn Jobs Scraper uses pay-per-event pricing: you pay per job saved.

EventFree planBronzeSilverGold
job-scraped — per job$0.00049$0.00044$0.00039$0.00034
Per 1,000 jobs$0.49$0.44$0.39$0.34

For example, 1,000 LinkedIn jobs on the Free plan cost $0.49. Use Maximum jobs or a spending limit to cap a run.

LinkedIn Jobs Scraper reads only job postings that LinkedIn shows publicly to logged-out visitors. It does not log in, use cookies, or access private data. Job postings are business information published to attract applicants, but always check that your use complies with the laws and terms that apply to you, and consult a lawyer if in doubt. Read more in Apify's post Is web scraping legal?

Use LinkedIn Jobs Scraper with the API

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("parsebird/linkedin-jobs-scraper").call(run_input={
"keywords": "data analyst",
"location": "London",
"datePosted": "pastWeek",
"maxItems": 200,
})
for job in client.dataset(run["defaultDatasetId"]).iterate_items():
print(job["title"], job["company"], job.get("salary"))

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('parsebird/linkedin-jobs-scraper').call({
keywords: 'nurse',
location: 'Texas',
experienceLevels: ['entryLevel', 'associate'],
maxItems: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

See the API tab for all endpoints and the Apify API client docs for more options.

Other job scrapers

FAQ

Do I need a LinkedIn account or cookies? No. The actor uses LinkedIn's public job search and job pages that logged-out visitors can see.

Do I need a proxy? No. Apify datacenter proxies are used automatically. A proxy you select is used only as a fallback for requests that stay blocked.

How many jobs can one run collect? One LinkedIn search shows about 500 jobs. When you ask for more, the actor repeats the search over recent time windows (last hour, day, week, month, and so on) to reach more postings, up to 10,000 per run. Narrow searches may have fewer jobs than you ask for.

Why do some jobs have the same jobId? jobId is the employer's own requisition ID. When one requisition is posted in several cities, each LinkedIn posting has its own linkedinJobId but they share the jobId.

Why are salary or job function sometimes empty? LinkedIn shows them only when the employer provides them.

Can I get new jobs every day? Yes. Schedule the actor with Date posted: Past 24 hours using Apify schedules.

Why aren't there workplace-type or sort options? LinkedIn doesn't apply those for logged-out visitors. For remote jobs, enter Remote as the location.

Are filtered-out jobs charged? No. With Job type or Experience level set, jobs that don't match are skipped and not charged.

Something doesn't work? Open an issue on the Issues tab with your run link.