LinkedIn Jobs Scraper avatar

LinkedIn Jobs Scraper

Pricing

from $3.00 / 1,000 job scrapeds

Go to Apify Store
LinkedIn Jobs Scraper

LinkedIn Jobs Scraper

Scrape public LinkedIn job search results and job detail pages. Extract title, company, location, employment type, seniority, description, apply URL, posted date, and applicants info when public.

Pricing

from $3.00 / 1,000 job scrapeds

Rating

0.0

(0)

Developer

Harsh

Harsh

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

2

Monthly active users

9 days ago

Last modified

Share

Scrape public LinkedIn job search results and job detail pages — title, company, location, workplace type, employment type, seniority, description, apply URL, posted date, and applicants (when public). Built with TypeScript, Crawlee CheerioCrawler, and LinkedIn guest/public job endpoints (no login required for many public listings).

Run it on the Apify platform for scheduling, API access, proxy rotation, monitoring, and dataset exports (JSON, CSV, Excel).

What does LinkedIn Jobs Scraper do?

Given LinkedIn job search URLs and/or keywords + location, this Actor:

  1. Converts public search URLs into LinkedIn guest seeMoreJobPostings API requests
  2. Paginates search results until maxJobs is reached
  3. Optionally opens each job’s guest detail page for full description and criteria
  4. Deduplicates jobs by jobId
  5. Pushes structured dataset items
  6. Exports JOBS.csv and SUMMARY.md to the key-value store

Why use LinkedIn Jobs Scraper?

  • Recruiting pipelines — build candidate-role inventories from public listings
  • Sales / lead generation — find companies hiring for target roles
  • Market research — track job titles, locations, and seniority mix over time
  • Competitive intel — monitor which skills and roles competitors post

How to scrape LinkedIn jobs

  1. Open the Actor in Apify Console
  2. Paste a LinkedIn jobs search URL or set keywords + location
  3. Set Max jobs and enable/disable full descriptions
  4. Keep concurrency low and enable Apify Proxy (residential recommended)
  5. Click Start
  6. Download results from the Dataset tab or key-value store exports

Input

FieldTypeDefaultDescription
searchUrlsstring[][]Public LinkedIn job search URLs
keywordsstring""Keywords used to build a search URL
locationstring""Location paired with keywords
maxJobsinteger50Max unique jobs (by jobId)
maxConcurrencyinteger2Concurrent HTTP requests
maxRequestRetriesinteger3HTTP retry count
requestDelayMsinteger1000Delay used for rate limiting
proxyConfigurationobjectApify Proxy onProxy settings
includeDescriptionbooleantrueFetch job detail pages for full description

Example (search URL):

{
"searchUrls": [
"https://www.linkedin.com/jobs/search/?keywords=software%20engineer&location=United%20States"
],
"maxJobs": 50,
"maxConcurrency": 2,
"maxRequestRetries": 3,
"requestDelayMs": 1000,
"proxyConfiguration": { "useApifyProxy": true },
"includeDescription": true
}

Example (keywords + location):

{
"keywords": "account executive",
"location": "New York, United States",
"maxJobs": 25,
"includeDescription": true,
"proxyConfiguration": { "useApifyProxy": true }
}

See examples/input.json.

Output

Each dataset item is one job:

{
"jobId": "4123456789",
"title": "Senior Software Engineer",
"company": "Acme Corp",
"companyUrl": "https://www.linkedin.com/company/acme-corp",
"location": "San Francisco, CA",
"workplaceType": "Remote",
"employmentType": "Full-time",
"seniority": "Mid-Senior level",
"description": "Build scalable backend services in TypeScript and Node.js...",
"postedAt": "2026-07-01",
"applicants": "Over 200 applicants",
"applyUrl": "https://www.linkedin.com/jobs/view/4123456789/?isApplication=true",
"jobUrl": "https://www.linkedin.com/jobs/view/4123456789",
"scrapedAt": "2026-07-13T12:00:00.000Z",
"error": null
}

You can download the dataset as JSON, HTML, CSV, or Excel. The Actor also writes:

Key-value recordDescription
JOBS.csvAll job rows as CSV
SUMMARY.mdMarkdown summary table of results

Data fields

FieldDescription
jobIdLinkedIn job posting ID
titleJob title
companyHiring company name
companyUrlLinkedIn company URL when available
locationLocation string from the listing
workplaceTypeRemote / Hybrid / On-site (inferred when possible)
employmentTypeFull-time, Part-time, Contract, etc.
senioritySeniority level when public
descriptionFull text when includeDescription is true
postedAtPosted date or relative time
applicantsPublic applicants caption
applyUrlApplication link when available
jobUrlCanonical public job URL
scrapedAtISO scrape timestamp
errorSoft error for blocked/partial records

Pricing

Pay-per-event (PPE): $0.003 per job (dataset item), plus a small Actor-start fee.

Estimate: 50 jobs ≈ $0.15.

Tips

  • Prefer Apify Proxy residential if you hit auth walls, captchas, or empty results
  • Keep maxConcurrency at 1–3 and requestDelayMs around 1000–2000 ms
  • Set includeDescription: false for faster/cheaper runs when you only need titles and companies
  • Use stable public search URLs from an incognito browser session
  • Unit tests use HTML fixtures so CI does not depend on live LinkedIn access

Limitations

  • Scrapes public/guest LinkedIn job pages only — not authenticated feed data
  • LinkedIn frequently shows auth walls or rate limits; proxy + low concurrency help but do not guarantee 100% coverage
  • Cheerio parses static HTML. Heavily client-rendered views may return fewer fields
  • Some fields (applicants, apply URL, full description) are only present on detail pages
  • Respect LinkedIn Terms of Service and applicable laws; use data responsibly

Technical notes

  • Search pagination uses
    https://www.linkedin.com/jobs-guest/jobs/api/seeMoreJobPostings/search?...&start=N
  • Job details use
    https://www.linkedin.com/jobs-guest/jobs/api/jobPosting/{jobId}
  • Extraction strategies: DOM job cards, JSON-LD JobPosting, job criteria lists
  • Graceful handling of auth walls / blocks: logs a warning and falls back to search-card data when detail is blocked

Development

cd factory/linkedin-jobs-scraper
npm install
npm test
npm run build
apify run

License

Apache-2.0