LinkedIn Jobs Scraper - Professional Job Listings
Pricing
from $2.00 / 1,000 job search results
LinkedIn Jobs Scraper - Professional Job Listings
Scrapes public job listings from LinkedIn's job board. Filter by location, job type, experience level, and remote options. Extract company info, job descriptions, and application links. No login required.
Pricing
from $2.00 / 1,000 job search results
Rating
0.0
(0)
Developer
Alessandro Santamaria
Actor stats
2
Bookmarked
69
Total users
8
Monthly active users
4 days ago
Last modified
Categories
Share
LinkedIn Jobs Scraper — Global Job Data from the World's #1 Professional Network
Scrape public job postings from LinkedIn Jobs — the largest professional hiring platform on the planet, with 1B+ members and millions of active postings worldwide.
This actor returns structured JSON for every listing: title, company, location, posted date, full description, seniority, industry, applicant count, company logo, company LinkedIn URL, apply link and more. Works in any country LinkedIn serves.
Pairs naturally with our Indeed, Jobrapido, StepStone, Jobs.ch, Karriere.at and Pracuj.pl scrapers for complete multi-source coverage.
What you get
- Global coverage — every LinkedIn region, 30+ countries auto-detected to ISO country codes
- Three modes — search, search + full details, or direct URL re-scrape (for "still-alive" monitoring)
- Multi-query search with automatic cross-query deduplication and per-query limits
- Rich job data — title, company, location, description, seniority, industry, job function, applicant count, company logo
- Company enrichment — canonical LinkedIn company URL and logo for every listing
- Status detection — know which jobs are
online,expired, orofflinein direct-URL mode - Swiss canton detection — automatic ZH / BE / GE mapping for CH jobs
- Posted date normalized to ISO-8601
- Advanced filters — date posted, job type, experience level, remote/hybrid/on-site, sort order
- Respectful pagination up to LinkedIn's guest API cap
Use with AI Agents (MCP)
Connect this actor to any MCP-compatible AI client — Claude Desktop, Claude.ai, Cursor, VS Code, LangChain, LlamaIndex, or custom agents.
Apify MCP server URL:
https://mcp.apify.com?tools=santamaria-automations/linkedin-scraper
Example prompt once connected:
"Use
linkedin-scraperto scrape job listings from linkedin. Return results as a table."
Clients that support dynamic tool discovery (Claude.ai, VS Code) will receive the full input schema automatically via add-actor.
Use cases
- Recruitment & sourcing — monitor open roles by keyword and geography; build candidate pipelines from employer hiring signals
- Job aggregators & vertical search — ingest normalized LinkedIn listings into your own job board, ATS, or talent marketplace
- Competitor hiring intelligence — track which companies are hiring for which roles, at which seniority levels, in which locations, week over week
- Labour-market research — quantify hiring velocity by industry, role, and region; build reports on remote-work adoption or senior-level demand
- Salary benchmarking — capture salary text when publicly displayed and benchmark by role × seniority × location
- Still-alive monitoring — re-check previously scraped jobs in direct-URL mode to flag expired postings in your own database
Example output
{"id": "4371481846","title": "Senior Software Engineer, Checkout","company": "GetYourGuide","location": "Zurich, Zurich, Switzerland","canton": "ZH","country": "CH","job_status": "online","top_listing": false,"actively_hiring": true,"employment_type": "full-time","seniority_level": "Mid-Senior level","company_industry": "Technology, Information and Internet","job_function": "Engineering and Information Technology","applicants": "<25","description_snippet": "Get ready for an exciting career with GetYourGuide...","description_full": "Full job description with all details...","posted_at": "2026-03-05T00:00:00.000Z","source_url": "https://www.linkedin.com/jobs/view/4371481846","source_platform": "linkedin","search_query": "Software Engineer","company_url": "https://de.linkedin.com/company/getyourguide-ag","company_logo_url": "https://media.licdn.com/dms/image/company-logo/...","apply_url": "https://www.linkedin.com/jobs/view/4371481846","scraped_at": "2026-03-09T08:30:00.000Z"}
How to use
Pick one of three modes, configure filters, run.
Mode 1 — Search
Return basic job data from LinkedIn's search results. Cheapest option, great for discovery and broad market scans.
{"searchQueries": ["Software Engineer", "Data Scientist"],"location": "Switzerland","datePosted": "past-week","jobType": "full-time","maxResultsPerQuery": 100}
Mode 2 — Search + Details
Same as Mode 1 but also fetches each job's detail page for the full description, employment type, seniority, industry, job function, and applicant count.
{"searchQueries": ["Data Scientist"],"location": "Zurich","maxResultsPerQuery": 50,"includeJobDetails": true}
Mode 3 — Direct URLs (still-alive checks)
Pass a list of LinkedIn job URLs — the actor fetches each one and returns the full job data plus a job_status of online, offline, expired, or unknown. Perfect for verifying that jobs in your own database are still live.
{"directUrls": ["https://www.linkedin.com/jobs/view/3812345678","https://www.linkedin.com/jobs/view/3823456789"]}
Input
| Parameter | Description | Example |
|---|---|---|
searchQueries | Keywords to search (deduplicated across queries) | ["Software Engineer", "Data Engineer"] |
searchQuery | Single keyword (legacy, backward compatible) | "Data Scientist" |
location | City, region, or country | "Zurich", "Switzerland", "San Francisco Bay Area" |
country | Alternative to location — country name or code | "DE", "Germany" |
datePosted | any, past-24h, past-week, past-month | "past-week" |
sortBy | "" (default), DD (most recent), R (most relevant) | "DD" |
jobType | full-time, part-time, contract, temporary, internship | "full-time" |
experienceLevel | entry, associate, mid-senior, director, executive | "mid-senior" |
remoteFilter | remote, on-site, hybrid | "remote" |
maxResultsPerQuery | Max results per keyword | 100 |
maxResults | Global cap (0 = unlimited) | 500 |
includeJobDetails | Fetch full descriptions from detail pages | true |
directUrls | List of LinkedIn job URLs (skips search) | ["https://..."] |
proxyConfiguration | Apify proxy settings (Residential recommended) | {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]} |
Output fields
Always present: id, title, company, location, country, canton (CH only), job_status, top_listing, actively_hiring, posted_at, source_url, source_platform, search_query, company_url, company_logo_url, apply_url, scraped_at.
With includeJobDetails: true or direct URLs: description_snippet, description_full, employment_type, seniority_level, company_industry, job_function, applicants, remote_option, salary_text.
The applicants field is normalized:
| LinkedIn shows | Output |
|---|---|
| "Be among the first 25 applicants" | <25 |
| "95 applicants" | 95 |
| "Over 200 applicants" | 200+ |
Pricing
Pay only for what you receive — no monthly fees, no minimum spend.
| Event | Price |
|---|---|
| Actor start | $0.05 |
Search result (includeJobDetails: false) | $0.002 / result |
Detail result (includeJobDetails: true or directUrls) | $0.005 / result |
Realistic examples
- 1,000 search results = $2.05 (start + 1,000 × $0.002)
- 1,000 jobs with full details = $5.05 (start + 1,000 × $0.005)
- 200 search + 50 detailed = $0.70 (start + 200 × $0.002 + 50 × $0.005)
- Still-alive check of 500 URLs = $2.55 (start + 500 × $0.005)
Compare to manual sourcing at EUR 0.50-1.00 per lead or commercial job-data feeds at EUR 1,000-5,000 / month.
Usage
Apify Console
- Go to the actor page
- Fill in
searchQueriesandlocation - Click Start — download the dataset as JSON / CSV / Excel
API
curl -X POST "https://api.apify.com/v2/acts/santamaria-automations~linkedin-scraper/runs" \-H "Authorization: Bearer YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{"searchQueries": ["Software Engineer", "Data Scientist"],"location": "Switzerland","maxResultsPerQuery": 100}'
Node.js SDK
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('santamaria-automations/linkedin-scraper').call({searchQueries: ['Data Scientist', 'ML Engineer'],location: 'Zurich',datePosted: 'past-week',includeJobDetails: true,maxResultsPerQuery: 50,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Found ${items.length} jobs`);
Still-alive monitoring
const run = await client.actor('santamaria-automations/linkedin-scraper').call({directUrls: ['https://www.linkedin.com/jobs/view/3812345678','https://www.linkedin.com/jobs/view/3823456789',],});const { items } = await client.dataset(run.defaultDatasetId).listItems();items.forEach(job => console.log(`${job.id}: ${job.job_status}`));
FAQ
Do I need to log in or provide a LinkedIn account? No. The actor only uses LinkedIn's public, guest-accessible job search — nothing behind the login wall.
Which countries are supported? Every country LinkedIn serves. Country codes are auto-detected for 30+ locales including DACH (AT / CH / DE), EU (FR / IT / ES / NL / BE / PL / PT / SE / NO / DK / IE / FI + more), UK, US, Canada, Australia, India, Singapore, Japan, Brazil, Mexico and more.
Can I use my own proxies?
Yes — pass a custom proxyConfiguration object. Apify Residential proxies are recommended for large runs.
How large can a single search go?
LinkedIn caps guest search at roughly 1,000 results per query (offset ~990). To go larger, split by city, date range, or job type and use multiple searchQueries.
Are salary fields always populated? Salary is only available when LinkedIn publicly displays it on the listing, which varies by employer and country. It's much more common in US listings than EU ones.
Limitations
- LinkedIn guest search caps at ~1,000 results per query (offset ceiling ~990). Large runs should split by filter (date, city, job type).
- Some fields (salary, requirements) depend on what the employer chose to publish and may be null.
- Contact-person fields are not exposed by LinkedIn and will be null.
- Only publicly accessible listings are scraped — nothing behind LinkedIn authentication.
Legal notice
This actor scrapes only publicly available job postings from LinkedIn's public job search (no login required, no data behind the authentication wall). Users are responsible for ensuring their use complies with LinkedIn's Terms of Service and applicable laws in their jurisdiction.
Issues & feedback
Facing an issue or need an extra field? Open an issue on the Issues tab — we respond within 24 hours and welcome feature requests.
Related Actors
Complete your global job-board coverage with our full suite:
- Indeed Scraper — Global #1 job aggregator
- Jobrapido Scraper — Multi-country aggregator (DACH + 50 countries)
- StepStone.de Scraper — Germany's #1 job board
- Jobs.ch Scraper — Switzerland's #1 job site
- Karriere.at Scraper — Austria's leading job board
- Arbeitsagentur.de Scraper — German Federal Employment Agency
- Stellenanzeigen.de Scraper — German national job board
- Pracuj.pl Scraper — Poland's top job site
Enrich your job data:
- Website Job Extractor — Pull jobs straight from company career pages
- Website Contact Extractor — Emails and phones from company websites
Or browse all santamaria-automations actors for the full scraping suite.