# Linkedin Job Search Scraper (`datadoping/linkedin-job-search-scraper`) Actor

For $1.2 per 1000 results. Extract LinkedIn jobs data including description, titles, company info, application details. This actor has advanced filtering by location, experience, job type, and easy apply status.

- **URL**: https://apify.com/datadoping/linkedin-job-search-scraper.md
- **Developed by:** [Data Doping](https://apify.com/datadoping) (community)
- **Categories:** Jobs, Automation, Social media
- **Stats:** 137 total users, 3 monthly users, 100.0% runs succeeded, 5 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 jobs

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

🔍 What is LinkedIn Jobs Scraper?

LinkedIn Jobs Scraper automates the process of searching and gathering publicly available job listings from LinkedIn using keyword-based queries. Simply provide job keywords and filters, and the scraper will fetch comprehensive job details from search results such as:

**Job Information:**

- Job title and description
- Company name and details
- Job URLs and application links
- Location and work type (remote, on-site, hybrid)
- Salary information and benefits

**Company Details:**

- Company name and URL
- Company verification status
- Company URN and navigation subtitle
- Job insights and metadata

**Application Data:**

- Easy Apply availability
- Applicant count information
- Application URLs and requirements
- Job posting timestamps

**Search Features:**

- Keyword-based job search
- Location filtering
- Sort by relevance or recent postings
- Date filtering (past day, week, month)
- Experience level filtering
- Job type filtering (full-time, part-time, contract, etc.)
- Remote work options
- Easy Apply filter
- Under 10 applicants filter

All extracted data is limited strictly to public information—nothing private or sensitive is collected.

💡 Why Search LinkedIn Jobs?

LinkedIn job search provides valuable insights for job seekers and recruiters:

🔎 **Job Discovery**: Find relevant job opportunities based on specific keywords and criteria.

🧠 **Market Research**: Monitor job market trends and salary information in real-time.

📈 **Career Planning**: Identify in-demand skills and job requirements in your field.

🤝 **Recruitment**: Source candidates and understand job market competition.

📊 **Competitive Analysis**: Track job postings from competitors and industry leaders.

🎯 **Salary Research**: Compare salary ranges and benefits across different companies.

⚖️ Is it Legal to Search LinkedIn Jobs?

We prioritize ethical scraping practices.

This scraper only extracts information that companies have chosen to display publicly on LinkedIn. It does not access private data, restricted content, or information behind login walls. All data collection follows LinkedIn's robots.txt guidelines and respects rate limits.

🚀 How to Use

1. **Job Keywords**: Provide the job title, skills, or keywords to search for
   - Example: `software engineer`, `marketing manager`, `data scientist`

2. **Location**: Specify the geographic location for job search
   - Example: `New York, NY`, `Remote`, `United States`

3. **Sort Options**: Choose how to sort results
   - `relevant`: Sort by relevance to the search keywords
   - `recent`: Sort by most recent postings

4. **Date Posted**: Filter jobs by when they were posted
   - `day`: Jobs from the past day
   - `week`: Jobs from the past week
   - `month`: Jobs from the past month

5. **Additional Filters**:
   - **Easy Apply**: Show only jobs with Easy Apply option
   - **Remote Work**: Filter by work type (on-site, remote, hybrid)
   - **Under 10 Applicants**: Show only jobs with fewer than 10 applicants
   - **Experience Level**: Filter by required experience (internship, entry, associate, mid-senior, director, executive)
   - **Job Type**: Filter by employment type (full-time, part-time, contract, internship, other)

6. **Maximum Jobs**: Set the maximum number of jobs to scrape (minimum 10, default 100)

📊 Output Data Structure

The scraper returns comprehensive job data including:

- **Job Details**: Title, description, URL, ID, and metadata
- **Company Info**: Name, URL, verification status, and company details
- **Location & Work**: Location, work type, and geographic information
- **Compensation**: Salary information and benefits
- **Application**: Easy Apply status, applicant count, and application URLs
- **Timestamps**: Job posting and creation dates
- **Search Metadata**: Keywords and filters used

🔧 Technical Features

- **Advanced Filtering**: Multiple filter options for precise job search
- **Input Validation**: Validates search parameters and provides defaults
- **Sorting Options**: Sort results by relevance or recency
- **Date Filtering**: Filter results by publication timeframe
- **Pagination**: Automatic page handling to reach maximum job limit
- **Error Handling**: Comprehensive error reporting for failed requests
- **Rate Limiting**: Respects API rate limits for stable operation
- **Resume Capability**: Can resume from where it left off

⚠️ Important Notes

- All data is publicly available information only
- Free tier users have rate limits
- Free tier limited to 10 keywords per 100 jobs in total
- To unlock unlimited scraping, [subscribe to a paid plan](https://apify.com?fpr=sfks2f)

# Actor input Schema

## `keywords` (type: `string`):

Required. Job title, skills, or any search text (e.g. role name, stack, company type).

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

Optional. Free-text place: country, city, region, or metro (e.g. United States, London, New York).

## `datePostedSeconds` (type: `integer`):

Optional. Only jobs posted in the last N seconds. Examples: 86400 = past day, 604800 = past week, 2592000 ≈ past 30 days, 7776000 ≈ past 90 days.

## `geoIds` (type: `array`):

Optional. One or more LinkedIn geoId values as strings. Examples: United States — 103644278; United Kingdom — 101165590; India — 102713980; Canada — 101174742; Germany — 101282230; France — 105015875.

## `companyIds` (type: `array`):

Optional. LinkedIn company IDs. Examples: Google — 1441; Microsoft — 1035; Amazon — 1586; Apple — 162479; Meta — 10667; Netflix — 165158; LinkedIn — 1337.

## `workTypes` (type: `array`):

Optional. Choose one or more: on-site, remote, hybrid. Remove any you do not want to include.

## `experienceLevels` (type: `array`):

Optional. Seniority filters (sent as LinkedIn experience tier labels). Remove levels you do not need.

## `jobTypes` (type: `array`):

Optional. LinkedIn employment type codes. Choose any combination; remove what you do not want.

## `max_jobs` (type: `integer`):

How many job rows to store in the dataset (minimum 10). Examples: 10, 50, 100, 500.

## Actor input object example

```json
{
  "keywords": "Software Engineer",
  "location": "United States",
  "datePostedSeconds": 2592000,
  "geoIds": [
    "103644278"
  ],
  "companyIds": [
    "1441"
  ],
  "workTypes": [
    "onsite",
    "remote",
    "hybrid"
  ],
  "experienceLevels": [
    "internship",
    "entry-level",
    "associate",
    "mid-senior",
    "director",
    "executive"
  ],
  "jobTypes": [
    "F",
    "P",
    "C",
    "T",
    "V"
  ],
  "max_jobs": 100
}
```

# 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 = {
    "keywords": "Software Engineer",
    "location": "United States",
    "datePostedSeconds": 2592000,
    "geoIds": [
        "103644278"
    ],
    "companyIds": [
        "1441"
    ],
    "workTypes": [
        "onsite",
        "remote",
        "hybrid"
    ],
    "experienceLevels": [
        "internship",
        "entry-level",
        "associate",
        "mid-senior",
        "director",
        "executive"
    ],
    "jobTypes": [
        "F",
        "P",
        "C",
        "T",
        "V"
    ],
    "max_jobs": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("datadoping/linkedin-job-search-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 = {
    "keywords": "Software Engineer",
    "location": "United States",
    "datePostedSeconds": 2592000,
    "geoIds": ["103644278"],
    "companyIds": ["1441"],
    "workTypes": [
        "onsite",
        "remote",
        "hybrid",
    ],
    "experienceLevels": [
        "internship",
        "entry-level",
        "associate",
        "mid-senior",
        "director",
        "executive",
    ],
    "jobTypes": [
        "F",
        "P",
        "C",
        "T",
        "V",
    ],
    "max_jobs": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("datadoping/linkedin-job-search-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 '{
  "keywords": "Software Engineer",
  "location": "United States",
  "datePostedSeconds": 2592000,
  "geoIds": [
    "103644278"
  ],
  "companyIds": [
    "1441"
  ],
  "workTypes": [
    "onsite",
    "remote",
    "hybrid"
  ],
  "experienceLevels": [
    "internship",
    "entry-level",
    "associate",
    "mid-senior",
    "director",
    "executive"
  ],
  "jobTypes": [
    "F",
    "P",
    "C",
    "T",
    "V"
  ],
  "max_jobs": 100
}' |
apify call datadoping/linkedin-job-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,datadoping/linkedin-job-search-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/1vFJtXCySrwjFoFGO/builds/bHxGfJAWHxcHaMbll/openapi.json
