LinkedIn Job Scraper avatar

LinkedIn Job Scraper

Pricing

from $1.50 / 1,000 results

Go to Apify Store
LinkedIn Job Scraper

LinkedIn Job Scraper

Scrape public LinkedIn jobs with no login, cookies or API key. Get title, company, location, salary, workplace type, applicants, recruiter, skills and full description from search links, job links or titles. Bulk input, filters, auto proxy fallback. Export JSON, CSV or Excel.

Pricing

from $1.50 / 1,000 results

Rating

0.0

(0)

Developer

Data Minds

Data Minds

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

Categories

Share

LinkedIn Job Scraper is an Apify Actor that extracts public job listings from LinkedIn: title, company, location, pay, workplace type, applicants, recruiter, skills and full description. Paste search links, job links or company links, or type job titles and places, and export JSON, CSV or Excel. No login needed. From $1.50 per 1,000 jobs on the Gold plan. πŸš€ Try it free

What can LinkedIn Job Scraper do?

Use it as a LinkedIn job extractor and LinkedIn job posting scraper. It also works as a LinkedIn jobs API alternative and a LinkedIn job scraper without cookies, with API access, schedules, webhooks and integrations.

  • βœ… Bulk LinkedIn job scraper - search links, job links, company links, job ids, titles and places in one run.
  • 🎯 Filters checked on every job - job type, experience level, workplace type, industry, minimum salary and description words.
  • πŸ’° Pay with its source - salary text, min, max, currency and period, plus whether LinkedIn or the description supplied it.
  • πŸ‘₯ Honest applicant numbers - a job applicants count plus a flag when LinkedIn only says "over N applicants".
  • 🧠 Description insights - skills, minimum years of experience, visa sponsorship and contact e-mails found in the text, which helps you find visa sponsorship jobs.
  • πŸ”„ Only new jobs - pass yesterday's job ids in a skip list to receive just the new postings.
  • ⚑ Live results - each job is saved to the dataset as soon as it is ready.
  • πŸ”Œ Export and integrations - JSON, CSV, Excel, API, schedules and webhooks.

What data can I extract from LinkedIn?

FieldDescription
πŸ†” id, jobUrlLinkedIn job id and the public link to the posting.
πŸ’Ό titleJob title.
🏒 companyName, companyUrl, companyId, companyLogoEmployer name, public company page, company id and logo link.
🌍 location, city, region, countryLocation as written on the posting and its parts.
🏠 workplaceType, workplaceTypeSourceRemote, Hybrid or On-site, and whether it came from the location, title or description.
πŸ“ contractType, experienceLevel, industriesEmployment type, seniority level and industries from the job page.
πŸ’΅ salary, salaryMin, salaryMax, salaryCurrency, salaryPeriod, salarySourcePay as written, parsed range, currency, period and where it was found.
πŸ‘₯ applicantsCount, applicantsIsLowerBound, applicantsTextNumber of applicants, a lower-bound flag and the text as shown.
⚑ applyType, jobStateEASY_APPLY or EXTERNAL, and LISTED or CLOSED.
πŸ“… postedAt, postedTimeAgoPosting date and the age as shown.
🎁 benefitsBenefit labels shown on the search card.
πŸ“„ descriptionTextFull job description as plain text.
πŸ‘€ recruiterName, recruiterHeadline, recruiterProfileUrl, recruiterPhotoRecruiter shown on the posting, when the poster enabled it.
🧠 skills, yearsExperienceMin, visaSponsorship, contactEmailsInsights found in the description.
πŸ”Ž searchKeyword, searchLocation, scrapedAt, errorWhich search found the job, collection time, and a read error when one happened.

Fields LinkedIn does not show for a job are empty. Only public job data is collected, with no private profile data.

What can you do with the data from LinkedIn?

🎯 Job market research and competitor hiring tracking

  1. Add job titles to keywords and places to locations.
  2. Set postedWithin to 30d, and set experienceLevels to Entry level for entry level jobs data.
  3. Filter workplaceTypes to Remote for remote jobs data, or compare remote, hybrid or on-site jobs, then export to Excel.

πŸ’° Salary benchmarking with a LinkedIn salary scraper

  1. Turn on requireSalary or set salaryMin.
  2. Run your titles per city and export CSV.
  3. Compare salaryMin, salaryMax, salaryCurrency and salaryPeriod across roles.

🀝 Recruiting lead lists

  1. List employers in companies.
  2. Keep fullDetails on to get each LinkedIn recruiter contact, with name and headline.
  3. Send the Recruiter view to your CRM.

πŸ”” Job alerts for new postings

  1. Schedule a daily run with postedWithin set to 24h to get LinkedIn jobs posted today.
  2. Put the ids you already have into skipJobIds.
  3. Send only new jobs to your team through a webhook.

πŸ€– Skills demand analysis and AI datasets

  1. Keep extractInsights on.
  2. Export skills and descriptionText.
  3. Feed the job descriptions for AI pipelines into an LLM or vector store.

How do I use LinkedIn Job Scraper?

Here is how to use Apify to scrape LinkedIn jobs in a few clicks.

  1. Open LinkedIn Job Scraper on Apify and click Try for free.
  2. Paste LinkedIn links into LinkedIn links or job ids, or add Job titles or keywords and Locations.
  3. Choose Posted within and set Max jobs.
  4. Add filters such as companies, job types, experience levels or workplace types.
  5. Click Start and watch jobs arrive in the Output tab.
  6. Open the Dataset tab and export as JSON, CSV or Excel, or read the rows through the API.

How much does it cost to scrape LinkedIn?

LinkedIn Job Scraper uses pay-per-event pricing: you pay for each job saved to the dataset, and Apify platform usage is billed in addition. Jobs removed by your filters are not saved and not charged. The price per job depends on your Apify plan:

PlanPrice per jobPer 1,000 jobs
πŸ†“ Free$0.002$2.00
πŸ₯‰ Bronze$0.0018$1.80
πŸ₯ˆ Silver$0.0016$1.60
πŸ₯‡ Gold$0.0015$1.50

Each run also has an Actor start event of $0.00005 per GB of memory, minimum one event. The default memory is 1,024 MB (1 GB), so one start event of $0.00005 is charged. Worked example: 500 jobs on the Silver plan cost 500 x $0.0016 = $0.80, plus the $0.00005 start event and platform usage.

Is scraping LinkedIn free?

You pay per saved job on every plan, starting at $0.002 per job on the Free plan, so the default 10 jobs cost $0.02. Platform usage is billed in addition. Set Max jobs to control the size of a run, or set a maximum spend per run in Apify, and the Actor stops cleanly when it is reached.

How much does LinkedIn Job Scraper cost per 1,000 results?

One result is one saved job. A thousand jobs cost $2.00 on the Free plan, $1.80 on Bronze, $1.60 on Silver and $1.50 on Gold, plus the $0.00005 start event and platform usage. Jobs kept without full details because the job page could not be read are saved and charged like any other job.

Input

Give the Actor at least one of: links, job titles, locations or companies. Links, titles and places can be combined, and Max jobs caps the total across all searches. Common alternative key names used by other LinkedIn job Actors, such as query, location, startUrls and jobsToFetch, are also accepted.

FieldTypeRequiredDescriptionDefault / example
urlsarrayone of urls, keywords, locations, companiesLinkedIn job-search links, job links, company links or job ids. Duplicates are removed.[]
keywordsarraysee aboveJob titles or skills, one per line. Boolean search works, for example "data engineer" OR "data scientist" NOT intern.[]
locationsarraysee aboveCity, region or country. Empty means worldwide. An unknown place is skipped with a warning.[]
postedWithinstringnoany, 1h, 6h, 12h, 24h, 3d, 7d, 30d; other values such as 36 (hours) or 2w can be typed.any
maxJobsintegernoTotal jobs to save across all searches. 0 means no cap. LinkedIn shows up to about 1,000 jobs per search.10
fullDetailsbooleannoOn: open every job for description, applicants, seniority, employment type, industry, recruiter and pay. Off: fast mode with title, company, location and date. Turned on automatically when a filter needs the job page.true
extractInsightsbooleannoAdd skills, minimum years of experience, visa sponsorship and contact e-mails.true
companiesarraynoOnly jobs from these employers: names, company links or numeric company ids.[]
excludeCompaniesarraynoDrop jobs from these employers.[]
jobTypesarraynoFull-time, Part-time, Contract, Temporary, Internship, Volunteer.[]
experienceLevelsarraynoInternship, Entry level, Associate, Mid-Senior level, Director, Executive.[]
workplaceTypesarraynoRemote, Hybrid, On-site.[]
industriesarraynoKeep jobs whose industry contains one of these words, for example Software Development.[]
salaryMinnumbernoMinimum yearly pay; hourly and monthly pay is converted. Jobs without pay are dropped when set.none
easyApplybooleannoOnly Easy Apply jobs you can apply to directly on LinkedIn.false
under10ApplicantsbooleannoOnly jobs with fewer than 10 applicants.false
titleInclude / titleExcludearraynoKeep jobs whose title contains one of these words, or drop jobs whose title contains one.[]
skipJobIdsarraynoJob ids you already have, to receive only new jobs.[]
sortBystringnorelevance or newest (orders the jobs of each results page by posting date).relevance
descriptionInclude / descriptionExcludearraynoKeep jobs whose description contains one of these words, or drop jobs that contain one.[]
requireSalarybooleannoDrop jobs that show no salary information.false
salaryFromDescriptionbooleannoWhen LinkedIn shows no salary, read a pay range written in the description.true
maxScannedintegernoWith content filters, stop a search after examining this many jobs (1 to 20,000).3000
concurrencyintegernoJob pages opened at the same time (1 to 8). Higher is faster but more likely to be rate-limited.4
maxRetriesintegernoRetries per failed request (0 to 10).5
requestGapnumbernoSeconds between requests (0 to 10). The pause grows automatically when LinkedIn slows the run down.0.6
proxyConfigurationobjectnoOptional connection settings. Leave the default for automatic behavior.{"useApifyProxy": false}

Example input:

{
"urls": [
"https://www.linkedin.com/jobs/search/?keywords=python%20developer&location=Berlin%2C%20Germany"
],
"keywords": ["data engineer"],
"locations": ["London, United Kingdom"],
"postedWithin": "7d",
"maxJobs": 50,
"workplaceTypes": ["Hybrid"],
"salaryFromDescription": true
}

Output

Each job is one row in the Apify Dataset, saved as soon as it is ready. Export as JSON, CSV, Excel, XML or HTML from the Dataset tab or through the API. The Output tab shows ten tables (views): overview, company, location, salary, job details, applicants, recruiter, skills and insights, description, and search info.

{
"id": "1234567890",
"jobUrl": "https://www.example.com/jobs/view/1234567890",
"title": "Senior Python Developer",
"companyName": "Example Company",
"companyUrl": "https://www.example.com/company/example-company",
"companyId": "1000000",
"companyLogo": "https://www.example.com/logo.png",
"location": "Berlin, Berlin, Germany",
"city": "Berlin",
"region": "Berlin",
"country": "Germany",
"workplaceType": "Hybrid",
"workplaceTypeSource": "description",
"contractType": "Full-time",
"experienceLevel": "Mid-Senior level",
"industries": "Software Development",
"salary": "EUR 80,000/yr - EUR 100,000/yr",
"salaryMin": 80000,
"salaryMax": 100000,
"salaryCurrency": "EUR",
"salaryPeriod": "year",
"salarySource": "linkedin",
"applicantsCount": 61,
"applicantsIsLowerBound": false,
"applicantsText": "61 applicants",
"applyType": "EASY_APPLY",
"jobState": "LISTED",
"postedAt": "2026-10-09",
"postedTimeAgo": "2 days ago",
"benefits": ["Actively Hiring"],
"descriptionText": "Example description of the role...",
"recruiterName": "Jane Example",
"recruiterHeadline": "Talent Acquisition",
"recruiterProfileUrl": "https://www.example.com/in/jane-example",
"recruiterPhoto": "https://www.example.com/photo.jpg",
"skills": ["Python", "AWS"],
"yearsExperienceMin": 5,
"visaSponsorship": null,
"contactEmails": [],
"searchKeyword": "python developer",
"searchLocation": "Berlin, Germany",
"scrapedAt": "2026-10-11T19:58:58Z"
}

When a run finishes, a SUMMARY record in the key-value store holds the counts of the run: jobsSaved, jobsBilled, searches, filteredOut, detailFailed, removedBeforeDetail, warnings and durationSeconds, among others.

Notes and limitations

  • error appears only when a job page could not be read; that row keeps the search-card data only.
  • With extractInsights off, the fields skills, yearsExperienceMin, visaSponsorship and contactEmails are not included.
  • applicantsCount stays empty when LinkedIn only shows a ceiling such as "first 25 applicants".
  • workplaceType is worked out from the location, title and description, so it can be empty when the posting does not say.
  • salaryCurrency is set only when it is unambiguous.
  • A few filters inside pasted search links are not supported and are ignored with a warning.
  • Job type, level, workplace, industry and pay filters are checked job by job, so rare values take longer.

FAQ

LinkedIn Job Scraper collects only public job listings that any visitor can see, with no login. Laws and site terms differ by country and use, and personal data such as recruiter names may fall under privacy rules. Read Apify's guide on web scraping legality. This is not legal advice.

Do I need a LinkedIn account, cookies or an API key to scrape jobs?

No. The Actor needs no LinkedIn account, cookies or API key, and it never asks for your LinkedIn login. You only need an Apify account to run it. Add links, or job titles and locations, then press Start. The rows contain public job data only.

How many LinkedIn jobs can I get per run?

Set the total with Max jobs, from 1 up to 100,000, or use 0 for no cap. LinkedIn shows up to about 1,000 jobs per search, so for larger collections combine several keywords, locations or companies. The default is 10 jobs, which suits a quick test run.

Can I export LinkedIn jobs to Excel, CSV or JSON?

Yes. Open the Dataset tab after the run and choose Excel, CSV, JSON, XML or HTML. The ten views, such as salary or recruiter, can be exported separately. You can also download the same rows through the Apify API, or send them to Google Sheets with an integration.

Can I schedule runs or use webhooks and integrations?

Yes. Use Apify schedules to run the Actor daily or hourly, and webhooks to notify your tools when a run finishes. Combine a schedule with the skip list of job ids and you receive only new postings each time. Apify also offers integrations with tools such as Make, so a LinkedIn job scraper n8n workflow is easy to build.

Can I use LinkedIn Job Scraper with the Apify API or an MCP server?

Yes. Every Actor can be started, scheduled and read through the Apify API, and AI agents can call it through Apify's MCP server, for example from a LinkedIn job scraper Python script. The API tab of this Actor shows ready-made examples, and the full reference is in the Apify API documentation.

Why am I getting fewer jobs than expected?

Common causes are strict filters, a short posted-within window, a Max jobs cap, or a location LinkedIn did not recognise, which is skipped with a warning. Check the run log and the filteredOut counts in the SUMMARY record. Loosen the filters or raise the scan budget, then run again.

LinkedIn Job Scraper not working?

First read the run log, which explains most problems in plain words, such as LinkedIn limiting requests. Wait a few minutes and run again with a lower parallel connections value. If it still fails, open the Issues tab of this Actor and include your run link and a short description of the input.

ActorUse it to
πŸ”— Indeed Job ScraperCollect job postings from Indeed's country sites using search links or job titles.
πŸ”— Workday Jobs ScraperScrape jobs from any Workday careers portal with titles, salaries, descriptions and skills.
πŸ”— LinkedIn Ads Library ScraperExtract LinkedIn ad copy, creatives, advertisers and run dates for competitor analysis.

For job board scraping beyond LinkedIn, use the sibling Actors above, and browse the public job search on LinkedIn to compare with your results.

Support and disclaimer

Found a bug or need a feature? Open an issue in the Issues tab. For custom solutions, integrations or questions, contact hello.dataminds@gmail.com. LinkedIn Job Scraper is independent and not affiliated with LinkedIn; trademarks belong to their owners. It collects publicly available data, and you are responsible for complying with applicable laws and the site's terms.

Last updated: 2026-10-18