LinkedIn Jobs Scraper
Pricing
Pay per usage
LinkedIn Jobs Scraper
Scrape public LinkedIn job postings — title, company, location, salary, description and applicant count. No login, no cookies, no proxies.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
BERCIK Group
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Scrape public LinkedIn job postings into a clean dataset — job title, company, location, posting date, salary, full description, seniority, job function and applicant count. No login, no cookies, no session tokens and no proxies.
What does LinkedIn Jobs Scraper do?
LinkedIn shows job listings to signed-out visitors, and this Actor reads exactly what that visitor sees — nothing private, nothing behind a login.
Search the way you would on the site: type keywords and a location, then narrow with the same filters LinkedIn gives you — date posted, job type, experience level, and on-site/remote/hybrid. You get back one clean row per job, ready for a spreadsheet, a database or a model.
Turn on Include full job details and each posting is opened to add the complete description text, seniority level, job function, industries, applicant count and the salary range where the employer published one.
Because it needs no authenticated session, there is nothing to configure, no cookie to paste, and no account to put at risk.
Why use LinkedIn Jobs Scraper?
- Recruiting and sourcing — see which companies are hiring for a role, where, and how much competition each posting has.
- Lead generation — a company posting five sales roles is a company buying sales tools. Hiring is a buying signal.
- Market and salary research — build a real compensation dataset from published ranges rather than survey guesses.
- Competitive intelligence — track a rival's headcount plans by watching what they advertise.
- Job boards and aggregators — feed a niche board with fresh, structured listings.
- AI and RAG pipelines — assemble a labelled corpus of job descriptions.
How to use LinkedIn Jobs Scraper
- Click Try for free.
- Enter Keywords (e.g.
data engineer) and a Location (e.g.United States). - Optionally narrow by date posted, job type, experience level or workplace type.
- Tick Include full job details if you want descriptions and salary ranges.
- Set Maximum results, then click Start.
- Download as JSON, CSV, Excel, HTML or XML.
Input
{"keywords": "data engineer","location": "United States","datePosted": "pastWeek","workplaceTypes": ["remote"],"jobTypes": ["fullTime"],"sortBy": "date","scrapeDetails": true,"maxResults": 200}
| Field | Type | Description |
|---|---|---|
keywords | string | What to search for, as you'd type it on LinkedIn |
location | string | Where to search — use LinkedIn's own wording |
datePosted | string | Any time, past 24 hours, past week, past month |
sortBy | string | Relevance, or most recent |
jobTypes | array | Full-time, part-time, contract, temporary, internship, volunteer, other |
experienceLevels | array | Internship, entry, associate, mid-senior, director, executive |
workplaceTypes | array | On-site, remote, hybrid |
scrapeDetails | boolean | Open each posting for description, salary and criteria |
maxResults | integer | Hard cap on records returned |
searchQueries | array | Run several searches in one go (advanced) |
geoId, companyId | string | LinkedIn's own numeric IDs, for precise targeting |
requestIntervalMs | integer | Delay between requests, default 500ms |
Output
{"jobId": "4443916725","title": "Data Engineer","company": "Harnham","companyUrl": "https://uk.linkedin.com/company/harnham","location": "Redwood City, CA","postedAt": "2026-08-12","postedRelative": "2 days ago","salaryRange": "$120,000.00/yr - $150,000.00/yr","seniorityLevel": "Associate","employmentType": "Full-time","jobFunction": "Engineering and Analyst","industries": "Technology, Information and Media","applicants": "Over 200 applicants","applicantCount": 200,"description": "Data Engineer Location: Redwood City, CA (Hybrid) …","jobUrl": "https://www.linkedin.com/jobs/view/data-engineer-at-harnham-4443916725","companyLogo": "https://media.licdn.com/dms/image/…","searchKeywords": "data engineer","searchLocation": "United States","scrapedAt": "2026-08-15T12:33:26.871Z"}
You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.
Data fields
| Field | Description |
|---|---|
jobId, title, jobUrl | Job identity and a clean link, with tracking parameters stripped |
company, companyUrl, companyLogo | The employer |
location | As published on the posting |
postedAt, postedRelative | Machine-readable date, plus LinkedIn's "2 days ago" wording |
salaryRange | Published range — only where the employer disclosed one |
seniorityLevel, employmentType, jobFunction, industries | LinkedIn's own classification (details only) |
applicants, applicantCount | How many have applied (details only) |
description | Full posting text, tags stripped (details only) |
searchKeywords, searchLocation, scrapedAt | Which search produced the row, and when |
How much does it cost to scrape LinkedIn jobs?
Priced per job record returned, capped by Maximum results. No proxies and no browser, so the platform cost underneath is small.
Without details, a run collects roughly 1,000 jobs per minute. With Include full job details on, each job needs one extra request, so the same run takes about 10× longer — budget accordingly.
Tips
- LinkedIn caps any single search at 1,000 results. This is LinkedIn's limit, not the Actor's — paging stops there. To go wider, split the work: several cities instead of one country, or several job titles instead of one broad term. Use Multiple searches to do that in a single run.
- Use "Most recent" for monitoring. Relevance ordering shuffles between runs; date ordering puts genuinely new postings first.
salaryRangeneeds details turned on, and only appears where the employer published a range. Many postings have none — that is the employer's choice, not missing data.- Deduplicate on
jobId. Results are already deduplicated within a run, including across multiple searches. - Repeating the same search can return new jobs. LinkedIn's result set is not stable — a second pass often surfaces postings the first missed.
applicantCountis a floor, not exact. LinkedIn reports "Over 200 applicants" once a posting passes that mark, so 200 means "at least 200".- Rate limiting is handled for you. The default 500ms spacing runs cleanly; if LinkedIn does push back, the Actor pauses, widens the gap and carries on rather than failing the run.
FAQ
Do I need a LinkedIn account, cookie or session token? No. This reads only what LinkedIn serves to signed-out visitors, so there is no account to connect and no account to get restricted.
Do I need proxies? No. It runs from Apify's own infrastructure without a proxy. If you run very large volumes you may want to add one, but nothing here requires it.
Can it scrape people, profiles or contact details? No. This Actor returns job postings only — it does not touch profiles, connections or personal contact information.
Why did I get fewer results than the number LinkedIn shows? LinkedIn's headline count is an estimate for the whole query; the pageable set is capped at 1,000. Narrow the search and run several instead.
Why is the description empty? Turn on Include full job details. Without it, the Actor only reads search result cards, which do not carry description text.
Can I schedule it?
Yes — use Apify Schedules. Sort by Most recent, and deduplicate on jobId against what you already stored.
Legal note
This Actor collects only publicly accessible job postings — no login, no private data, no personal profiles. Job postings are published by employers for public consumption. You are responsible for how you use the data, including compliance with LinkedIn's terms and any applicable data-protection law in your jurisdiction.
Support
Found a bug or need another field? Open an issue on the Issues tab. Custom data pipelines and bespoke scraping work are available on request.