LinkedIn Jobs Scraper, Bulk & Company Data — No Login, $1.5/1k
Pricing
from $1.50 / 1,000 jobs
LinkedIn Jobs Scraper, Bulk & Company Data — No Login, $1.5/1k
LinkedIn Jobs Scraper: search LinkedIn jobs by keywords × locations in bulk, paste search URLs or company names, get full descriptions, salary numbers, applicants and optional company profiles. No login or cookies. MCP-ready for AI agents. $1.5 per 1,000 records.
Pricing
from $1.50 / 1,000 jobs
Rating
0.0
(0)
Developer
Peter Skotte
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
24 days ago
Last modified
Categories
Features
Share
LinkedIn Jobs Scraper — no login, bulk search, salary as numbers, company data
LinkedIn Jobs Scraper collects public LinkedIn job listings by keyword and location, by pasted search URL, by company, or from a list of keywords you keep in a Google Sheet. Every job comes back with the full description, seniority, employment type, industries, applicant count, salary parsed to numbers, Easy Apply vs external apply, a live check that flags closed postings, and (when LinkedIn shows one) the job poster. Turn on the company add-on and each job also carries the hiring company's website, employee count, headquarters, industry, founding year and specialties.
It uses LinkedIn's public guest endpoints. No LinkedIn account, no cookies, no login. Because the no-login path is what is used, the one thing LinkedIn does not hand out is the external "apply on company website" URL on most jobs (see Limits).
What you get
| Group | Fields (example values) |
|---|---|
| Job | jobId "4480995445", title, jobUrl, postedAt "2026-10-19", postedText "2 days ago", location |
| Company | companyName, companyUrl, companyLogo |
| Details | description (plain text), descriptionHtml, seniorityLevel "Mid-Senior level", employmentType "Full-time", industries |
| Salary | salaryText, salaryMin 143500, salaryMax 212850, salaryCurrency "USD", salaryPeriod "year" (from LinkedIn's salary field or, when written only in the text, parsed from the description) |
| Demand | applicantsText "Over 200 applicants", applicants 200 |
| Apply | applyType "EASY_APPLY" or "EXTERNAL", easyApply true/false, applyUrl (only when LinkedIn exposes it) |
| Benefits | benefits — list items found under a Benefits / Perks / "What we offer" heading of the description |
| Job poster | jobPosterName, jobPosterTitle, jobPosterProfileUrl, jobPosterPhoto — only when LinkedIn shows "Direct message the job poster" |
| Freshness | isLive false when the posting is closed, detailsFetched |
| Company add-on | companyId, companyDescription, companySlogan, companyWebsite, companyEmployeesCount 368, companyEmployeesRange "201-500", companyIndustry, companyHeadquarters, companyAddress {street, city, region, postalCode, country}, companyType, companyFounded 2017, companySpecialties[], companyFollowers, companyEnriched |
| Context | searchKeywords, searchLocation, searchUrl, scrapedAt |
jobFunction is kept in the schema for old users but is always null: LinkedIn's guest pages no longer serve it.
Use cases
- Recruiting and sourcing. Pull every new "data engineer" posting in 20 cities each morning, with salary numbers and the poster to contact.
- Salary benchmarking.
salaryMin/salaryMax/salaryPeriodare numbers, so you can chart pay by title and metro without text parsing. - Lead generation for staffing, HR-tech and B2B sales. Companies that are hiring for a role are buying signals. The company add-on gives website, headcount and industry for each.
- Competitor hiring intelligence. Pass company names or URLs and get all of their open roles, with no keywords needed.
- Labour-market research. Count postings by skill, seniority and workplace type over time; schedule it and keep the dataset.
- Job boards and aggregators. Feed fresh, de-duplicated listings (with the live check) into your own board.
- Monitoring. "Only new jobs" mode returns just the postings not seen in earlier runs.
Input
Choose one way to say what to search; all of them can be combined.
| Input | What it does |
|---|---|
searchUrls | LinkedIn search URLs (every filter in the URL is kept) and/or single job URLs (linkedin.com/jobs/view/...). Aliases urls, startUrls. |
keywords + location | One search. Empty {} input runs "python developer" in "Austin, Texas" so the default run returns a sample. |
keywordsList × locations | Bulk: every keyword is searched in every location. Alias titles. |
listUrl | Public Google Sheet, CSV or text URL. First column may hold keywords, search URLs, job URLs or company URLs. |
companyNames / companyIds | Only jobs at these companies (names or company URLs are resolved to all of the company's LinkedIn ids). With no keywords, returns every job at those companies. |
geoId, distance | Exact LinkedIn location id and radius in miles. |
postedWithin | any / day / week / month (alias datePosted). |
workplace, jobType, experience | On-site / remote / hybrid; full-time ... volunteer; internship ... executive. |
easyApply | Easy Apply jobs only. |
titleInclude, titleExclude | Keep or drop jobs by title words (all words of any phrase must match). |
splitByLocation, splitCountry | Beat LinkedIn's 1,000-per-search cap by running one search per state / metro. |
enrichCompany | Add the company profile fields (paid add-on, see Pricing). Alias scrapeCompany. |
fetchDetails | On by default: opens each job for description, salary, apply type, poster. Off = search card only, faster. |
maxItems | Total jobs, default 10. limitPerSearch caps each search. |
onlyNew, monitorId, skipJobIds | Incremental monitoring and de-duplication against ids you already hold. |
proxyConfiguration | Residential proxy (default US) is used on the platform. |
Example: bulk search
{"keywordsList": ["data analyst", "data engineer"],"locations": ["Munich, Germany", "Berlin, Germany", "London"],"postedWithin": "week","workplace": ["hybrid", "remote"],"titleExclude": ["intern", "staff"],"limitPerSearch": 100,"maxItems": 500}
Example: all jobs at certain companies, with company data
{"companyNames": ["Stripe", "https://www.linkedin.com/company/openai"],"enrichCompany": true,"maxItems": 200}
Example: paste a search URL you built on linkedin.com
{"searchUrls": ["https://www.linkedin.com/jobs/search/?keywords=data%20analyst&geoId=103644278&f_AL=true&f_TPR=r604800"],"maxItems": 100}
Example: every nurse job in the US past the 1,000 cap
{ "keywords": "nurse", "location": "United States", "splitByLocation": true, "maxItems": 20000 }
Supported for splitting: US (51 states and DC), CA, GB, IE, DE, FR, NL, BE, CH, AT, ES, IT, PT, SE, NO, DK, FI, PL, IN, AU, NZ, SG, AE, BR, MX, ZA. Other countries work as a normal search.
Example: daily monitor
{ "keywordsList": ["machine learning engineer"], "location": "United States", "postedWithin": "day", "onlyNew": true, "monitorId": "ml-us" }
Schedule it daily; each run returns only postings not returned by earlier runs with the same monitorId.
Output
One dataset item per job. The Overview view shows title, company, location, salary, applicants and link; the Company profiles view shows the add-on fields. Two complete rows from real runs follow (long text trimmed for this README only).
A job with the company add-on:
{"jobId": "4480995445","title": "Senior Data Analyst","jobUrl": "https://www.linkedin.com/jobs/view/4480995445","companyName": "Usercentrics","companyUrl": "https://de.linkedin.com/company/usercentrics","companyLogo": "https://media.licdn.com/dms/image/v2/D4D0BAQHwYL8YHDzAyw/company-logo_100_100/company-logo…","location": "Munich, Bavaria, Germany","postedAt": "2026-10-19","postedText": "2 days ago","salaryText": null,"salaryMin": null,"salaryMax": null,"salaryCurrency": null,"salaryPeriod": null,"seniorityLevel": "Not Applicable","employmentType": "Full-time","jobFunction": null,"industries": "IT Services and IT Consulting","applicantsText": "184 applicants","applicants": 184,"description": "SHAPE THE FUTURE OF PRIVACY WITH USERCENTRICS Usercentrics is a global leader in the field of consent management platforms (CMP). We follow our company vision to build a world where user privacy enables a thriving digital ecosystem. Our mission is to provide privacy solutions that empower organizations to embrace data privacy while building trust with their users through freedom of choice. With ou … [trimmed for this README]","descriptionHtml": "<p>SHAPE THE FUTURE OF PRIVACY WITH USERCENTRICS <br></p><p>Usercentrics is a global leader in the field of consent management platforms (CMP). We follow our company vision to build a world where user privacy enables a thriving digital ecosystem. Our mission is to provide privacy solutions that … [trimmed for this README]","applyUrl": null,"applyType": "EASY_APPLY","easyApply": true,"benefits": null,"jobPosterName": null,"jobPosterTitle": null,"jobPosterProfileUrl": null,"jobPosterPhoto": null,"isLive": true,"detailsFetched": true,"companyId": "18532079","companyDescription": "At Usercentrics, we believe that user privacy, consent, and preferences should be at the heart of every digital strategy. By leading the way with Privacy-Led Marketing, we empower businesses with the tools they need to build and maintain trust and transparency while respecting user choices. \n\nWe off … [trimmed]","companySlogan": "The Google-certified CMP empowering businesses to build trust through user privacy.","companyWebsite": "https://usercentrics.com/","companyEmployeesCount": 368,"companyEmployeesRange": "201-500","companyIndustry": "Software Development","companyHeadquarters": "Munich, Bavaria","companyAddress": {"street": "Sendlinger Straße 7","city": "Munich","region": "Bavaria","postalCode": "80331","country": "DE"},"companyType": "Privately Held","companyFounded": 2017,"companySpecialties": ["GDPR","ePrivacy","LegalTech","Adtech","Usercentrics","SaaS","… (27 in total)"],"companyFollowers": 31875,"companyEnriched": true,"searchKeywords": "data analyst","searchLocation": "Munich, Germany","searchUrl": "https://www.linkedin.com/jobs/search?keywords=data+analyst&location=Munich%2C+Germany","scrapedAt": "2026-10-21T17:32:02.901Z"}
A job with a job poster (pasted job URL, no company add-on, so the company fields are null):
{"jobId": "4480493778","title": "Data Analyst","jobUrl": "https://www.linkedin.com/jobs/view/4480493778","companyName": "I3 INFOTEK INC","companyUrl": "https://www.linkedin.com/company/i3infotek-inc","companyLogo": "https://media.licdn.com/dms/image/v2/C560BAQGO6-aVNgJ-0A/company-logo_100_100/company-logo…","location": "Phoenix, AZ","postedAt": "2026-10-20","postedText": "23 hours ago","salaryText": null,"salaryMin": null,"salaryMax": null,"salaryCurrency": null,"salaryPeriod": null,"seniorityLevel": "Mid-Senior level","employmentType": "Contract","jobFunction": null,"industries": "Health and Human Services and Manufacturing","applicantsText": "Over 200 applicants","applicants": 200,"description": "Data Analysts identify, extract and mine data from designated sources, reorganize it in a format that can be easily analyzed, integrated and used by either human or machine. They develop statistical, analytical, and executive level reports, dashboards and charts that show data in a context that allows decision-makers to gain insights into the data and make informed business decisions.Knowledge of: … [trimmed for this README]","descriptionHtml": "<p>Data Analysts identify, extract and mine data from designated sources, reorganize it in a format that can be easily analyzed, integrated and used by either human or machine. They develop statistical, analytical, and executive level reports, dashboards and charts that show data in a context that a … [trimmed for this README]","applyUrl": null,"applyType": "EASY_APPLY","easyApply": true,"benefits": null,"jobPosterName": "Aman S","jobPosterTitle": "Talent Acquisition Specialist (Medical / Pharma / Healthcare)","jobPosterProfileUrl": "https://www.linkedin.com/in/aman-s-a600b8228","jobPosterPhoto": "https://static.licdn.com/aero-v1/sc/h/9c8pery4andzj6ohjkjp54ma2","isLive": true,"detailsFetched": true,"companyId": null,"companyDescription": null,"companySlogan": null,"companyWebsite": null,"companyEmployeesCount": null,"companyEmployeesRange": null,"companyIndustry": null,"companyHeadquarters": null,"companyAddress": null,"companyType": null,"companyFounded": null,"companySpecialties": null,"companyFollowers": null,"companyEnriched": false,"searchKeywords": "data analyst","searchLocation": null,"searchUrl": "https://www.linkedin.com/jobs/search/?currentJobId=4481259651&f_AL=true&f_TPR=r604800&geoId=103644278&keywords=data%20analyst&origin=JOB_SEARCH_PAGE_JOB_FILTER&refresh=true","scrapedAt": "2026-10-21T17:32:02.952Z"}
A run also writes an OUTPUT record in the key-value store: records, searches, failed, companiesEnriched and a per-search summary (search, status, records, scanned). Partial results are kept if a search fails.
Pricing
Pay per event, no subscription.
| Event | Price | Meaning |
|---|---|---|
| Actor start | $0.005 | once per run |
| Job | $0.0015 | per job returned = $1.50 per 1,000 jobs |
| Company profile (add-on) | $0.005 | once per unique company per run, only when enrichCompany is on; billed from the date this price takes effect |
Examples: 1,000 jobs = $1.505. 1,000 jobs from 40 distinct companies with the add-on = $1.705, because the add-on is billed per company, not per job. Platform usage is included. Jobs you list in skipJobIds or skip through onlyNew are not returned and not billed.
Limits and FAQ
How many jobs per search? LinkedIn serves at most 1,000 per search (the 1,001st request returns HTTP 400). Use splitByLocation, several locations or several keywords to go beyond it.
Does it need my LinkedIn login? No. Never share a cookie with this actor.
What is missing compared with a logged-in session? The external apply URL is login-gated on most jobs (0 of 10 sampled exposed it), so applyUrl is usually null; applyType still tells you Easy Apply vs external. Structured benefit badges and employer-vs-estimate salary source are login-only; benefits is read from the description text. jobFunction is no longer served to guests.
Is "under 10 applicants" reliable? Best effort. The filter is sent, but LinkedIn's public search returned the same first page with and without it in our test, so check applicants.
Why is a job poster missing? LinkedIn shows the poster on only some jobs (2 of 15 sampled).
Why did a page return fewer jobs? LinkedIn occasionally answers a valid page with zero cards; the actor retries before treating it as the end of results.
Is scraping LinkedIn legal? The actor reads only publicly visible job postings without logging in. You are responsible for how you use the data; comply with applicable law and LinkedIn's terms for your use case, and do not use personal data (job poster names) beyond what your jurisdiction allows.
Integrations
- API / clients. Run via the Apify API, the Python client (
ApifyClient("TOKEN").actor("outstanding_vegetable/linkedin-jobs-guest-scraper").call(run_input=...)) or the JavaScript client. - Schedules and webhooks. Schedule daily runs with
onlyNew, and send a webhook to your endpoint when a run succeeds. - No-code. Make, Zapier, n8n, Google Sheets and Airtable integrations work with the dataset.
- Export. JSON, CSV, Excel, XML, RSS from the dataset.
- AI agents. Available through the Apify MCP server, so assistants can call it as a tool.