LinkedIn Jobs Scraper avatar

LinkedIn Jobs Scraper

Pricing

from $4.99 / 1,000 results

Go to Apify Store
LinkedIn Jobs Scraper

LinkedIn Jobs Scraper

Scrapes LinkedIn job listings with full details: title, company, location, salary, description, employment type, seniority level, and more. Supports keyword search, location filters, date posted, job type, experience level, and automatic pagination.

Pricing

from $4.99 / 1,000 results

Rating

0.0

(0)

Developer

Coding Frontned

Coding Frontned

Maintained by Community

Actor stats

1

Bookmarked

18

Total users

2

Monthly active users

18 hours ago

Last modified

Share

LinkedIn Jobs Scraper

Search LinkedIn’s public guest jobs endpoint and return normalized, deduplicated job listings. The Actor supports public date, job-type, experience, and workplace filters, bounded pagination, optional detail enrichment, local HTML fixtures, and truthful run diagnostics. It does not require login credentials.

Target: LinkedIn public jobs

Use cases

  • Build a current job-market dataset for a keyword and location.
  • Compare public listings by recency, workplace, employment type, or experience level.
  • Enrich a bounded result set with public descriptions, criteria, salary text, skills, and benefits.
  • Regression-test parsing against synthetic list/detail HTML before a live run.

Input

The minimum valid input is:

{
"keywords": "software engineer"
}

Supported fields:

FieldTypeDefault / boundsDescription
keywordsstringrequired, 1–200 charsPublic job-search text.
locationstringUnited States, 1–200 charsLocation sent to LinkedIn.
maxJobsinteger50, 1–100Maximum unique normal records.
maxPagesintegerderived, 1–20Optional pagination bound.
datePostedenumanyTimepastMonth, pastWeek, or past24Hours are also supported.
jobTypeenumanyF full-time, P part-time, C contract, T temporary, I internship, V volunteer, O other.
experienceLevelenumanyLinkedIn public levels 16.
remoteFilterenumany1 on-site, 2 remote, 3 hybrid.
scrapeJobDetailsbooleantrueFetch public job detail HTML for each unique result.
includeDiagnosticsbooleantrueInclude minimal diagnostic rows for blocked/empty/failing requests.
requestTimeoutSecsinteger30, 10–120Per-request timeout.
maxRequestRetriesinteger2, 0–5Transient HTTP retry limit.
requestDelayMsinteger250, 0–10000Pacing between public endpoint requests.
proxyConfigurationobjectresidential US proxyStandard Apify proxy configuration; set { "useApifyProxy": false } for a direct local smoke run.

For local development, fixtureListHtml or fixtureListFiles enables deterministic list-page mode. fixtureListFile is a compatible single-file alias. fixtureDetailHtml, fixtureDetailFiles, and fixtureDetailFile provide detail pages for fixture enrichment. Fixture paths must stay inside this Actor directory and use .html or .htm.

Example with filters and bounded output:

{
"keywords": "data engineer",
"location": "New York",
"maxJobs": 10,
"datePosted": "pastWeek",
"jobType": "F",
"remoteFilter": "2",
"scrapeJobDetails": false,
"includeDiagnostics": true
}

Output

Normal dataset rows contain public business and provenance fields. jobDescription is used instead of the platform-reserved description field.

FieldMeaning
position, jobId, jobTitle, company, location, jobUrlStable normalized listing identity and core public fields.
companyUrl, companyLogo, isRemote, postedDate, applicantCountPublic card metadata when available.
salary, employmentType, seniorityLevel, industry, jobFunctionPublic detail criteria when available.
jobDescription, descriptionBullets, benefitsPublic detail content when available.
searchKeywords, searchLocation, scrapedAtSearch context and collection provenance.

The earlier detailScraped row field was intentionally removed as extraction instrumentation. Detail request/success/failure counts remain in the OUTPUT key-value summary, while business fields are retained.

Diagnostic rows, when enabled, contain only url, error, errorCode, and scrapedAt; they never masquerade as job records. The OUTPUT key-value record includes success/empty/partial status, normal and diagnostic counts, pagination, detail, deduplication, request, proxy, fixture, and bounded failure evidence.

Limits and responsible use

Requests are sequential and bounded. Responses larger than 3 MB, access challenges, and malformed public cards are handled fail-closed with summary/diagnostic evidence. LinkedIn job availability and public endpoint behavior change frequently.

Use public job data lawfully and respect LinkedIn terms, rate limits, and applicable privacy and data-protection requirements. Do not provide credentials or attempt to bypass access controls.

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

Local development

From this Actor directory:

npm install
npm test
npm run check
apify run --purge --input-file test/inputs/fixture-basic.json
apify run --purge --input-file test/inputs/fixture-detail.json
npm run validate

The fixture runs do not contact LinkedIn. A direct public smoke input can use proxyConfiguration: { "useApifyProxy": false }; no credentials are required.