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
5.0
(1)
Developer
Ale
Maintained by CommunityActor stats
3
Bookmarked
314
Total users
82
Monthly active users
a day ago
Last modified
Categories
Share
LinkedIn Jobs Scraper
Scrape public job postings from LinkedIn Jobs, the world's largest professional hiring platform with 1B+ members and millions of active listings.
Returns structured JSON for every listing: title, company, location, salary, full description, seniority, industry, applicant count, company logo, hiring manager, company website, type, headquarters, founded year, follower count, specialties, funding rounds, featured employees, latest company updates, 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.
Try it free
Every Apify account includes $5 in free monthly credits. At $0.001 per result, that covers 5,000 LinkedIn job listings before you pay anything.
What you get
- Global coverage -- every LinkedIn region, 40+ countries with auto-detected ISO country codes
- Four modes -- keyword search, search without detail pages, paste a LinkedIn search URL, or re-check a list of specific job URLs
- City-level expansion -- when a whole country is specified, automatically fans out to major cities to bypass the ~990-result-per-query ceiling
- Easy Apply filter -- search and flag LinkedIn Easy Apply jobs only
- Structured salary --
salary_min,salary_max,salary_currency,salary_periodparsed from raw text - 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
- Hiring manager -- job poster name, title, and LinkedIn profile URL from detail pages
- Company enrichment -- type, founded year, headquarters, follower count, specialties, employee count, website, description, funding data, featured employees, and latest updates; fetched once per unique company and applied to every job from that employer
- Funding intelligence -- total rounds, last round type, date, amount, and Crunchbase URL directly from the company profile
- Featured employees -- name and LinkedIn URL of the visible (non-blurred) employee cards on the company page; useful for finding key contacts per company
- Company updates -- up to 5 most recent posts from the company's LinkedIn feed
- Status detection --
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
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 and sourcing -- monitor open roles by keyword and geography; build candidate pipelines from employer hiring signals
- Job aggregators and 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, and 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,"easy_apply": false,"employment_type": "full-time","seniority_level": "Mid-Senior level","remote_option": "hybrid","salary_text": "$120,000 - $160,000/yr","salary_min": 120000,"salary_max": 160000,"salary_currency": "USD","salary_period": "year","company_industry": "Technology, Information and Internet","company_employee_count": "501-1000 employees","company_website": "https://www.getyourguide.com","company_type": "Privately Held","company_founded": "2009","company_headquarters": "Berlin, Germany","company_follower_count": "48321","company_specialties": ["Travel", "Tours", "Activities", "Experiences"],"company_jobs_url": "https://www.linkedin.com/company/getyourguide-ag/jobs","company_funding_rounds": "8","company_last_funding_type": "Series E","company_last_funding_date": "2019-07-19","company_last_funding_amount": "484,000,000 $","company_crunchbase_url": "https://www.crunchbase.com/organization/getyourguide","company_featured_employees": [{ "name": "Tao Tao", "url": "https://www.linkedin.com/in/taotao" },{ "name": "Johannes Reck", "url": "https://www.linkedin.com/in/johannesreck" }],"company_latest_updates": [{ "url": "https://www.linkedin.com/posts/getyourguide_...", "text": "Exciting news from our team..." }],"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 four modes, configure filters, run.
Mode 1 -- Search with full details (default)
Returns rich job data including full description, employment type, seniority, industry, job function, applicant count, company info, and hiring manager. Full detail fetch is on by default.
{"searchQueries": ["Software Engineer", "Data Scientist"],"location": "Switzerland","datePosted": "past-week","maxResultsPerQuery": 100}
Specifying a whole country ("location": "Germany" or "country": "DE") automatically expands to major cities -- Berlin, Munich, Hamburg, Frankfurt and more -- to bypass LinkedIn's ~990-result-per-query ceiling and pull thousands of results in one run.
Mode 2 -- Search (SERP only, fast bulk)
Set includeJobDetails: false to skip the per-job detail fetch. Returns title, company, location, logo, and posted date at roughly 3x the speed. Best for large-scale market scans where you only need the basics.
{"searchQueries": ["Data Scientist"],"location": "Germany","includeJobDetails": false,"maxResultsPerQuery": 500}
Mode 3 -- Start URLs (paste your own search URL)
Paste any LinkedIn job search URL directly from your browser -- the actor paginates from it and extracts all matching jobs.
{"startUrls": ["https://www.linkedin.com/jobs/search/?keywords=DevOps+Engineer&location=Netherlands&f_WT=2"],"maxResultsPerQuery": 200}
Mode 4 -- Direct URLs (still-alive monitoring)
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 |
|---|---|---|
startUrls | LinkedIn search URLs pasted from your browser (actor paginates each) | ["https://www.linkedin.com/jobs/search/?keywords=..."] |
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" |
easyApply | Filter for LinkedIn Easy Apply jobs only | true |
maxResultsPerQuery | Max results per keyword | 100 |
maxResults | Global cap (0 = unlimited) | 500 |
includeJobDetails | Fetch full descriptions and structured data from job detail pages | true |
includeCompanyDetails | Fetch company profile once per unique employer to get type, founded year, headquarters, followers, specialties, funding rounds, featured employees, and latest updates. Requires includeJobDetails. | true |
directUrls | List of LinkedIn job URLs (skips search) | ["https://..."] |
Output fields
Always present: id, title, company, location, country, canton (CH only), job_status, top_listing, actively_hiring, easy_apply, posted_at, source_url, source_platform, search_query, apply_url, company_url, company_logo_url, scraped_at.
Salary (when publicly shown by the employer): salary_text (raw), salary_min, salary_max, salary_currency (ISO 4217), salary_period (year / month / hour).
With includeJobDetails: true or direct URLs: description_snippet, description_full, description_html (raw HTML), employment_type, seniority_level, company_industry, job_function, applicants, remote_option, company_employee_count, company_website, company_description, job_poster_name, job_poster_title, job_poster_profile_url, job_poster_photo_url.
With includeCompanyDetails: true (requires includeJobDetails): company_type, company_founded, company_headquarters, company_follower_count, company_specialties, company_jobs_url. Also improves fill rates for company_industry, company_employee_count, company_website, and company_description.
Funding (when publicly displayed by the company): company_funding_rounds, company_last_funding_type, company_last_funding_date (ISO-8601), company_last_funding_amount, company_crunchbase_url.
People and activity: company_featured_employees (array of {name, url} for the visible non-blurred employee cards on the company page), company_latest_updates (array of {url, text} for up to 5 recent company posts).
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. New accounts get $5 free per month, which covers 5,000 results.
| Event | Price |
|---|---|
| Actor start | $0.001 |
| Per job result | $0.001 |
Realistic examples
- 1,000 search results = ~$1.00
- 1,000 jobs with full descriptions = ~$1.00
- Still-alive check of 500 URLs = ~$0.50
Compare to 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.
How large can a single search go?
LinkedIn caps search at roughly 1,000 results per query. When you specify a country ("location": "Germany" or "country": "DE"), the actor automatically expands to all major cities, giving you thousands of results per keyword in a single run.
Are salary fields always populated? Salary is only available when LinkedIn publicly displays it on the listing, which varies by employer and country. It is much more common in US listings than EU ones.
How much does company enrichment slow things down? One extra HTTP request per unique company, with a 1-second delay between requests. A search returning 100 jobs from 80 distinct companies adds roughly 80 seconds to the run.
Limitations
- LinkedIn caps search at ~1,000 results per keyword per location. Country-level inputs trigger automatic city expansion to work around this ceiling.
- Some fields (salary, company website, employee count) depend on what the employer chose to publish and may be null.
- Job poster fields are not exposed on all listings -- availability depends on LinkedIn's public pages.
- 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 and 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
- Naukri Scraper -- India and Gulf's #1 job board
- Computrabajo Scraper -- Latin America's leading job board (19 countries)
- Seek Scraper -- Asia-Pacific job board (Australia, New Zealand, and 6 more countries)
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.