# LinkedIn Jobs Scraper – Cheapest, No Proxy Needed (`gopalakrishnan/linkedin-jobs`) Actor

Search LinkedIn job postings by keyword and location. Get job title, company, location, posting date, and direct apply link. No login, no cookies, no proxy markup — built to be the lowest-cost way to monitor LinkedIn job listings at scale

- **URL**: https://apify.com/gopalakrishnan/linkedin-jobs.md
- **Developed by:** [Gopalakrishnan](https://apify.com/gopalakrishnan) (community)
- **Categories:** Jobs, Automation, Social media
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.35 / 1,000 job scrapeds

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

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

## 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

**Scrape LinkedIn job listings by keyword and location** without logging in, without cookies,
and without passing proxy costs on to you. This Actor calls the same public "guest search"
endpoint LinkedIn's own jobs page uses for pagination, parses the results, and returns clean,
flat job records — title, company, location, posted date, and the job's direct URL. Try it
on the [LinkedIn Jobs search page](https://www.linkedin.com/jobs) with any keyword and location
combination, then run the same search here to get structured data instead of a web page. Like
every Apify Actor, it comes with a ready-made API, scheduling, webhooks, and integrations with
Zapier, Make, and Google Sheets — no scraping infrastructure to maintain yourself.

### Why use LinkedIn Jobs Scraper?

LinkedIn job listings are useful for more than job hunting:

- **Recruiters and sourcers** can monitor competitor hiring activity and track which companies
  are growing which teams.
- **Market researchers** can analyze hiring trends by role, skill, or region over time.
- **Job boards and aggregators** can pull fresh listings into their own product.
- **Job seekers** can build custom alerts and dashboards beyond what LinkedIn's UI offers.

This is the **cheapest way to get LinkedIn job data on Apify**: the guest search endpoint
works identically with no proxy, a datacenter proxy, or a residential proxy, so there's no
expensive proxy cost baked into the price. No LinkedIn account, login, or cookies required.

### How to use LinkedIn Jobs Scraper

1. Click **Try for free** or **Start** to open the Actor.
2. Enter your search **keywords** (e.g. "React developer") and, optionally, a **location**
   (e.g. "United States").
3. Set **Max results** to cap how many job listings to fetch.
4. Click **Start** and wait for the run to finish.
5. Open the **Output** tab or **Dataset** to view, download, or export your results (JSON,
   CSV, Excel, HTML, and more).

### Input

See the **Input** tab for the full schema. Key fields:

| Field                | Type              | Description                                                                                                  |
| -------------------- | ----------------- | ------------------------------------------------------------------------------------------------------------ |
| `keywords`           | string (required) | Job title, skill, or company to search for.                                                                  |
| `location`           | string            | Location to search in, e.g. "United States".                                                                 |
| `maxResults`         | integer           | Maximum number of job listings to scrape. Default: 50.                                                       |
| `proxyConfiguration` | object            | Apify Proxy settings. Defaults to Apify Proxy for IP hygiene at scale; the search works without a proxy too. |

Example input:

```json
{
    "keywords": "React developer",
    "location": "United States",
    "maxResults": 50
}
````

### Output

Each item in the dataset is a flat job record:

```json
{
    "title": "Senior React Developer",
    "company": "Acme Corp",
    "location": "Remote",
    "postedDate": "2026-06-15",
    "jobUrl": "https://www.linkedin.com/jobs/view/senior-react-developer-at-acme-corp-1234567890",
    "searchKeywords": "React developer"
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

#### Data fields

| Field            | Description                                    |
| ---------------- | ---------------------------------------------- |
| `title`          | Job title as listed.                           |
| `company`        | Hiring company name.                           |
| `location`       | Job location as listed (may include "Remote"). |
| `postedDate`     | Date the job was posted, when available.       |
| `jobUrl`         | Direct link to the job posting on LinkedIn.    |
| `searchKeywords` | The keywords used to find this job.            |

### Pricing

This is the **cheapest LinkedIn job scraper on Apify** to run because it doesn't need a paid
proxy to work reliably — there's no hidden proxy markup in the price. How much it costs to
scrape LinkedIn jobs with this Actor depends on how many results you request: pricing is based
on Pay-Per-Event, billed per run and per job scraped, so you only pay for the data you get.
Check the **Pricing** tab for exact rates, and the free tier of Apify's platform for monthly
included usage.

### Tips and advanced options

- Keep `maxResults` close to what you actually need — each page of 10 jobs is one extra
  request, and PPE billing is per job scraped.
- Try narrower keyword phrases (e.g. "senior React developer remote") to cut down on
  irrelevant results before they're billed.
- Run this Actor on a [schedule](https://docs.apify.com/platform/schedules) to track new
  postings for a role over time, and feed the dataset into Zapier, Make, or a Google Sheet via
  Apify's integrations.

### FAQ

**Is this legal?** This Actor only reads publicly accessible job listing data exposed by
LinkedIn's own guest search endpoint. You are responsible for using the data in line with
LinkedIn's Terms of Service and applicable law in your jurisdiction.

**Why does it not need a proxy?** The guest search endpoint is LinkedIn's own unauthenticated
pagination API for its public job search UI — it doesn't gate on login or cookies. Apify Proxy
is still used by default for IP hygiene and rate-limit safety at larger scale.

**Known limitations:** LinkedIn's guest search may fall back to generic/popular results
instead of returning zero for an obscure or nonsense keyword, so an empty result set is not
always a reliable signal of "no jobs" vs. a temporary block.

Found a bug or have a feature request? Use the **Issues** tab on this Actor's page. Need a
custom version or a related scraper? See the companion
[LinkedIn Profile Scraper](https://apify.com/) Actor, or get in touch for a custom solution.

# Actor input Schema

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

Job title, skill, or company to search for, e.g. "React developer".

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

Location to search jobs in, e.g. "United States".

## `maxResults` (type: `integer`):

Maximum number of job listings to scrape. Caps how many search result pages get fetched (each page returns up to 10 jobs).

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

Apify Proxy is used for IP hygiene/rate-limit safety at scale. The guest search endpoint works without a proxy too.

## Actor input object example

```json
{
  "keywords": "React developer",
  "location": "United States",
  "maxResults": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

# 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": "React developer",
    "location": "United States"
};

// Run the Actor and wait for it to finish
const run = await client.actor("gopalakrishnan/linkedin-jobs").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": "React developer",
    "location": "United States",
}

# Run the Actor and wait for it to finish
run = client.actor("gopalakrishnan/linkedin-jobs").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 '{
  "keywords": "React developer",
  "location": "United States"
}' |
apify call gopalakrishnan/linkedin-jobs --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "LinkedIn Jobs Scraper – Cheapest, No Proxy Needed",
        "description": "Search LinkedIn job postings by keyword and location. Get job title, company, location, posting date, and direct apply link. No login, no cookies, no proxy markup — built to be the lowest-cost way to monitor LinkedIn job listings at scale",
        "version": "1.0",
        "x-build-id": "S1deKH8OYdA5xlIv5"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/gopalakrishnan~linkedin-jobs/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-gopalakrishnan-linkedin-jobs",
                "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/gopalakrishnan~linkedin-jobs/runs": {
            "post": {
                "operationId": "runs-sync-gopalakrishnan-linkedin-jobs",
                "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/gopalakrishnan~linkedin-jobs/run-sync": {
            "post": {
                "operationId": "run-sync-gopalakrishnan-linkedin-jobs",
                "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": [
                    "keywords"
                ],
                "properties": {
                    "keywords": {
                        "title": "Keywords",
                        "type": "string",
                        "description": "Job title, skill, or company to search for, e.g. \"React developer\"."
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "Location to search jobs in, e.g. \"United States\".",
                        "default": "United States"
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of job listings to scrape. Caps how many search result pages get fetched (each page returns up to 10 jobs).",
                        "default": 50
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify Proxy is used for IP hygiene/rate-limit safety at scale. The guest search endpoint works without a proxy too.",
                        "default": {
                            "useApifyProxy": 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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
