# LinkedIn Jobs Scraper (No Login, No Cookies) (`leadgenguy/linkedin-jobs-scraper`) Actor

Extract public LinkedIn job postings with filters: keywords, location, date posted, job type, experience level, remote/on-site. No account or cookies needed.

- **URL**: https://apify.com/leadgenguy/linkedin-jobs-scraper.md
- **Developed by:** [Mokssh jaiin](https://apify.com/leadgenguy) (community)
- **Categories:** Jobs, Lead generation
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 (No Login, No Cookies) — from $0.40 per 1,000 jobs

Scrape **public LinkedIn job postings** by keyword and location, with filters for date posted, job type, experience level and remote/on-site/hybrid. No LinkedIn account, no cookies, no browser. Fast, cheap and built for lead generation, recruiting, job-market research and hiring-signal tracking.

### Why use it

- **Low price:** basic job data from $0.40 per 1,000 jobs. Full descriptions are an optional add-on.
- **No login or cookies:** reads only the public job pages LinkedIn shows to anyone.
- **Real filters:** keywords, location, date posted, job type, experience level, workplace type.
- **Lead-gen ready:** every job includes the company name and LinkedIn company URL, so you can feed hiring companies straight into outreach or enrichment.
- **Pay only for what you get:** you are charged per job delivered, never for failed requests. Set a maximum spend per run and the Actor stops at your limit.

### Pricing

Pay-per-event, no monthly fee. You see the full price before you run.

| Event | Price |
|---|---|
| Job scraped (title, company, location, date, URL) | $0.40 per 1,000 ($0.0004 per job) |
| Full job details (description, seniority, type, function, industries, applicants, apply link) | +$0.60 per 1,000 ($0.0006 per job), only if **Include full job description** is on |
| Actor start | $0.00005 |

Example: 1,000 jobs with basic data cost about $0.40. 1,000 jobs with full details cost about $1.00. You are never charged for jobs that fail, and you can set a maximum spend per run.

### Free plan

Free Apify accounts get **one free trial run of up to 25 jobs** so you can test the data. To keep using the Actor, upgrade to any paid Apify plan. Paid plans have no limit beyond the 1,000 jobs LinkedIn exposes per search.

### Input

| Field | Description |
|---|---|
| **Job title or keywords** | What to search for, e.g. `sales manager`. Required. |
| **Location** | City, state, country or region. Empty means worldwide. |
| **Date posted** | Any time, past 24 hours, past week or past month. |
| **Job type** | Full-time, part-time, contract, temporary, internship, volunteer. |
| **Experience level** | Internship, entry, associate, mid-senior, director, executive. |
| **Workplace type** | On-site, remote, hybrid. |
| **Maximum jobs** | Up to 1,000 per run (a LinkedIn limit per search). |
| **Include full job description** | Off by default (extra charge). Adds description, seniority, employment type, function, industries, applicants and apply link. |
| **Proxy configuration** | Apify Proxy is on by default and recommended. |

#### Example input

```json
{
  "keywords": "sales manager",
  "location": "United States",
  "datePosted": "pastWeek",
  "jobType": ["fulltime"],
  "workplace": ["remote"],
  "maxItems": 100,
  "includeDescription": false,
  "proxyConfiguration": { "useApifyProxy": true }
}
```

### Output

Each job is one dataset item. Download as JSON, CSV, Excel or HTML, or read it through the Apify API.

```json
{
  "id": "4459570296",
  "title": "Sales Manager",
  "company": "Nolan Transportation Group (NTG)",
  "companyUrl": "https://www.linkedin.com/company/nolan-transportation-ntg",
  "location": "Nashville, TN",
  "postedAt": "2026-10-09",
  "postedText": "1 day ago",
  "url": "https://www.linkedin.com/jobs/view/sales-manager-at-nolan-transportation-group-ntg-4459570296",
  "description": "Full job description text...",
  "descriptionHtml": "<div>...</div>",
  "seniorityLevel": "Mid-Senior level",
  "employmentType": "Full-time",
  "jobFunction": "Sales and Business Development",
  "industries": "Transportation, Logistics",
  "applicants": "Be among the first 25 applicants",
  "applyUrl": "https://...",
  "searchKeywords": "sales manager",
  "searchLocation": "United States",
  "scrapedAt": "2026-10-11T10:38:05.668Z"
}
```

Description-related fields are filled only when **Include full job description** is on, and some jobs do not show every field.

### Use cases

- **Lead generation:** companies that are hiring are companies with budget. Find them by role, location or industry.
- **Recruiting and sourcing:** track openings across regions and sectors.
- **Market research:** measure demand for skills, salaries mentioned in descriptions, and hiring trends.
- **Job boards and alerts:** feed a site or a Slack/Telegram alert with fresh postings every day. Use Apify Schedules to run it daily.

### Tips

- LinkedIn returns about 1,000 results per search. For bigger pulls, run several searches with different locations, keywords or filters.
- Use **Date posted: Past 24 hours** with a daily schedule to get only new jobs.
- Keep Apify Proxy on. Without it LinkedIn may rate-limit you.

### Limits and legal

This Actor collects only **publicly available** job postings, the same pages anyone can open without signing in. It does not log in, use cookies, bypass authentication or collect private data. You are responsible for using the data in line with LinkedIn's terms and with privacy laws such as GDPR and CCPA. This Actor is not affiliated with or endorsed by LinkedIn.

### Support

Found a bug or need another field? Open an issue on the Actor page and it will be looked at quickly.

### Feedback and reviews

Found a bug, or need a field or filter added? Open an issue on this Actor's **Issues** tab and it will be looked at quickly. If this Actor saved you time, a short and honest review helps other people find it. Thank you!

# Actor input Schema

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

What to search for, e.g. <code>sales manager</code>, <code>python developer</code> or <code>nurse</code>.

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

City, state, country or region, e.g. <code>United States</code>, <code>London</code> or <code>Remote</code>. Leave empty for worldwide.

## `datePosted` (type: `string`):

Only return jobs posted within this window.

## `jobType` (type: `array`):

Pick one or more. Leave empty for all job types.

## `experienceLevel` (type: `array`):

Pick one or more. Leave empty for all levels.

## `workplace` (type: `array`):

On-site, remote or hybrid. Leave empty for all.

## `maxItems` (type: `integer`):

How many jobs to return. LinkedIn exposes about 1,000 results per search, so split big searches by location or keyword. Free Apify plans: one trial run of up to 25 jobs.

## `includeDescription` (type: `boolean`):

Also fetch each job's page for the full description, seniority level, employment type, job function, industries, applicant count and apply link. Billed as a separate event (see Pricing), slightly slower.

## `proxyConfiguration` (type: `object`):

Apify Proxy is recommended so LinkedIn does not rate-limit you.

## Actor input object example

```json
{
  "keywords": "sales manager",
  "location": "London, United Kingdom",
  "datePosted": "any",
  "maxItems": 50,
  "includeDescription": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

All scraped jobs as a dataset.

# 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": "sales manager",
    "location": "United States",
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("leadgenguy/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 = {
    "keywords": "sales manager",
    "location": "United States",
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("leadgenguy/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 '{
  "keywords": "sales manager",
  "location": "United States",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call leadgenguy/linkedin-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,leadgenguy/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/HfVO37TkuxAUIUjLv/builds/1T5sSXXxS1BW6VvwY/openapi.json
