# Linkedin Jobs Scraper (PPE) (`eunit/linkedin-jobs-scraper`) Actor

Automate job data extraction with this LinkedIn Job Scraper Actor. Find job postings by title and location, scrape key details, and save directly to a dataset. Uses proxies and state persistence for reliable, continuous scraping. Get company info, job descriptions, and more.

- **URL**: https://apify.com/eunit/linkedin-jobs-scraper.md
- **Developed by:** [Emmanuel Uchenna](https://apify.com/eunit) (community)
- **Categories:** Automation, Jobs, Lead generation
- **Features:** Limited permissions, Single-tenant, Server interface
- **Stats:** 16 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.01 / 1,000 scraped results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## LinkedIn Job Scraper

### Overview

The **LinkedIn Job Scraper** has the following features:

- **Scrape valuable data:** Extract job titles, companies, locations, and more from LinkedIn.
- **Handle infinite scrolling:** Efficiently navigate through dynamically loaded content.
- **Parse HTML with Beautiful Soup:** Leverage a popular library to extract data from webpages.
- **Residential Proxies:** Uses Apify's residential proxies to avoid detection and IP bans.
- **Export to CSV:** Save scraped data in a clean, structured format for further analysis.

### Pricing

This Actor is priced on a **pay-per-event** basis. You are charged for each job posting successfully scraped. This model ensures you only pay for the value you receive.

### Proxy Configuration

This scraper forces the use of **Residential Proxies** to ensure high success rates and anonymity. When running on the Apify platform, these will be automatically configured. If running locally, ensure you have access to Apify Proxy and set the appropriate environment variables or pass the proxy configuration.

### Prerequisites

To use the [LinkedIn Job Scraper](https://apify.com/eunit/linkedin-jobs-scraper), provide the following information as input on the [input tab](https://console.apify.com/actors/xaEnW4YCeZPviXQF9/console):

- **Title**: e.g. "`Software developer`"
- **Location**: e.g. "`United States`"
- **Start**: e.g. `0`

### What's the output format

After the run you can get the job dataset in your desired format (JSON, CSV, XML, Excel, HTML Table, RSS, JSONL), in the dataset you will find:

```json
[
      {
      "id": "4320634407",
      "title": "Software Engineer (Reactjs, Python, AI)",
      "company": "Hillview Consulting Solutions",
      "location": "New York, NY",
      "number_of_applicants": null,
      "job_description": "Full Stack Engineer (React + Python) — Data & AI Applications Location: NYC Hybrid role- 3 days in NYC office Contract- 6 Months Payrate- $65 to 75/hr Type of Interview- First Take home exercise (data extraction + visualization exercise) 2nd one or two Tech+ Behavioural discussion (Video or might be onsite) About the Role: We are seeking a Full Stack Engineer with strong expertise in React and Python to join our Data & AI engineering team. The role involves building applications that extract and visualize structured insights from unstructured PDF documents such as rent rolls, leases, and marketing flyers. You will design and implement an end-to-end solution that parses document data, stores it in queryable databases, and enables intuitive search and visualization through a modern web UI. Responsibilities Design and build a frontend application using React for document visualization, search, and data exploration. Develop Python-based backend services to extract and transform unstructured document data (PDFs). Integrate OCR or GenAI-based tools for intelligent data extraction. Store extracted data in SQL databases and expose REST APIs for the frontend. Implement document upload, real-time parsing, and side-by-side result visualization with source citations. Ensure clean, modular, and testable code with proper documentation. Collaborate with the Data & AI team to improve extraction accuracy and user experience. Required Skills 3–6 years of full-stack development experience Strong React.js and frontend engineering fundamentals Solid Python programming skills (FastAPI, Flask, or Django) Experience with SQL databases and schema design Exposure to PDF parsing, OCR, or document AI Strong debugging and problem-solving skills Familiarity with GitHub and modern CI/CD workflows Preferred Skills Experience with LangChain, OpenAI API, or other LLM-based extraction tools Familiarity with vector databases (FAISS, Chroma) Data visualization experience (charts, tables, dashboards) Understanding of microservices and containerization (Docker)",
      "date_posted": "2 days ago",
      "job_url": "https://www.linkedin.com/jobs/view/software-engineer-reactjs-python-ai-at-hillview-consulting-solutions-4320634407?trk=public_jobs_topcard-title",
      "logo": "https://media.licdn.com/dms/image/v2/D4E0BAQHPY9zXEMtllQ/company-logo_100_100/company-logo_100_100/0/1685635589262/hillview_consulting_solutions_logo?e=2147483647&v=beta&t=N7S2yL6bdKjspHv-b1Qqwd1m0HI0XyaoBRBSaDmUN7E",
      "seniority_level": "Mid-Senior level",
      "employment_type": "Contract",
      "job_function": "Engineering and Information Technology",
      "industries": "Real Estate, Internet Marketplace Platforms, and Software Development"
    },
    {
      "id": "4306620914",
      "title": "Machine Learning Engineer, Robot Learning - Robotics Software Firm in High Growth",
      "company": "Andiamo",
      "location": "New York, NY",
      "number_of_applicants": "144 applicants",
      "job_description": "Senior Data Engineer About The Role Design and scale data platforms that power analytics, ML, and product features. You’ll build streaming and batch pipelines, enforce data contracts, and ensure trust in critical datasets. Responsibilities Develop ELT/ETL and near-real-time pipelines (Kafka/Flink/Spark) with strong SLAs. Model data (Dimensional/Data Vault), implement governance, lineage, and quality checks. Operate cloud data warehouses (Snowflake/BigQuery/Redshift) and lakehouse patterns (Iceberg/Delta/Hudi). Enable self-service with dbt, catalogs, and metrics layers; partner with DS/BI stakeholders. Requirements 5+ years in data engineering; strong SQL and Python/Scala. Experience with orchestration (Airflow/Dagster) and CI/CD for data. Focus on reliability, cost efficiency, and documentation. About Andiamo Andiamo is a globally recognized staffing and consulting firm specializing in placing the top 2% of technology and go-to-market professionals with the world’s largest and most well-known companies. For over 20 years, we've maintained the status of tier-one vendor for firms such as Amazon, Bloomberg, Palantir, MasterCard, Visa, Two Sigma, Citadel, as well as other major financial services firms, elite hedge funds, Google-backed tech start-ups, and major software firms. Our talent solutions include Permanent Placement, Contract Staffing, Executive Search, and Dedicated Recruiting Services (RPO). Find out more at www.andiamogo.com",
      "date_posted": "2 weeks ago",
      "job_url": "https://www.linkedin.com/jobs/view/machine-learning-engineer-robot-learning-robotics-software-firm-in-high-growth-at-andiamo-4306620914?trk=public_jobs_topcard-title",
      "logo": "https://media.licdn.com/dms/image/v2/D4E0BAQHPuA5fkezdzQ/company-logo_100_100/company-logo_100_100/0/1736365591445/andiamo_partners_logo?e=2147483647&v=beta&t=4mGgHbHTu8vkZnXBE_UHbVOQKDNlIojbxk1QVzAixT0",
      "seniority_level": "Entry level",
      "employment_type": "Full-time",
      "job_function": "Engineering and Information Technology",
      "industries": "Staffing and Recruiting"
    }
]
```

### FAQs

#### Is it legal to scrape LinkedIn?

While web scraping itself is [generally considered legal](https://blog.apify.com/is-web-scraping-legal/), there might be specific regulations you need to follow depending on your location.  For instance, rules set by [GDPR](https://gdpr-info.eu/) (Europe) or [CCPA](https://legal.thomsonreuters.com/en/insights/articles/understanding-california-consumer-privacy-act) (California) could come into play.

Also, while LinkedIn scrapers focus on publicly available information on job postings, it's important to remember that this public information might still include personal details.  Extracting this kind of data is only permissible if you have a valid justification.

If you're unsure if your reason qualifies, it's best to consult with a lawyer.  We also have a blog post on our site that explores [the legal aspects of web scraping](https://blog.apify.com/is-web-scraping-legal/) and [ethical considerations](https://blog.apify.com/what-is-ethical-web-scraping-and-how-do-you-do-it/).

Also, some websites may block you from scraping them. In such situations, we have a detailed blog post on [how to crawl a website without getting blocked](https://blog.apify.com/crawl-without-getting-blocked/#13-adhere-to-ethical-scraping-standards-and-gdpr).

#### Is there a LinkedIn API that can be used with Python?

LinkedIn does [offer an official API](https://learn.microsoft.com/en-us/linkedin/talent/job-postings/job-posting-overview) that you can use to create applications that help LinkedIn members; however, it might not be the most suitable solution for your project.

Many [developers have reported some drawbacks of the LinkedIn API](https://ethansk.medium.com/do-not-use-the-linkedin-api-e4cea9649115) citing various reasons. Among these drawbacks cited are:

- **LinkedIn's API rate limits**: These limits restrict the number of actions your application can take within a specific timeframe.  Exceeding these limits can lead to throttling or even blacklisting your IP address. This can be particularly problematic if your project relies heavily on frequent API calls, potentially impacting its performance and responsiveness. Compared to other APIs that might offer more generous limits or no limits at all, LinkedIn's stricter approach can limit your development flexibility.
- **Limited data scope**: The [LinkedIn jobs API is constantly evolving](https://dev.to/eunit/linkedin-jobs-api-36m7). It primarily grants access to your connections and a very limited view of public data.

### Your feedback

We are always working on improving the performance of our Actors. So if you’ve got any technical feedback for the [LinkedIn Job Posting Scraper](https://apify.com/eunit/linkedin-jobs-scraper) Actor or simply found a bug, please create an issue on the [Actor’s Issues tab](https://console.apify.com/actors/xaEnW4YCeZPviXQF9/issues) in [Apify Console](https://console.apify.com/actors/xaEnW4YCeZPviXQF9).

# Actor input Schema

## `title` (type: `string`):

The job title to search for (e.g., 'AI Engineer').

## `location` (type: `string`):

The geographical location for the job search (e.g., 'New York').

## `start` (type: `integer`):

The page number to start scraping from.

## Actor input object example

```json
{
  "title": "AI Engineer",
  "location": "New York",
  "start": 0
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("eunit/linkedin-jobs-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("eunit/linkedin-jobs-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call eunit/linkedin-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,eunit/linkedin-jobs-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/Jsau6UArIZ0JJ9Hz0/builds/2HqpIeRut960b2f7D/openapi.json
