Search and export public LinkedIn job postings by keyword, location, filters, or LinkedIn Jobs search URLs.
Use this Actor to turn LinkedIn Jobs searches into clean recruiting, labor-market, sales, and job-board datasets. Results can be downloaded as CSV, JSON, Excel, XML, RSS, or used through the Apify Dataset API.
At a glance
- Public job search: Search LinkedIn Jobs by role, skill, company keyword, location, date posted, workplace type, and sort order.
- Search URL reuse: Paste a public LinkedIn Jobs search URL when you already built the right search in the browser.
- Detail enrichment: Optionally fetch job descriptions, seniority, employment type, industries, and applicant text from public job pages.
- Hiring intelligence: Monitor hiring demand by company, role, region, seniority, skill, and remote or hybrid status.
- API export: Send job rows to spreadsheets, CRMs, BI tools, job boards, matching pipelines, or AI agents.
What can it do?
LinkedIn Jobs Scraper collects public job posting data from LinkedIn Jobs and saves one dataset row per job posting.
- Find matching roles: Enter one or more keywords such as
software engineer,data analyst,nurse, orsales development representative. - Filter by market: Add a location, date-posted option, workplace type, and sort order.
- Collect public details: Enable detail fetching when you need descriptions, criteria, industries, seniority, and applicant text.
- Deduplicate results: The Actor deduplicates by LinkedIn job ID across searches and start URLs.
- Export clean rows: Use the Apify UI, Dataset API, integrations, schedules, and webhooks.
Common workflows
- Recruiting research: Build lists of roles, companies, locations, and job URLs for sourcing and market mapping.
- Lead generation: Find companies hiring for roles that indicate buying intent, growth, or an active initiative.
- Labor-market analysis: Compare demand across locations, job titles, workplace types, or posting freshness.
- Job-board ingestion: Export public LinkedIn job rows for review before adding them to downstream workflows.
- Competitive tracking: Monitor target companies or role families on a daily or weekly schedule.
- Student or job-seeker research: Export matching roles into a table for comparison and follow-up.
What data can you extract?
The Actor returns one dataset row per public LinkedIn job posting.
| Field | Description |
|---|---|
jobId |
LinkedIn job identifier |
title |
Job title |
companyName |
Company name |
companyUrl |
Public LinkedIn company page URL when available |
location |
Job location text |
postedAtText |
Public posted-age text |
jobUrl |
Direct public LinkedIn job URL |
description |
Public job description when detail fetching is enabled |
employmentType |
Employment type when visible |
seniorityLevel |
Seniority level when visible |
industries |
Industry text when visible |
applicantsText |
Public applicant count text when visible |
sourceSearchUrl |
Search page that produced the job |
scrapedAt |
ISO timestamp for the scrape |
Example input
{
"keywords": ["software engineer"],
"location": "United States",
"maxItems": 25,
"includeDetails": true,
"datePosted": "pastWeek",
"workplaceType": "remote",
"sortBy": "recent"
}
Example output
{
"jobId": "4374834620",
"title": "Software Engineer (New Grads)",
"companyName": "Giga",
"companyUrl": "https://www.linkedin.com/company/gigaml",
"location": "New York, NY",
"postedAtText": "5 days ago",
"jobUrl": "https://www.linkedin.com/jobs/view/software-engineer-new-grads-at-giga-4374834620",
"description": "About Giga...",
"employmentType": "Volunteer",
"seniorityLevel": "Not Applicable",
"industries": "Software Development",
"applicantsText": "Over 200 applicants",
"sourceSearchUrl": "https://www.linkedin.com/jobs-guest/jobs/api/seeMoreJobPostings/search?...",
"scrapedAt": "2026-06-17T11:13:45.322Z"
}
How to run it
- Open the Actor on Apify.
- Enter one or more keywords, a location, or public LinkedIn Jobs search URLs.
- Set
maxItemsto the number of jobs you want to save. - Choose date, workplace, sort, and detail options.
- Start the run.
- Download the dataset or connect it to your workflow.
Search tips
- Start specific: Use role names like
backend engineer,account executive, ordata analystinstead of one broad word. - Use one region per run: Separate locations make comparison and deduplication easier.
- Monitor freshness: Use
sortBy: "recent"anddatePosted: "past24h"orpastWeekfor alerts. - Control cost: Keep
maxItemslow while testing and increase it after the search returns relevant roles. - Fetch details only when needed: Disable
includeDetailswhen company, title, location, and URL are enough.
Limits and caveats
- The Actor extracts publicly visible LinkedIn Jobs data.
- It does not access private recruiter data, logged-in-only data, messages, applicants, or private profiles.
- LinkedIn may change page structures or rate-limit requests, so very large or broad runs should be split into focused searches.
- Some optional fields are empty when LinkedIn does not show them publicly for a job.
Integrations
You can connect the dataset to downstream tools:
- Export CSV or Excel to spreadsheets for recruiting reports.
- Send company lists to a CRM for lead prioritization.
- Use Apify schedules for daily or weekly hiring monitoring.
- Trigger webhooks when a run finishes.
- Pull results into a database, warehouse, BI dashboard, matching model, or AI agent.
API usage
Node.js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/linkedin-jobs-scraper').call({
keywords: ['software engineer'],
location: 'United States',
maxItems: 25,
includeDetails: true
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
Python
from apify_client import ApifyClient
import os
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('fetch_cat/linkedin-jobs-scraper').call(run_input={
'keywords': ['software engineer'],
'location': 'United States',
'maxItems': 25,
'includeDetails': True,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)
cURL
curl -X POST 'https://api.apify.com/v2/acts/fetch_cat~linkedin-jobs-scraper/runs?token=YOUR_APIFY_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"keywords":["software engineer"],"location":"United States","maxItems":25,"includeDetails":true}'
MCP and AI agents
This Actor can be used through the official Apify MCP server at https://mcp.apify.com.
For a focused single-Actor tool setup, use:
https://mcp.apify.com?tools=fetch_cat/linkedin-jobs-scraper
Use the same JSON keys shown in the input configuration table, such as keywords, location, maxItems, includeDetails, datePosted, and workplaceType.
Support
If a run fails, returns no data, or a field looks wrong, open an issue from the Actor page.
Please include the Apify run ID or run URL, input JSON, one example public URL, query, or input item, what you expected, and what the dataset returned. Small reproducible inputs make parsing or site-layout issues much faster to fix.