# LinkedIn Jobs Scraper Pro (`nuclear_mountainash/linkedin-jobs-scraper-pro`) Actor

Search LinkedIn jobs by title, location, seniority & work type. Multi-location, remote filter, Easy Apply detection. Export to XLSX, CSV, JSON.

- **URL**: https://apify.com/nuclear\_mountainash/linkedin-jobs-scraper-pro.md
- **Developed by:** [Sonal Sharma](https://apify.com/nuclear_mountainash) (community)
- **Categories:** Jobs, Social media, AI
- **Stats:** 4 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## LinkedIn Jobs Scraper Pro

**Search LinkedIn job listings by title, location, seniority, work type, and employment type — and export full results to XLSX, CSV, or JSON in minutes.**

Whether you're a job seeker targeting senior roles, a recruiter building talent pipelines, or an HR tech team tracking the market — LinkedIn Jobs Scraper Pro gives you structured, actionable job data without manual searching.

---

### What it does

LinkedIn Jobs Scraper Pro runs multi-location, multi-keyword searches against LinkedIn's job board and returns a clean, structured dataset for every matching role. For each job it captures:

- Job title, company, location
- Date posted
- Easy Apply flag (detected at card level and confirmed on detail page)
- Remote / hybrid flag (detected from title, location, and job description)
- Seniority level and employment type
- Applicant count
- Full job description (up to 5,000 characters)
- Direct job URL
- Which keyword and location found it

---

### Key features

**Multi-location, multi-keyword** — run any combination of job titles × locations in a single run. Search "Delivery Director" in India and the United States simultaneously.

**Remote & hybrid filter** — use LinkedIn's native work type filter to restrict results to Remote only, Hybrid only, On-site only, or all types.

**Easy Apply detection** — two-layer check: card badge (with 5 selector fallbacks for resilience against LinkedIn HTML changes) plus confirmation on the job detail page.

**Rich job details** — optionally visits each job page to extract the full description, confirmed seniority, employment type, and applicant count.

**Seniority filter** — target Internship, Entry, Associate, Mid-Senior, Director, or Executive levels independently.

**Employment type filter** — filter for Full-time, Part-time, Contract, Temporary, or any combination.

**Deduplication** — jobs found by multiple keywords or across multiple locations are deduplicated before output.

**Proxy support** — routes through Apify's proxy network to reduce blocking risk on large runs.

---

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `job_titles` | string list | — | Job titles to search (required) |
| `locations` | string list | India | LinkedIn location strings |
| `days_posted` | integer | 30 | Only jobs posted within N days |
| `max_jobs_per_keyword` | integer | 50 | Max results per keyword per location |
| `seniority_levels` | multi-select | Director, Executive | Seniority filter |
| `work_type` | select | All | On-site / Remote / Hybrid / All |
| `employment_types` | multi-select | Full-time | Employment type filter |
| `easy_apply_only` | boolean | false | Restrict to Easy Apply jobs |
| `fetch_job_details` | boolean | true | Visit each job page for full details |
| `use_apify_proxy` | boolean | true | Use Apify proxy network |

---

### Example input

```json
{
  "job_titles": [
    "Head of Engineering",
    "VP of Technology",
    "Delivery Director"
  ],
  "locations": [
    "India",
    "United States",
    "United Kingdom"
  ],
  "days_posted": 30,
  "max_jobs_per_keyword": 50,
  "seniority_levels": ["5", "6"],
  "work_type": "2",
  "easy_apply_only": false,
  "fetch_job_details": true,
  "use_apify_proxy": true
}
````

***

### Example output

Each job in the dataset looks like this:

```json
{
  "job_id": "3987654321",
  "job_title": "Head of Engineering",
  "company": "Acme Corp",
  "location": "Mumbai, Maharashtra, India",
  "date_posted": "2026-03-15",
  "easy_apply": "Yes",
  "remote_hybrid": "No",
  "seniority_level": "Director",
  "employment_type": "Full-time",
  "applicant_count": "47 applicants",
  "search_keyword": "Head of Engineering",
  "search_location": "India",
  "job_url": "https://in.linkedin.com/jobs/view/...",
  "job_description": "We are looking for a Head of Engineering to..."
}
```

***

### Usage tips

**For job seekers** — run weekly with `days_posted: 14` and `max_jobs_per_keyword: 50` to catch everything new without re-scraping old posts.

**For recruiters** — search a broad list of titles across multiple locations. Use the `job_description` field to filter by skills or stack in your own tooling.

**First-time run** — use `days_posted: 60` and `max_jobs_per_keyword: 75` to get a full backlog. Switch to shorter windows for recurring runs.

**Remote-only roles globally** — set `work_type` to "Remote only" and add locations like "United States", "United Kingdom", "Europe" to surface roles you can work from anywhere.

**Faster runs (no description)** — disable `fetch_job_details` to cut run time by ~60%. You'll still get title, company, location, date, Easy Apply, and URL.

***

### Performance

| Run type | Keywords × Locations | Est. jobs | Est. time |
|---|---|---|---|
| Quick scan (no details) | 10 × 2 | ~500 | ~10 min |
| Standard (with details) | 10 × 2 | ~500 | ~45 min |
| Deep run (with details) | 30 × 4 | ~2,000+ | ~3 hrs |

***

### Limitations

- LinkedIn may require login for some job detail pages. Jobs behind an auth wall will have `job_description: "Login required"` but all card-level fields are still captured.
- LinkedIn's HTML structure changes periodically. The scraper uses multi-selector fallbacks and text-based detection to stay resilient, but occasional updates may be needed.
- This scraper is for personal and research use. Please review LinkedIn's Terms of Service before using at scale.

***

### Output formats

Export your dataset from the Apify console as **XLSX**, **CSV**, **JSON**, or **JSONL** — or connect directly via the Apify API.

# Actor input Schema

## `job_titles` (type: `array`):

One or more job titles to search on LinkedIn. Each title runs as a separate search query. Examples: 'Head of Engineering', 'Delivery Director', 'Workday Practice Lead'.

## `locations` (type: `array`):

LinkedIn location strings. Each location is searched against every job title. Examples: 'India', 'Mumbai', 'United States', 'United Kingdom', 'Europe'. Leave empty for worldwide.

## `days_posted` (type: `integer`):

Only return jobs posted within this many days. Recommended: 14 for weekly runs, 30 for monthly, 60 for a first-time backfill.

## `max_jobs_per_keyword` (type: `integer`):

Maximum job listings per keyword per location. LinkedIn shows 25 per page — so 50 = 2 pages, 75 = 3 pages. For niche senior titles 50 is plenty. For broad titles go up to 100.

## `seniority_levels` (type: `string`):

Filter results by seniority level. Selects the LinkedIn f\_E filter codes — pick the combination that best matches your target audience.

## `work_type` (type: `string`):

Filter by work arrangement type.

## `employment_types` (type: `string`):

Filter by employment type. Select a combination or leave as All.

## `easy_apply_only` (type: `boolean`):

When enabled, only returns jobs with LinkedIn Easy Apply (no external redirect).

## `fetch_job_details` (type: `boolean`):

Visits each job page to collect the full description, seniority, employment type, and applicant count. Produces much richer data but takes longer. Disable for fast lightweight runs.

## `use_apify_proxy` (type: `boolean`):

Routes requests through Apify's proxy network to reduce LinkedIn blocking risk. Strongly recommended for runs over 100 jobs.

## Actor input object example

```json
{
  "job_titles": [
    "Head of Engineering",
    "Delivery Director",
    "Director of Operations"
  ],
  "locations": [
    "India",
    "United States",
    "United Kingdom"
  ],
  "days_posted": 30,
  "max_jobs_per_keyword": 50,
  "seniority_levels": "4,5,6",
  "work_type": "",
  "employment_types": "",
  "easy_apply_only": false,
  "fetch_job_details": true,
  "use_apify_proxy": true
}
```

# 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 = {
    "job_titles": [
        "Head of Engineering",
        "Delivery Director",
        "Director of Operations"
    ],
    "locations": [
        "India",
        "United States",
        "United Kingdom"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("nuclear_mountainash/linkedin-jobs-scraper-pro").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 = {
    "job_titles": [
        "Head of Engineering",
        "Delivery Director",
        "Director of Operations",
    ],
    "locations": [
        "India",
        "United States",
        "United Kingdom",
    ],
}

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

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

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

```

## CLI example

```bash
echo '{
  "job_titles": [
    "Head of Engineering",
    "Delivery Director",
    "Director of Operations"
  ],
  "locations": [
    "India",
    "United States",
    "United Kingdom"
  ]
}' |
apify call nuclear_mountainash/linkedin-jobs-scraper-pro --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=nuclear_mountainash/linkedin-jobs-scraper-pro",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "LinkedIn Jobs Scraper Pro",
        "description": "Search LinkedIn jobs by title, location, seniority & work type. Multi-location, remote filter, Easy Apply detection. Export to XLSX, CSV, JSON.",
        "version": "0.0",
        "x-build-id": "a2Onbyf6PDUYzkP1z"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/nuclear_mountainash~linkedin-jobs-scraper-pro/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-nuclear_mountainash-linkedin-jobs-scraper-pro",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/nuclear_mountainash~linkedin-jobs-scraper-pro/runs": {
            "post": {
                "operationId": "runs-sync-nuclear_mountainash-linkedin-jobs-scraper-pro",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/nuclear_mountainash~linkedin-jobs-scraper-pro/run-sync": {
            "post": {
                "operationId": "run-sync-nuclear_mountainash-linkedin-jobs-scraper-pro",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "job_titles"
                ],
                "properties": {
                    "job_titles": {
                        "title": "Job titles",
                        "type": "array",
                        "description": "One or more job titles to search on LinkedIn. Each title runs as a separate search query. Examples: 'Head of Engineering', 'Delivery Director', 'Workday Practice Lead'.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "locations": {
                        "title": "Locations",
                        "type": "array",
                        "description": "LinkedIn location strings. Each location is searched against every job title. Examples: 'India', 'Mumbai', 'United States', 'United Kingdom', 'Europe'. Leave empty for worldwide.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "days_posted": {
                        "title": "Posted within (days)",
                        "minimum": 1,
                        "maximum": 365,
                        "type": "integer",
                        "description": "Only return jobs posted within this many days. Recommended: 14 for weekly runs, 30 for monthly, 60 for a first-time backfill.",
                        "default": 30
                    },
                    "max_jobs_per_keyword": {
                        "title": "Max jobs per keyword per location",
                        "minimum": 25,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum job listings per keyword per location. LinkedIn shows 25 per page — so 50 = 2 pages, 75 = 3 pages. For niche senior titles 50 is plenty. For broad titles go up to 100.",
                        "default": 50
                    },
                    "seniority_levels": {
                        "title": "Seniority levels",
                        "enum": [
                            "4,5,6",
                            "5,6",
                            "6",
                            "5",
                            "4",
                            "3,4,5,6",
                            ""
                        ],
                        "type": "string",
                        "description": "Filter results by seniority level. Selects the LinkedIn f_E filter codes — pick the combination that best matches your target audience.",
                        "default": "4,5,6"
                    },
                    "work_type": {
                        "title": "Work arrangement",
                        "enum": [
                            "",
                            "1",
                            "2",
                            "3"
                        ],
                        "type": "string",
                        "description": "Filter by work arrangement type.",
                        "default": ""
                    },
                    "employment_types": {
                        "title": "Employment types",
                        "enum": [
                            "",
                            "F",
                            "C",
                            "F,C",
                            "F,P,C",
                            "P",
                            "T"
                        ],
                        "type": "string",
                        "description": "Filter by employment type. Select a combination or leave as All.",
                        "default": ""
                    },
                    "easy_apply_only": {
                        "title": "Easy Apply jobs only",
                        "type": "boolean",
                        "description": "When enabled, only returns jobs with LinkedIn Easy Apply (no external redirect).",
                        "default": false
                    },
                    "fetch_job_details": {
                        "title": "Fetch full job details",
                        "type": "boolean",
                        "description": "Visits each job page to collect the full description, seniority, employment type, and applicant count. Produces much richer data but takes longer. Disable for fast lightweight runs.",
                        "default": true
                    },
                    "use_apify_proxy": {
                        "title": "Use Apify Proxy",
                        "type": "boolean",
                        "description": "Routes requests through Apify's proxy network to reduce LinkedIn blocking risk. Strongly recommended for runs over 100 jobs.",
                        "default": true
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
