# LinkedIn Jobs & Company Scraper (B2B Talent & Leads) (`ulitron34/linkedin-job-company-scraper`) Actor

Fast and stealth LinkedIn job and company scraper. Extract job titles, company profiles, salaries, seniority, locations, applicants, and clean canonical URLs without login.

- **URL**: https://apify.com/ulitron34/linkedin-job-company-scraper.md
- **Developed by:** [ulises salgado diaz](https://apify.com/ulitron34) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## 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 & Company Scraper (B2B Talent & Leads)

**Fast, reliable, and stealth LinkedIn job postings and corporate intelligence scraper.** Extract job titles, hiring company names, company LinkedIn profile URLs, advertised salaries, locations, posting dates, Easy Apply badges, and canonical URLs **without requiring LinkedIn login credentials or API keys**.

*Scraper rápido, confiable y sigiloso para LinkedIn. Extrae vacantes laborales, empresas contratantes, perfiles de empresas, salarios anunciados, ubicaciones, fechas de publicación y enlaces canónicos limpios sin necesidad de iniciar sesión ni credenciales de LinkedIn.*

***

### ✨ Key Features / Características Principales

| Feature / Característica | Description / Descripción |
| :--- | :--- |
| 🛡️ **No Login Required & Anti-Bot Stealth** | Runs completely without LinkedIn account credentials, using Camoufox C++ fingerprint spoofing to bypass bot detection. |
| 🔍 **Advanced Keyword & Skills Search** | Search by any job title, tech stack, or skill (e.g. `Python Developer`, `Machine Learning`, `Account Executive`). |
| 📍 **Global & Remote Targeting** | Target specific countries, metropolitan regions, or filter strictly for **Remote** opportunities (`remote_only`). |
| 💰 **Salary & Compensation Data** | Captures advertised salary ranges and annual/hourly compensation figures. |
| 🏢 **Company Profile Intelligence** | Gathers hiring organization names, direct company LinkedIn URLs, and company logos. |
| ⏱️ **Recency & Seniority Filters** | Filter by posting date (`past_24h`, `past_week`, `past_month`) and experience levels (`entry_level`, `mid_senior`, `director`, `executive`). |
| 🔗 **Canonical Clean URLs** | Produces clean `https://www.linkedin.com/jobs/view/{id}/` URLs stripped of invasive session tracking parameters. |

***

### 📥 Input Configuration / Configuración de Entrada

#### Example 1: Search by Role & Location (Remote Tech Jobs)

```json
{
  "keywords": "Senior Python Engineer",
  "location": "United States",
  "remote_only": true,
  "date_posted": "past_week",
  "max_items": 50
}
```

#### Example 2: Executive & Director Level Recruitment

```json
{
  "keywords": "VP of Sales",
  "location": "London, UK",
  "experience_level": "director",
  "max_items": 40
}
```

#### Example 3: Direct LinkedIn Job Search URLs

```json
{
  "start_urls": [
    { "url": "https://www.linkedin.com/jobs/search?keywords=AI+Researcher&location=Worldwide" }
  ],
  "max_items": 60
}
```

***

### 📤 Output Dataset Format / Formato del Dataset de Salida

Every scraped job listing returns clean, tabular-ready JSON:

```json
{
  "job_id": "3911223344",
  "title": "Senior Backend Developer (Python / FastAPI)",
  "company_name": "OpenAI",
  "location": "San Francisco, CA (Remote)",
  "salary_formatted": "$180,000 - $240,000/yr",
  "employment_type": "Full-time",
  "seniority_level": "Mid-Senior level",
  "posted_date": "3 days ago",
  "applicants": "Over 150 applicants",
  "company_url": "https://www.linkedin.com/company/openai/",
  "easy_apply": true,
  "url": "https://www.linkedin.com/jobs/view/3911223344/",
  "company_logo": "https://media.licdn.com/dms/image/v2/company-logo.jpg",
  "scraped_at": "2026-09-24T16:57:00+00:00"
}
```

***

### 💼 High-Converting Commercial Use Cases

1. **Recruitment & Staffing Agencies**:
   - Continuously track hiring sprees across specific companies and industries to pitch candidate placement services.
2. **B2B Sales & Account-Based Marketing (ABM)**:
   - Identify companies hiring in specific departments (e.g. hiring new Salesforce admins means they are implementing CRM tools).
3. **Salary Benchmarking & HR Intelligence**:
   - Collect market compensation figures across roles and geographies to inform internal salary bands.
4. **Competitor Strategy & Expansion Tracking**:
   - Monitor job openings at rival companies to uncover upcoming product launches, tech stack migrations, and geographical expansion.

***

### 🛡️ Proxy Recommendation

LinkedIn actively monitors unauthenticated search velocity. For reliable, production-grade scraping beyond 50 items, configure **Apify Residential Proxy** (`proxy_configuration: { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }`).

# Actor input Schema

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

Job title, keywords, or skills to search on LinkedIn (e.g. 'Software Engineer', 'Data Scientist', 'Sales Director').

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

Geographical location, city, country, or 'Remote' (e.g. 'United States', 'New York, NY', 'Remote', 'London, UK').

## `remote_only` (type: `boolean`):

Filter strictly for remote jobs.

## `date_posted` (type: `string`):

Time range since the job was posted.

## `experience_level` (type: `string`):

Required seniority level.

## `start_urls` (type: `array`):

Direct LinkedIn job search URLs. If provided, overrides keyword and location fields.

## `max_items` (type: `integer`):

Maximum number of LinkedIn job listings to collect.

## `proxy_configuration` (type: `object`):

Apify Proxy configuration (residential proxy recommended for high-volume LinkedIn scraping).

## Actor input object example

```json
{
  "keywords": "Python Developer",
  "location": "United States",
  "remote_only": false,
  "date_posted": "any_time",
  "experience_level": "all",
  "max_items": 10,
  "proxy_configuration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Scraped LinkedIn job opportunities with company info, salaries, locations, and clean URLs.

# 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 = {
    "max_items": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("ulitron34/linkedin-job-company-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 = { "max_items": 10 }

# Run the Actor and wait for it to finish
run = client.actor("ulitron34/linkedin-job-company-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 '{
  "max_items": 10
}' |
apify call ulitron34/linkedin-job-company-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ulitron34/linkedin-job-company-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/fCfRc9VuTndVEsi5H/builds/erLDAMBRaxDU1XOcQ/openapi.json
