π₯ LinkedIn Jobs Scraper
Pricing
$29.99/month + usage
π₯ LinkedIn Jobs Scraper
βΉοΈ Designed for both personal and professional use, simply enter your desired job title and location to receive a tailored list of job opportunities. Try it today!
Pricing
$29.99/month + usage
Rating
4.3
(73)
Developer
Bebity
Maintained by CommunityActor stats
745
Bookmarked
35K
Total users
247
Monthly active users
19 days
Issues response
3 days ago
Last modified
Categories
Share

LinkedIn Jobs Scraper extracts job postings from LinkedIn Jobs into clean, structured JSON, CSV or Excel β no LinkedIn account, no cookies, no login required. Paste a LinkedIn job search URL or fill in a few filters (job title, location, remote, salary, experience level), and get 42 data fields per job: full description, company profile, recruiter details, salary breakdown, applicant count and the direct apply URL.
Running on Apify since February 2023, this is the original LinkedIn jobs scraper on the Store β 3.9 million+ runs, 35,000+ users, and a 99%+ success rate. It has never been deprecated, never flagged under maintenance.
π September 2026 β major update. Fully rebuilt for LinkedIn's 2026 search filters, and now moving to pay-per-event pricing. No more $29.99/month subscription: you pay only for the jobs you actually get. See What's new.
| ποΈ On the Store since | February 2023 β the longest-running LinkedIn jobs scraper on Apify |
| βΆοΈ Total runs | 3,900,000+ |
| π₯ Users | 35,000+ |
| β Success rate | 99%+ |
| π Data fields per job | 42 β the most of any LinkedIn jobs scraper on Apify |
| π Login required | No β no LinkedIn account, no cookies |
What is LinkedIn Jobs Scraper?
LinkedIn Jobs Scraper is a LinkedIn Jobs API alternative: an unofficial, no-code LinkedIn job scraper that turns any LinkedIn job search into a structured dataset. LinkedIn has no public jobs API, so this Actor acts as a stand-in β it reads the same public job listings you see in your browser and returns them as machine-readable data you can query, filter, schedule and pipe into any tool.
Use it to scrape LinkedIn jobs for:
- π― Job hunting β track every new posting matching your title, location and work type, hours after it goes live.
- π Labor market research β extract salaries, seniority, contract types and applicant counts to benchmark a market or a role.
- π’ Recruitment & competitive intelligence β monitor who your competitors are hiring, in which cities, at what pay.
- π€ Lead generation β a company that is hiring is a company that is spending. Extract hiring signals plus the recruiter behind each posting.
- π€ AI agents & LLM pipelines β feed clean job data straight into an agent, RAG index or automation. See AI agents.
π What's new in the 2026 rebuild
LinkedIn overhauled its job search in 2026 and broke a lot of scrapers. This one was rebuilt from the ground up around the new endpoints and filters.
- β All 2026 LinkedIn filters supported, server-side and exact β work type (on-site / remote / hybrid), job type, experience level, industry, date posted, Easy Apply, under-10-applicants, company. Work type, job type, experience level and industry each accept several values at once (e.g. Remote or Hybrid), matched in one search. A Remote search returns genuinely remote roles, not a filtered-looking guess.
- π Industry filter by name β pick industries from a list (Software Development, Financial Services, Hospitals and Health Care, β¦), no codes to look up.
- π’ Search by company, three ways β company name, numeric id, or LinkedIn company page URL. Paste a company URL into Start URLs to scrape every job at that company.
- π Company website β an optional premium field adds each company's external site (
companyWebsite), a broader unique key than the LinkedIn URL. - π Search totals β each run reports how many jobs LinkedIn says match your search (
SEARCH_TOTALS), independent of how many you scrape. - π Paste LinkedIn URLs directly β copy any
linkedin.com/jobs/search/?...URL from your browser and every filter in it is honoured. Singlelinkedin.com/jobs/view/{id}URLs work too. - π Multi-title Γ multi-location search β search several job titles across several locations in one run, with each result tagged by the title and location that produced it.
- πΈ Salary parsing β the raw salary string plus a structured breakdown:
salaryMin,salaryMax,salaryCurrency,salaryPeriod. - π§ Full provenance β every job carries a
scrapingInfoobject (page, index, input URL, title, location) so you can always trace a row back to the exact search that produced it. - π Resumable runs β a migrated or restarted run picks up where it stopped. No duplicate rows, no double billing.
- β‘ Rebuilt performance layer β in-memory request queues, shared rate-limit backoff and smart session rotation. Fewer retries, faster runs, lower cost per job.
- π³ Pay-per-event pricing β pay for the jobs you receive, not for a monthly seat.
π€ Built for AI agents: Claude Code, ChatGPT, Codex, MCP
Most scrapers were designed for humans clicking a Run button. This one is designed to be called by an agent.
If you are building with Claude, Claude Code, ChatGPT, OpenAI Codex, Cursor, LangChain, LlamaIndex, CrewAI, n8n or Make, this Actor is directly callable as a tool β no glue code, no HTML parsing, no browser automation on your side.
How do I use LinkedIn Jobs Scraper with an AI agent?
- π MCP (Model Context Protocol) β Apify exposes every Actor through its MCP server at
https://mcp.apify.com. Add it to Claude Code, Claude Desktop, Cursor or any MCP client and your agent can search LinkedIn jobs as a native tool, with the input schema auto-discovered. - π§° Agent frameworks β official Apify integrations for LangChain, LlamaIndex, CrewAI and the OpenAI Agents SDK let you drop this Actor in as a tool in a few lines.
- π‘ One REST call β
POST https://api.apify.com/v2/acts/bebity~linkedin-jobs-scraper/run-sync-get-dataset-itemsreturns the finished dataset as JSON in a single synchronous request. Perfect for a function-calling loop. - π§© Predictable, typed output β a stable, documented schema with 42 fields and no surprise shape changes. Descriptions come in both plain text (
description, token-efficient for LLM context) and HTML (descriptionHtml, when you need the formatting). - π Traceable results β
scrapingInfotells the agent which query produced which row, so multi-step research stays grounded and citable. - π No auth to manage β no LinkedIn cookies to refresh, no session to babysit, no 2FA to solve. An unattended agent will not silently start returning login walls.
Why it matters: an agent that has to scrape LinkedIn itself burns context on HTML, breaks on every layout change, and gets blocked. Calling one Actor that returns typed JSON is faster, cheaper and far more reliable.
What data can you extract from LinkedIn jobs?
42 fields per job β the most complete LinkedIn job dataset on Apify. Results arrive in three clean views:
πΌ Jobs
| Field | Description |
|---|---|
title | Job title |
description / descriptionHtml | Full job description, plain text and HTML |
location | Job location |
jobFunction | LinkedIn "Job function" (e.g. Engineering and Information Technology) |
salary | Raw salary string as shown on LinkedIn |
salaryMin / salaryMax / salaryCurrency / salaryPeriod | Structured salary breakdown |
contractType | Full-time, Part-time, Contract, Temporary, Internship, Volunteer |
experienceLevel | Internship β Director |
workType | On-site, Remote or Hybrid |
applicationsCount | How many people have applied |
postedTime / publishedAt | When the job was posted |
benefits | Listed benefits |
applyType / applyUrl | Easy Apply vs external, plus the direct apply link |
jobUrl / id | Canonical LinkedIn job URL and job ID |
scrapingInfo | Provenance: page, index, input URL, searched title, searched location |
β jobState | Whether the posting is still LISTED or CLOSED |
β postedAtTimestamp | Exact posting time as an epoch (ms) β precise timestamp behind publishedAt |
β repostedJob | Whether the posting is a repost |
β verified | Whether the posting carries LinkedIn's "verified hiring" badge |
β locationParsed | Structured location object β city, region, country (ISO), formatted |
π’ Company
| Field | Description |
|---|---|
companyName / companyUrl / companyId | Company identity and LinkedIn page |
companyLogo | Logo image URL |
sector | Industry sector |
β companyEmployeeCount | Company size |
β companyFollowerCount | LinkedIn followers |
β companyIndustries | Full industry list |
β companyDescription | Company "About" text |
β companyWebsite | Company's external website URL |
π§βπΌ Recruiter
| Field | Description |
|---|---|
posterFullName / posterProfileUrl | Who posted the job, and their LinkedIn profile |
β posterHeadline | Their headline |
β posterPhoto | Their profile photo |
β salarySource | Whether the pay range is employer-provided or a LinkedIn estimate |
β = unlocked by a premium toggle: Company & hiring-contact insights (enrichCompany) covers the company fields + salarySource, the recruiter's posterHeadline + posterPhoto, and job metadata (jobState, postedAtTimestamp, repostedJob, verified, locationParsed) β all from one lookup, one charge; Company website (enrichCompanyWebsite) adds companyWebsite. Each is billed separately.

A real run: the three output views β πΌ Jobs, π’ Company and π§βπΌ Recruiter β and the scrapingInfo block that maps every row back to the search that produced it.
How many jobs match a search? When LinkedIn exposes it, each run also writes a
SEARCH_TOTALSrecord to its key-value store β the total number of matching positions for each search, regardless of how manyrowsyou actually scraped.
How to scrape LinkedIn jobs β step by step
There are two ways to run a search. Pick whichever is easier.
Option 1 β Paste LinkedIn URLs
- Open LinkedIn Jobs and search however you like, using LinkedIn's own filters.
- Copy the URL from your browser β e.g.
https://www.linkedin.com/jobs/search/?keywords=developer&location=Paris&f_WT=2. - Paste it into LinkedIn URLs (
startUrls). Add as many as you want, and mix three kinds of URL:- a search URL β
https://www.linkedin.com/jobs/search/?keywords=developer&location=Paris&f_WT=2; - a single job URL β
https://www.linkedin.com/jobs/view/4459772101; - a company page URL β
https://www.linkedin.com/company/openai/β scrapes every open job at that company.
- a search URL β
- Set Max results per URL (
maxRowsPerUrl) to cap each one β 0 (the default) = all available, until the last page β then click Start.
Every filter in the URL is applied, so you get exactly what you saw on LinkedIn. When you provide URLs, the structured filters below are ignored β each URL defines its own search.
Company URL β two ways. Paste a company page URL into Start URLs to get all of that company's jobs. Or, to filter a normal keyword/location search down to one or more companies, put their URLs in the Company URLs (
companyUrls) field instead (Option 2).
Option 2 β Fill in the filters
| Field | What it does |
|---|---|
π Job titles / keywords (titles) | What to search for (e.g. Web developer). Add several β each is searched separately and every result is tagged with the term it came from. |
π Job locations (locations) | Where to search (e.g. Paris, Germany). Every title is searched in every location, and each result is tagged with the location it came from. |
β‘ Easy Apply only (easyApply) | Only jobs with LinkedIn Easy Apply. |
π― Under 10 applicants (under10Applicants) | Only less-competitive roles. |
ποΈ Published at (publishedAt) | Past 24 hours, past week or past month. |
π’ Company name / id / URLs (companyName / companyId / companyUrls) | Restrict the search to specific companies. companyUrls takes LinkedIn company page URLs (e.g. https://www.linkedin.com/company/openai/) β often easier than the numeric id β and filters your search to them. |
π Workplace type (workTypes) | On-site / Remote / Hybrid β pick one or more to match any of them. |
π Employment type (contractTypes) | Full-time, Part-time, Contract, Temporary, Internship, Volunteer β pick one or more. |
π Experience level (experienceLevels) | Internship β Director β pick one or more. |
π Industry (industry) | Filter by company industry β pick one or more from the list (e.g. Software Development, Financial Services, Hospitals and Health Care). Pick several to match any of them. |
π’ Results per search (rows) | How many results per search (up to 1000). 0 (the default) = all available β every search runs to its last page. Each title Γ location counts as one search. |
β Company & hiring-contact insights (enrichCompany) | Adds company size / followers / industry / description and the salary source, plus the hiring contact's headline & photo (name & profile link come with every result). One lookup β one charge. Billed separately. |
β Company website (enrichCompanyWebsite) | Adds each company's external website URL (one extra lookup per company, reused across its jobs). Billed separately. |
No field is required. Fill in only what you care about β a title alone, a location alone, or just a filter. The old single-value
title,location,workType,contractTypeandexperienceLevelinputs still work if your saved task uses them, but they are no longer shown in the form β use the list fields (titles,locations,workTypes,contractTypes,experienceLevels) instead.

Fill in one job title and location, add several of each to search them all in one run, or open π Or paste LinkedIn URLs to work straight from a LinkedIn search URL.
How much does it cost to scrape LinkedIn jobs?
This Actor uses pay-per-event pricing: you pay for the results you receive, not a monthly subscription. There is no seat fee, no minimum commitment, and you are not billed separately for Apify platform usage.
- Base rate β charged per job returned. A run that returns 500 jobs costs 500 Γ the base rate, whatever filters you used to get there.
- β Premium add-ons β Company & hiring-contact insights (
enrichCompany) and Company website (enrichCompanyWebsite) are each billed separately, on top of the base rate, only for the jobs each one actually enriches. Enable either, both, or none. Leave them off and you never pay for them. - Resumed runs are not double-billed β a migrated or restarted run skips jobs it already delivered.
- Hard caps β set a max item or max cost limit on the run and the Actor stops scraping the moment the budget is reached, so it never spends compute on results you will not be charged for.
New Apify accounts get $5 in free credits every month, which is enough to try the Actor and pull thousands of jobs before paying anything.
Is there a free LinkedIn jobs scraper?
You can run this Actor on Apify's free plan using your monthly free credits β enough for a real evaluation, not just a demo. Beyond that you only pay per job, so a small job-hunting run costs cents rather than a $29.99 monthly subscription.
Input and output example
Input
{"titles": ["Software Engineer"],"locations": ["Berlin"],"workTypes": ["2", "3"],"industry": ["4"],"publishedAt": "r604800","rows": 100,"enrichCompany": true,"enrichCompanyWebsite": true}
Output (one item, trimmed)
{"id": "4459772101","title": "Senior Software Engineer","companyName": "Example GmbH","companyUrl": "https://www.linkedin.com/company/example","companyWebsite": "https://example.com/","companyId": "1234567","companyLogo": "https://media.licdn.com/dms/image/...","location": "Berlin, Germany","workType": "Remote","contractType": "Full-time","experienceLevel": "Mid-Senior level","jobFunction": "Engineering and Information Technology","sector": "Software Development","salary": "β¬70,000 - β¬90,000 per year","salaryMin": 70000,"salaryMax": 90000,"salaryCurrency": "EUR","salaryPeriod": "year","applicationsCount": "27 applicants","postedTime": "3 days ago","publishedAt": "2026-08-29","benefits": "Medical, Vision, 401k","applyType": "EXTERNAL","applyUrl": "https://careers.example.com/apply/4459772101","jobUrl": "https://www.linkedin.com/jobs/view/4459772101","description": "We are looking for a Senior Software Engineer...","posterFullName": "Jane Doe","posterProfileUrl": "https://www.linkedin.com/in/janedoe","posterHeadline": "Technical Recruiter at Example GmbH","posterPhoto": "https://media.licdn.com/dms/image/...","companyEmployeeCount": 2400,"companyFollowerCount": 51200,"companyIndustries": "Software Development","salarySource": "Employer provided","scrapingInfo": { "page": 1, "index": 3, "inputUrl": "", "title": "Software Engineer", "location": "Berlin" }}
You can download the dataset in JSON, CSV, Excel, HTML or XML, or pull it straight from the Apify API.
Integrations, API and scheduling
Because it runs on the Apify platform, this LinkedIn jobs scraper comes with far more than the scraper itself:
- β° Scheduling β run it every hour or every morning and catch new postings while they are still fresh.
- π Integrations β push results to Google Sheets, Airtable, Slack, Zapier, Make, n8n, Webhooks, Amazon S3 or Google Drive without writing code.
- π‘ Full REST API β start runs, poll status and fetch datasets programmatically. Official clients for JavaScript and Python.
- π Proxy rotation β residential proxies handled for you, so large runs keep working.
- π Monitoring β run history, logs, success rates and alerts when something breaks.
Other LinkedIn scrapers by Bebity
| Actor | What it does |
|---|---|
| π₯ Best & Cheapest LinkedIn Profiles Scraper | Extract LinkedIn profile data, pay per result |
| π₯ Best & Cheapest LinkedIn Companies Scraper | Extract LinkedIn company pages, pay per result |
| π₯ Booking Scraper | Scrape hotels and stays from Booking.com |
Pair this Actor with the profiles or companies scraper to go from a job posting β the hiring company β the people behind it.
FAQ
Do I need a LinkedIn account to scrape LinkedIn jobs?
No. This Actor reads publicly visible job listings and requires no LinkedIn login, no cookies and no session token. That is what makes it safe to run unattended, on a schedule, or from an AI agent β there is no account to get restricted and no credentials to rotate.
Is it legal to scrape LinkedIn jobs?
Our scrapers are ethical and do not extract private user data. They only collect what is already published publicly β job postings that employers deliberately made visible to everyone. We therefore believe this scraper, used for ethical purposes, is safe. However, your results may still contain personal data (for example the name of the recruiter who posted a job). Personal data is protected by the GDPR in the European Union and by similar regulations elsewhere. You should not scrape or store personal data without a legitimate reason. If you are unsure whether your reason is legitimate, consult your lawyers.
How is this different from other LinkedIn jobs scrapers on Apify?
| This Actor | Typical alternative | |
|---|---|---|
| On the Store since | February 2023 | 2024β2025 |
| Total runs | 3.9M+ | Fewer |
| Data fields per job | 42 | 19β31 |
| Structured salary breakdown | β min / max / currency / period | Raw string only |
| Recruiter enrichment | β name, headline, photo, profile | Partial |
| Company enrichment | β size, followers, industries, description | Partial |
Result provenance (scrapingInfo) | β | β |
| Multi-title Γ multi-location in one run | β | β |
| LinkedIn login required | β Never | Sometimes |
| Resumable, no double-billing | β | Varies |
Is LinkedIn Jobs Scraper reliable?
It has been on Apify Store since February 2023 with a 99%+ success rate across 3.9 million runs, and has never been deprecated or flagged under maintenance β Apify tests every Store Actor daily and removes the ones that break. It is actively maintained: the 2026 rebuild shipped days after LinkedIn changed its search filters.
How many jobs can I scrape at once?
By default rows is 0, which means all available β every search runs to its last page. Set a number to cap it instead (up to 1,000 per search). Each job title Γ location pair counts as its own search, so 5 titles across 4 locations is 20 searches. Bound the whole run with the max items or max cost limit you set on the run, and use maxRowsPerUrl the same way when you paste startUrls.
Can I get the salary for every job?
Only when LinkedIn shows one. Salary disclosure depends on the employer and on local pay-transparency law. When a range is present, you get both the raw string and the parsed salaryMin / salaryMax / salaryCurrency / salaryPeriod. With β premium data on, salarySource tells you whether the employer provided it or LinkedIn estimated it.
Why did my run report fewer searches than the titles I entered?
Titles and locations are de-duplicated (case-insensitively) before the title Γ location cross-product, so Engineer and engineer count once. The run tells you what it collapsed and how many unique searches it will actually run. Pasted startUrls that are not a LinkedIn job search or job posting are skipped with a notice rather than failing the run.
Something is not working β where do I get help?
Open a ticket in the Issues tab on this Actor's page. Bug reports, feature requests and questions all land there and are answered. If you need a custom version of this scraper for a specific workflow, mention it in an issue.