πŸ”₯ LinkedIn Jobs Scraper avatar

πŸ”₯ LinkedIn Jobs Scraper

Pricing

$29.99/month + usage

Go to Apify Store
πŸ”₯ LinkedIn Jobs Scraper

πŸ”₯ 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

Bebity

Maintained by Community

Actor stats

745

Bookmarked

35K

Total users

247

Monthly active users

19 days

Issues response

3 days ago

Last modified

Share

LinkedIn Jobs Scraper β€” scrape LinkedIn jobs into structured JSON, no login required

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 sinceFebruary 2023 β€” the longest-running LinkedIn jobs scraper on Apify
▢️ Total runs3,900,000+
πŸ‘₯ Users35,000+
βœ… Success rate99%+
πŸ“Š Data fields per job42 β€” the most of any LinkedIn jobs scraper on Apify
πŸ”‘ Login requiredNo β€” 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. Single linkedin.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 scrapingInfo object (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-items returns 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 β€” scrapingInfo tells 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

FieldDescription
titleJob title
description / descriptionHtmlFull job description, plain text and HTML
locationJob location
jobFunctionLinkedIn "Job function" (e.g. Engineering and Information Technology)
salaryRaw salary string as shown on LinkedIn
salaryMin / salaryMax / salaryCurrency / salaryPeriodStructured salary breakdown
contractTypeFull-time, Part-time, Contract, Temporary, Internship, Volunteer
experienceLevelInternship β†’ Director
workTypeOn-site, Remote or Hybrid
applicationsCountHow many people have applied
postedTime / publishedAtWhen the job was posted
benefitsListed benefits
applyType / applyUrlEasy Apply vs external, plus the direct apply link
jobUrl / idCanonical LinkedIn job URL and job ID
scrapingInfoProvenance: page, index, input URL, searched title, searched location
⭐ jobStateWhether the posting is still LISTED or CLOSED
⭐ postedAtTimestampExact posting time as an epoch (ms) β€” precise timestamp behind publishedAt
⭐ repostedJobWhether the posting is a repost
⭐ verifiedWhether the posting carries LinkedIn's "verified hiring" badge
⭐ locationParsedStructured location object β€” city, region, country (ISO), formatted

🏒 Company

FieldDescription
companyName / companyUrl / companyIdCompany identity and LinkedIn page
companyLogoLogo image URL
sectorIndustry sector
⭐ companyEmployeeCountCompany size
⭐ companyFollowerCountLinkedIn followers
⭐ companyIndustriesFull industry list
⭐ companyDescriptionCompany "About" text
⭐ companyWebsiteCompany's external website URL

πŸ§‘β€πŸ’Ό Recruiter

FieldDescription
posterFullName / posterProfileUrlWho posted the job, and their LinkedIn profile
⭐ posterHeadlineTheir headline
⭐ posterPhotoTheir profile photo
⭐ salarySourceWhether 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.

LinkedIn jobs scraper output example β€” job, company and recruiter data in JSON

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_TOTALS record to its key-value store β€” the total number of matching positions for each search, regardless of how many rows you 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

  1. Open LinkedIn Jobs and search however you like, using LinkedIn's own filters.
  2. Copy the URL from your browser β€” e.g. https://www.linkedin.com/jobs/search/?keywords=developer&location=Paris&f_WT=2.
  3. 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.
  4. 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

FieldWhat 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, contractType and experienceLevel inputs 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.

LinkedIn Jobs Scraper input β€” filter jobs by title, location, remote, experience level

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

ActorWhat it does
πŸ”₯ Best & Cheapest LinkedIn Profiles ScraperExtract LinkedIn profile data, pay per result
πŸ”₯ Best & Cheapest LinkedIn Companies ScraperExtract LinkedIn company pages, pay per result
πŸ”₯ Booking ScraperScrape 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.

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 ActorTypical alternative
On the Store sinceFebruary 20232024–2025
Total runs3.9M+Fewer
Data fields per job4219–31
Structured salary breakdownβœ… min / max / currency / periodRaw string only
Recruiter enrichmentβœ… name, headline, photo, profilePartial
Company enrichmentβœ… size, followers, industries, descriptionPartial
Result provenance (scrapingInfo)βœ…βŒ
Multi-title Γ— multi-location in one runβœ…βŒ
LinkedIn login required❌ NeverSometimes
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.