# Linkedin Scraper (`api_massta/linkedin-scraper`) Actor

Find the right jobs faster. Tired of LinkedIn’s slow UI and irrelevant listings? Our LinkedIn Job Scraper filters jobs using PUBLIC and PRIVATE scraping, unlocking premium insights and refining results by keywords, post date, and location—so you focus on the best opportunities, not the noise.

- **URL**: https://apify.com/api_massta/linkedin-scraper.md
- **Developed by:** [Sh0ck Labs](https://apify.com/api_massta) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Stats:** 102 total users, 3 monthly users, 100.0% runs succeeded, 2 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $4.00 / 1,000 jobs

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 Jobs Scraper & API 💼

**Extract LinkedIn job postings at scale — title, company, location, full description, seniority, employment type, job function, and industry — filtered by keyword, location, and date posted.** Power your job board, track hiring trends, source candidates, or give your AI agents live job data. No login required.

Search by keyword and location (any city, region, or country resolves automatically), get back clean structured JSON. Run it as a one-off batch job, schedule it, or turn it into a **real-time API** your apps and AI agents can call.

***

### ✨ What you get

- 💼 **Complete job data** — title, company, location, link, full description, seniority level, employment type, job function, and industry
- 🔎 **Smart filtering** — search by keywords, location, and date posted (past 24h / week / month)
- 🌍 **Any location** — cities, regions, metros, or countries resolve automatically to the right LinkedIn area
- 🆓 **No login required** — fetch public job listings with zero setup
- 🔐 **Cookies for more** — supply a LinkedIn session to reach login-gated listings and richer fields
- 🏢 **Optional company details** — enrich each job with its company's website, size, and industry
- 🤖 **Real-time API + MCP** — call it live from your code or from AI agents
- 💸 **Pay only for results** — billed per job returned

***

### 🎯 Use cases

- **Job boards & aggregators** — keep listings fresh without the slow LinkedIn UI or promoted-post clutter.
- **Recruiting & talent intelligence** — track who's hiring, for what roles, and where.
- **Job seekers & alerts** — pull the latest matching roles on a schedule.
- **Hiring & salary trend research** — analyze demand by role, location, and seniority over time.
- **AI agents & RAG pipelines** — give LLM job-search or recruiting agents live postings on demand via the Apify MCP server.

***

### 📥 Input

| Field | Description |
|---|---|
| `filter` | Search keywords, e.g. `python developer`, `product manager`. **Required.** |
| `location` | City, region, or country, e.g. `United States`, `Berlin`, `Remote`. Resolves automatically. |
| `posted_date` | `any_time`, `past_24_hrs`, `past_week`, or `past_month`. |
| `order_by` | `posted_date` (most recent) or `relevance`. |
| `limit` | Max number of jobs to return. |
| `include_company` *(optional)* | Also fetch each company's profile (slower; billed separately). |
| `cookies` *(optional)* | LinkedIn session cookies (JSON export) for login-gated listings. |
| `proxy`, `timeout` | Standard controls. |

```json
{
  "filter": "python developer",
  "location": "United States",
  "posted_date": "past_week",
  "limit": 50
}
```

### 📤 Output

One record per job:

```json
{
  "job_title": "Python Developer",
  "company": { "name": "Acme Corp", "location": "Austin, TX" },
  "job_location": "Austin, TX",
  "job_link": "https://www.linkedin.com/jobs/view/...",
  "post_date": "2026-06-18",
  "seniority_level": "Mid-Senior level",
  "employment_type": "Full-time",
  "job_function": "Engineering and Information Technology",
  "industries": "Software Development",
  "job_description": "We are looking for..."
}
```

***

### 🤖 Use it as a real-time API / AI agent tool

Enable **Standby mode** and the Actor stays warm, answering HTTP requests instantly — perfect for AI agents, RAG pipelines, and apps that need live job data:

```bash
curl "https://<your-standby-url>/?filter=python%20developer&location=United%20States&limit=25"
```

Returns `{ "count": N, "items": [ ... ] }`. AI agents can discover and call this Actor as a tool through the **[Apify MCP server](https://mcp.apify.com)** (Claude, Cursor, Windsurf, and any MCP client). Only `filter` is required.

***

### 💸 Pricing

This Actor uses **pay-per-event** pricing:

- `job-result` — billed per job returned.
- `company-enrichment` — billed per unique company, only when `include_company` is on.

Empty results aren't charged. You also pay Apify's standard platform usage for the run.

***

### ❓ FAQ

**Do I need a LinkedIn account or cookies?**
No — public job listings work with no login. Provide LinkedIn cookies only if you want to reach login-gated listings and additional fields.

**Which locations are supported?**
Any location LinkedIn recognizes — cities, regions, metro areas, and countries all resolve automatically, so you can search `Berlin`, `Greater London`, `Austin, Texas`, or `Canada`.

**How fresh are the results?**
Use `posted_date` = `past_24_hrs` or `past_week` for the newest listings, and `order_by` = `posted_date` to sort by most recent.

**Can my AI agent call this automatically?**
Yes — run it in Standby mode and connect via the Apify MCP server. Agents get a typed, live job-search tool.

**Is scraping LinkedIn legal?**
You are responsible for how you use scraped data. Scrape only publicly available information and comply with LinkedIn's terms and applicable laws in your jurisdiction.

***

### 🔧 Tips

- Use the **Apify Proxy** (especially residential) for larger runs to reduce blocking.
- Turn on `include_company` to pair each role with its company's firmographics.
- Need full company profiles on their own? See the **LinkedIn Company Profile Scraper**.

# Actor input Schema

## `filter` (type: `string`):

The job search query, e.g. 'python developer', 'product manager', 'data scientist'. This is the main term LinkedIn matches against job titles and descriptions.

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

City, region, or country to search in, e.g. 'United States', 'London', 'Remote'. Leave as a country for the broadest results.

## `posted_date` (type: `string`):

Only return jobs posted within this window. Use 'past_24_hrs' or 'past_week' for the freshest listings.

## `order_by` (type: `string`):

Sort results by most recent ('posted_date') or by LinkedIn relevance ('relevance').

## `limit` (type: `integer`):

Maximum number of jobs to return. Higher values take longer and cost more under pay-per-event.

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

Page offset to start from (25 jobs per page). Use it to skip already-seen results and page deeper.

## `include_company` (type: `boolean`):

Also fetch each company's profile (website, size, etc.). Slower, and billed as a separate 'company-enrichment' event per unique company.

## `cookies` (type: `array`):

Optional. Paste your LinkedIn session cookies (JSON export) ONLY to access login-gated jobs and richer fields. Leave empty for public scraping — no login needed.

## `proxy` (type: `object`):

Proxy used for requests. Recommended for larger or authenticated runs.

## `timeout` (type: `integer`):

Seconds before the run gives up, to avoid getting stuck.

## Actor input object example

```json
{
  "filter": "python developer",
  "location": "United States",
  "posted_date": "any_time",
  "order_by": "posted_date",
  "limit": 10,
  "start": 0,
  "include_company": false,
  "cookies": [],
  "proxy": {
    "useApifyProxy": false
  },
  "timeout": 300
}
```

# Actor output Schema

## `jobs` (type: `string`):

One object per job listing with fields like job_title, job_location, salary, job_description, company details, and premium_insights.

# 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 = {
    "filter": "Developer",
    "location": "United States",
    "posted_date": "any_time",
    "order_by": "posted_date",
    "limit": 10,
    "start": 0,
    "cookies": [],
    "proxy": {
        "useApifyProxy": false
    },
    "timeout": 300
};

// Run the Actor and wait for it to finish
const run = await client.actor("api_massta/linkedin-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 = {
    "filter": "Developer",
    "location": "United States",
    "posted_date": "any_time",
    "order_by": "posted_date",
    "limit": 10,
    "start": 0,
    "cookies": [],
    "proxy": { "useApifyProxy": False },
    "timeout": 300,
}

# Run the Actor and wait for it to finish
run = client.actor("api_massta/linkedin-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 '{
  "filter": "Developer",
  "location": "United States",
  "posted_date": "any_time",
  "order_by": "posted_date",
  "limit": 10,
  "start": 0,
  "cookies": [],
  "proxy": {
    "useApifyProxy": false
  },
  "timeout": 300
}' |
apify call api_massta/linkedin-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,api_massta/linkedin-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/ZOXmwMz33PLJfgmJ4/builds/2rCjI3N4lVutk6lcu/openapi.json
