LinkedIn Jobs Scraper avatar

LinkedIn Jobs Scraper

Pricing

from $1.26 / 1,000 results

Go to Apify Store
LinkedIn Jobs Scraper

LinkedIn Jobs Scraper

Scrape job listings from LinkedIn. Search by keywords, location, job type, experience level, and more. Extract job details, company information, and application links.

Pricing

from $1.26 / 1,000 results

Rating

0.0

(0)

Developer

Artificially

Artificially

Maintained by Community

Actor stats

0

Bookmarked

117

Total users

2

Monthly active users

5 days ago

Last modified

Share

Scrape job listings from LinkedIn without login. Search by keywords, location, job type, experience level, and more. Extract job details, company information, and direct application links.

Built by Artificially | Follow us on X @artificially_io

Use with AI agents (MCP)

This actor works as a tool for AI agents through Apify's MCP server at https://mcp.apify.com: the agent passes job search keywords and gets back one JSON item per job. For agents, set compactOutput: true to get slim items without photos and long text blobs, and keep limits small (maxJobs around 10-25).

Quick setup (sign in with your Apify account when asked):

  • Claude (claude.ai or Claude Desktop): Settings → Connectors → Add custom connector, and paste https://mcp.apify.com?tools=artificially/linkedin-jobs-scraper
  • Claude Code or Cursor via the Apify CLI (latest version, apify upgrade): apify mcp install claude-code --tools artificially/linkedin-jobs-scraper (use cursor instead of claude-code for Cursor)
  • Any MCP client (Cursor, VS Code, Windsurf):
{
"mcpServers": {
"apify": { "url": "https://mcp.apify.com?tools=artificially/linkedin-jobs-scraper" }
}
}

Try asking:

  • "Find 20 remote data engineer jobs on LinkedIn posted in the last week."
  • "Show product manager jobs in London on LinkedIn with company and posting date."

Features

  • No login required - Uses LinkedIn's public guest API
  • Powerful filters - Job type, experience level, date posted, remote/on-site
  • Multiple queries - Search for multiple job titles in one run
  • Reliable extraction - Robust parsing with fallback selectors
  • Duplicate detection - The same job is never saved (or charged) twice in a run
  • Rate limit handling - Built-in retries and respectful delays
  • Proxy support - Works with Apify Proxy for reliable results

Input

FieldTypeDescriptionDefault
searchQueriesarrayJob search keywordsRequired
locationstringLocation to search in-
maxJobsintegerMax jobs per query (1-1000)100
jobTypearrayfull-time, part-time, contract, etc.All
experienceLevelarrayentry, mid-senior, director, etc.All
datePostedstringany, past-24h, past-week, past-monthany
remoteFilterstringany, remote, on-site, hybridany
maxAttemptsPerPageintegerRetries per blocked/rate-limited page, each on a fresh proxy IP6
residentialFallbackbooleanSwitch later retries to residential proxies when blockedtrue
compactOutputbooleanSave slim items with only the key fields. Recommended for AI agentsfalse
proxyConfigurationobjectProxy settingsApify Proxy

Example Input

{
"searchQueries": ["software engineer", "data scientist"],
"location": "San Francisco, CA",
"maxJobs": 100,
"jobType": ["full-time"],
"experienceLevel": ["entry", "associate"],
"datePosted": "past-week",
"remoteFilter": "remote",
"proxyConfiguration": {
"useApifyProxy": true
}
}

Output

Each job listing contains:

FieldTypeDescription
jobIdstringLinkedIn job ID
titlestringJob title
companystringCompany name
companyUrlstringLinkedIn company page URL
companyLogoUrlstringCompany logo image URL
locationstringJob location
listingDatestringWhen job was posted (e.g., "2 days ago")
listingDateParsedstringISO date when available
jobUrlstringDirect link to job posting
searchQuerystringThe search query that found this job
scrapedAtstringWhen the data was scraped

Example Output

{
"jobId": "3812345678",
"title": "Senior Software Engineer",
"company": "Tech Company Inc",
"companyUrl": "https://www.linkedin.com/company/tech-company",
"companyLogoUrl": "https://media.licdn.com/dms/image/...",
"location": "San Francisco, CA (Remote)",
"listingDate": "1 week ago",
"listingDateParsed": "2024-01-08T00:00:00.000Z",
"jobUrl": "https://www.linkedin.com/jobs/view/3812345678",
"searchQuery": "software engineer",
"scrapedAt": "2024-01-15T10:30:00.000Z"
}

Usage

Via Apify Console

  1. Go to the LinkedIn Jobs Scraper page
  2. Enter search keywords and location
  3. Configure filters as needed
  4. Click "Start"
  5. Download results in JSON, CSV, or Excel

Via API

curl -X POST "https://api.apify.com/v2/acts/artificially~linkedin-jobs-scraper/runs" \
-H "Authorization: Bearer <your_api_token>" \
-H "Content-Type: application/json" \
-d '{
"searchQueries": ["software engineer"],
"location": "New York",
"maxJobs": 50,
"jobType": ["full-time"],
"datePosted": "past-week"
}'

Via JavaScript SDK

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<your_api_token>' });
const input = {
searchQueries: ['software engineer', 'data scientist'],
location: 'San Francisco, CA',
maxJobs: 100,
jobType: ['full-time'],
remoteFilter: 'remote',
};
const run = await client.actor('artificially/linkedin-jobs-scraper').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach(job => {
console.log(`${job.title} at ${job.company} - ${job.location}`);
});

Via Python SDK

from apify_client import ApifyClient
client = ApifyClient("<your_api_token>")
run_input = {
"searchQueries": ["software engineer", "data scientist"],
"location": "San Francisco, CA",
"maxJobs": 100,
"jobType": ["full-time"],
}
run = client.actor("artificially/linkedin-jobs-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(f"{item['title']} at {item['company']} - {item['location']}")

Use Cases

  • Job Market Research - Analyze hiring trends and in-demand skills
  • Salary Benchmarking - Compare compensation across companies
  • Recruitment Intelligence - Track competitor hiring patterns
  • Career Monitoring - Get alerts for new job postings
  • Skills Analysis - Identify most requested qualifications
  • Geographic Analysis - Compare job markets across locations

Tips for Best Results

  1. Enable Proxy - LinkedIn may block requests without proxy
  2. Use Specific Keywords - More specific queries yield better results
  3. Try Location Variations - "San Francisco" vs "San Francisco, CA" vs "Bay Area"
  4. Combine Filters - Use multiple filters to narrow results
  5. Start Small - Test with 50 jobs before scaling up

Pricing

You only pay for complete results. A job is saved (and charged) only when it has a real title, company and LinkedIn job ID. Pages blocked by LinkedIn (rate limits, login walls), incomplete listings and duplicates are skipped for free. A SUMMARY record in the run's key-value store shows how many jobs were saved and skipped, with details in FAILED_PAGES and INVALID_JOBS.

ResourceCost
Platform usage~$1.79 per 1,000 jobs
Actor fee$2.00 per 1,000 jobs
Total~$3.79 per 1,000 jobs

Limitations

  • LinkedIn limits guest API results to ~1000 jobs per search
  • Some company logos may not be available
  • Rate limiting is applied to respect LinkedIn's servers

Changelog

v1.0.0

  • Initial production release
  • Robust job parsing with multiple fallback selectors
  • Automatic retry on rate limiting
  • Duplicate detection
  • All major filters supported

This actor scrapes publicly available job listings from LinkedIn's guest API. No login or authentication is required or used. Please respect LinkedIn's Terms of Service and use responsibly for legitimate business purposes.

Support