LinkedIn jobs scraper and API: public job postings as JSON, no login
LinkedIn has no public API for reading job postings, and its site paginates ten at a time behind a login prompt after a few pages. The postings themselves are public: companies pay to be found. This page shows how to get them as a table, which filters LinkedIn still honours, where the 1,000-result limit bites, and what each job record contains.
What LinkedIn offers, and what it does not
| Route | What you get |
|---|---|
| Job Posting API (partners) | Lets approved companies and ATS vendors post jobs. No reading of other companies' postings. |
| Job search on the website | Ten postings per page, filters, a login prompt after a few pages, no export. |
| Public job pages | Title, company, location, date, applicants, full description and the criteria, visible to anyone without an account. This is what the scraper reads. |
The scraper
The LinkedIn Jobs Scraper on Apify takes a keyword and a location (or a LinkedIn search URL, or single job URLs), pages through the results and opens every posting for the details. One record per job, the same field names as the most used LinkedIn jobs Actor, so an existing integration switches by changing the Actor name.
- Search: keyword, location, date window (24 hours, week, month), company IDs, Easy Apply, under 10 applicants, newest first.
- Per job:
title,companyName,companyLinkedinUrl,companyLogo,location,postedAt,salaryInfo,applicantsCount,descriptionTextanddescriptionHtml,seniorityLevel,employmentType,jobFunction,industries, the job poster when shown,link. - Speed: about 100 jobs with full details in a minute; five times faster with details off.
Calling it from code
curl -X POST "https://api.apify.com/v2/acts/alfalfa~linkedin-jobs-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"keywords":"data engineer","location":"Berlin","datePosted":"pastWeek","maxJobs":200}'
For larger jobs start the run asynchronously and read the dataset when it finishes; schedules, webhooks and the n8n, Make and Zapier nodes work the same way as for any Apify Actor. The API overview shows the pattern.
Things to know before you trust the numbers
- 1,000 results per search. LinkedIn stops there whatever the tool. A broad query ("manager", "United States") needs splitting by city, by date window or by company to get past it.
- Some filters are gone. LinkedIn's newer search ignores experience level, job type and workplace type for most queries. Date, Easy Apply, under-10-applicants and company filters work. The scraper passes the others along and they apply when LinkedIn honours them.
- Applicant counts are ranges at the low end. "Be among the first 25 applicants" comes back as
<25; exact numbers appear once a posting passes that. - Salary is shown only when the poster entered it. Expect it on a minority of postings, more in the US than in Europe.
- The apply link is usually hidden. LinkedIn puts the external application URL behind a login for most postings; the job URL itself is always there.
Uses that pay for themselves
- Lead generation. A company hiring a "HubSpot administrator" is buying HubSpot services. Search the role, take the company list and the recruiter names.
- Job boards. A daily run with Past 24 hours feeds a niche board or a newsletter with new postings only.
- Market research. Seniority, employment type and posted salaries across a few thousand postings for a title and a region.
- Competitor hiring. Company IDs plus a weekly schedule show where rivals are growing.
Questions people ask
Is this allowed?
Job postings are published to be found and are visible to anyone without an account. Reading public pages without logging in is the position US courts took in the hiQ v. LinkedIn cases. Use the data responsibly: recruiter names are personal data under GDPR, and reposting full descriptions elsewhere may infringe the poster's copyright.
Why is it this much cheaper than other LinkedIn scrapers?
Each job is a few kilobytes of data and the scraper runs in a small amount of memory, so platform costs per thousand jobs are cents. $0.50 per 1,000 leaves a fair margin.
Does it get company details too?
The company name, page URL and logo come with every job. For employee counts, websites, industry and offices, feed the company URLs to the LinkedIn Company Scraper.