# LinkedIn Jobs Scraper - Cheap & Fast (`kalirobot/linkedin-jobs-scraper-fast`) Actor

Scrape 500+ LinkedIn jobs with company logos. No login required. Cheaper & faster than alternatives with 20+ data fields. Configurable performance, pay-per-result pricing.

- **URL**: https://apify.com/kalirobot/linkedin-jobs-scraper-fast.md
- **Developed by:** [Dennis](https://apify.com/kalirobot) (community)
- **Categories:** Jobs, Lead generation, Social media
- **Stats:** 6 total users, 0 monthly users, 93.1% runs succeeded, 1 bookmarks
- **User rating**: 5.00 out of 5 stars

## 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/actors/running/actors-in-store.md#pay-per-usage

## 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 - Cheap & Fast

**Scrape 500+ LinkedIn jobs with company logos - NO login required!**

### 🎯 Key Features

- 🎨 **Company Logos** - Extract company logo URLs automatically
- 📊 **500+ Jobs** - Advanced pagination for unlimited results
- ⚡ **FAST** - Optimized performance for quick results
- 🔓 **NO LOGIN** - Public job search, no cookies needed
- 🎛️ **Full Control** - Configure concurrency, retries, delays
- 🔒 **Privacy-First** - No URLs or job IDs in logs

### 💰 Pricing

**$20/month** - Simple subscription pricing

- ✅ **31% cheaper than leading competitor** ($29/month)
- ✅ 3-day free trial
- ✅ Unlimited jobs
- ✅ All features included
- ✅ Cancel anytime

### 🆚 Why Choose Us?

| Feature | Our Scraper | Leading Competitor |
|---------|-------------|-------------------|
| **Monthly Price** | ✅ $20 | ❌ $29 |
| **Company Logos** | ✅ YES 🎨 | ❌ Often missing |
| **Max Results** | ✅ 500+ | ❌ Limited |
| **Speed** | ✅ Fast | ❌ Slower |
| **Login Required** | ❌ NO | ✅ Often YES |
| **Configurable** | ✅ 5 parameters | ❌ Limited |

### 📊 Input Example

```json
{
  "title": "Software Engineer",
  "location": "United States",
  "rows": 100,
  "publishedAt": "r604800",
  "proxy": {
    "useApifyProxy": true
  }
}
```

#### 🌍 Location Matching

**We automatically resolve locations to the correct region:**

- Input: `"Berlin"` → Resolved to: `"Berlin, Berlin, Germany"` ✅
- Input: `"London"` → Resolved to: `"London, England, United Kingdom"` ✅
- Input: `"Paris"` → Resolved to: `"Paris, Île-de-France, France"` ✅

**💡 Best Practice:**
For ambiguous location names (e.g., "Berlin" exists in Germany AND USA), use the full name:

- ✅ **Recommended:** `"Berlin, Germany"` or `"Berlin, Deutschland"`
- ⚠️ **Avoid:** `"Berlin"` (might match Berlin, Connecticut, USA)

If multiple matches are found, we automatically use the **first (most relevant) result** and show you which one was selected in the logs.

#### Performance Tuning Parameters

**🏎️ Fast Mode** (for quick results):

```json
{
  "concurrency": 15,
  "pageDelay": 0,
  "retryDelay": 1,
  "maxRetries": 1
}
```

**⚖️ Balanced** (recommended - lower costs):

```json
{
  "concurrency": 10,
  "pageDelay": 1,
  "retryDelay": 2,
  "maxRetries": 3
}
```

**🛡️ Stable** (maximum reliability):

```json
{
  "concurrency": 5,
  "pageDelay": 2,
  "retryDelay": 5,
  "maxRetries": 5
}
```

💡 **Tip:** Use balanced settings to keep your platform costs low!

### 📈 Output Fields

Each job includes **20+ fields**:

- `jobId`, `title`, `companyName`, `companyId`, `companyUrl`
- 🎨 `companyLogo` - Company logo image URL
- `location`, `jobUrl`, `publishedAt`, `postedTime`
- `salary`, `description`, `descriptionHtml`
- `contractType`, `experienceLevel`, `workType`, `sector`
- `applicationsCount` - Application count (approximate ranges)\*
- `applyUrl`, `applyType`

**Note about `applicationsCount`:**
LinkedIn provides approximate ranges, not exact numbers:

- `20` = "20 or fewer applications"
- `50` = "About 50 applications"
- `200` = "200 or more applications"

### 🚀 How It Works

**NO browser overhead!** Optimized HTTP-based approach:

1. Access LinkedIn's public job listings
2. Parse structured data efficiently
3. Fetch detailed job information in parallel
4. Push results incrementally for real-time access

**Result:** Cheaper & faster than browser-based scrapers!

### 💡 Cost Optimization Tips

**Minimize your platform costs:**

1. **Use AUTO/DATACENTER proxies** (not RESIDENTIAL)
   - Residential proxies are 50x more expensive
   - Our scraper works perfectly with cheaper proxies

2. **Use balanced settings** (default)
   - Don't increase concurrency unnecessarily
   - Lower retries if not needed

3. **Filter your searches**
   - Use specific locations instead of "United States"
   - Filter by `publishedAt` (recent jobs only)
   - Filter by company if searching specific employers

**Example cost savings:**

- Residential proxies: ~$30/month
- Datacenter proxies: ~$2/month
- **Save $28/month!**

### 📝 License

Proprietary - Contact for commercial use.

### 🎁 Try It Free

**3-day free trial** - No credit card required!

Test all features and see the quality before subscribing.

***

**Built for performance, priced for everyone.** 🚀

# Changelog

This Actor's version history is a separate document: https://apify.com/kalirobot/linkedin-jobs-scraper-fast/changelog.md

# Actor input Schema

## `title` (type: `string`):

The name of the job (e.g. Web developer, Software Engineer, Data Scientist)

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

Job location - we automatically resolve to the correct region (e.g., 'Berlin' → 'Berlin, Germany'). Tip: Use specific names like 'Berlin, Germany' instead of just 'Berlin' for better accuracy.

## `companyName` (type: `array`):

The name(s) of the company(ies) (e.g. Google, NASA)

## `companyId` (type: `array`):

The ID(s) of the company(ies) (e.g. Facebook: 76987811, Uber: 1815218). Provide only the id numbers.

## `publishedAt` (type: `string`):

Filter jobs by publication date (recommended: Past week for fresh results)

## `rows` (type: `integer`):

How many jobs do you want to scrape? (e.g. 100)

## `workType` (type: `string`):

Select work type to display

## `contractType` (type: `string`):

Select job type to display

## `experienceLevel` (type: `string`):

Select the experience level

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

⚠️ IMPORTANT: Use DATACENTER proxies (recommended). RESIDENTIAL proxies are 50x more expensive and not necessary for this scraper!

## `maxRetries` (type: `integer`):

How many times to retry when encountering network errors? Set to 0 to stop immediately on error, or higher (e.g. 5) to keep trying.

## `retryDelay` (type: `number`):

How long to wait before retrying after an error? Recommended: 2-5 seconds. Higher = more stable, lower = faster.

## `pageDelay` (type: `number`):

How long to wait between scraping pages? Recommended: 1-2 seconds. Higher = less likely to get blocked, lower = faster.

## `rateLimitBackoff` (type: `number`):

When hitting rate limits (429), wait time = (attempt × this value). Recommended: 3-5. Higher = more patient, lower = faster retry.

## `concurrency` (type: `integer`):

How many job details to fetch in parallel? Higher = faster but more risk of rate limiting. Recommended: 5-10 with proxies, 1-3 without.

## Actor input object example

```json
{
  "title": "Software Engineer",
  "location": "San Francisco Bay Area",
  "publishedAt": "r604800",
  "rows": 100,
  "workType": "",
  "contractType": "",
  "experienceLevel": "",
  "proxy": {
    "useApifyProxy": true
  },
  "maxRetries": 3,
  "retryDelay": 2,
  "pageDelay": 1,
  "rateLimitBackoff": 5,
  "concurrency": 10
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `dataset` (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 = {
    "title": "Software Engineer",
    "location": "San Francisco Bay Area",
    "publishedAt": "r604800",
    "rows": 100,
    "maxRetries": 3,
    "retryDelay": 2,
    "pageDelay": 1,
    "rateLimitBackoff": 5,
    "concurrency": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("kalirobot/linkedin-jobs-scraper-fast").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 = {
    "title": "Software Engineer",
    "location": "San Francisco Bay Area",
    "publishedAt": "r604800",
    "rows": 100,
    "maxRetries": 3,
    "retryDelay": 2,
    "pageDelay": 1,
    "rateLimitBackoff": 5,
    "concurrency": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("kalirobot/linkedin-jobs-scraper-fast").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 '{
  "title": "Software Engineer",
  "location": "San Francisco Bay Area",
  "publishedAt": "r604800",
  "rows": 100,
  "maxRetries": 3,
  "retryDelay": 2,
  "pageDelay": 1,
  "rateLimitBackoff": 5,
  "concurrency": 10
}' |
apify call kalirobot/linkedin-jobs-scraper-fast --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,kalirobot/linkedin-jobs-scraper-fast"
        }
    }
}
```

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/hGHcyzeOMZEAeGMel/builds/J4802gRqIb0mdtIAq/openapi.json
