# LinkedIn Company Jobs Scraper (`khadinakbar/linkedin-company-jobs-scraper`) Actor

Scrape a LinkedIn company's live job postings: title, location, postedAt, apply URL + optional description, applicants, seniority, plus company metadata. MCP/API-ready.

- **URL**: https://apify.com/khadinakbar/linkedin-company-jobs-scraper.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** Jobs, MCP servers, Lead generation
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 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.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## LinkedIn Company Jobs Scraper

Scrape **a specific company's live job postings on LinkedIn** — every open role, with title, location, posted date, and apply URL — plus the company's own metadata (industry, size, employee count, headquarters, followers). Give it a LinkedIn company URL, a slug, or a numeric company ID; get back that company's current jobs as structured JSON.

No login. No cookies. Public data only.

### What you get

| Field | Description | Example |
|---|---|---|
| `jobId` | LinkedIn job posting ID | `4427202797` |
| `title` | Job title | `Senior Software Engineer` |
| `companyName` | Hiring company | `Stripe` |
| `companyId` | Numeric LinkedIn company ID | `51737071` |
| `location` | Job location | `San Francisco, CA` |
| `postedAt` | ISO date the job was posted | `2026-06-25` |
| `jobUrl` / `applyUrl` | Link to the posting | `https://www.linkedin.com/jobs/view/...` |
| `workplaceType` | On-site / Hybrid / Remote (when filtered) | `Remote` |
| `company` | Nested company metadata object | `{ industry, size, employeeCount, headquarters, followers, website, logo }` |
| `scrapedAt` | ISO timestamp of the scrape | `2026-06-27T08:00:00.000Z` |

With **Fetch full job details** enabled, each job also gets `descriptionText`, `applicants`, `seniorityLevel`, `employmentType`, `jobFunction`, and `industries`.

### When to use it

- **Competitive hiring intel** — track which roles a competitor is opening and where.
- **Recruiters / sourcers** — pull a target company's whole open-roles list in one run.
- **Market research** — measure a company's hiring velocity over time.
- **AI agents (MCP-ready)** — single company in, structured jobs out.

**Not** a keyword job search across all of LinkedIn — for that use `linkedin-jobs-scraper`. **Not** a profile or email scraper.

### Input

```json
{
  "company": "https://www.linkedin.com/company/stripe",
  "keywords": "engineer",
  "location": "United States",
  "datePosted": "month",
  "jobType": "full-time",
  "experienceLevel": "mid-senior",
  "remoteOnly": false,
  "maxResults": 50,
  "enrichJobDetails": false,
  "enrichCompany": true
}
```

- `company` (required) — company URL, slug (`stripe`), or numeric ID (`51737071`). A URL/slug is resolved to the numeric ID automatically.
- Filters (`keywords`, `location`, `datePosted`, `jobType`, `experienceLevel`, `remoteOnly`) are all optional.
- `maxResults` — default 50, max 1000.
- `enrichJobDetails` — opt-in per-job description/applicants (slower).

### How it works

1. **Resolve** the company URL/slug to its numeric LinkedIn ID and metadata via ScrapeCreators (primary) then SociaVault (fallback).
2. **List** the company's postings through LinkedIn's public, cookieless jobs-guest endpoint, paginating until `maxResults`.
3. **Enrich** (optional) each job with its full detail page.

Runs on Apify Residential proxies. Returns a diagnostic summary in the run's `OUTPUT` key.

### Pricing (pay-per-event)

| Event | Price |
|---|---|
| Actor start | $0.00005 |
| Job scraped | $0.004 per job |
| Company resolved & enriched | $0.01 per run (only when resolving a URL/slug) |

A typical 50-job run costs about **$0.21**. Pay-per-usage (compute + proxy) is also available.

### MCP / agent use

Exposed as `apify--linkedin-company-jobs-scraper`. One company in, that company's current jobs out — a clean tool call for sourcing and hiring-intel agents.

### Legal

Scrapes only publicly visible LinkedIn data; no login or private data. You are responsible for using the output in compliance with LinkedIn's terms and applicable law (GDPR/CCPA). For research and lawful business use.

# Actor input Schema

## `company` (type: `string`):

The LinkedIn company whose job postings you want. Accepts a company URL (e.g. 'https://www.linkedin.com/company/stripe'), a bare slug ('stripe'), or a numeric LinkedIn company ID ('51737071'). A URL or slug is resolved to the numeric ID via ScrapeCreators (primary) then SociaVault (fallback). NOT a job-search keyword and NOT a personal profile URL — for keyword job search use the linkedin-jobs-scraper actor.

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

Optional free-text filter applied to the company's postings (e.g. 'engineer', 'product manager'). Matches LinkedIn's job-title search. Leave empty to return all open roles at the company. This filters WITHIN one company, it does not search across companies.

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

Optional geographic filter such as 'United States', 'London', or 'Remote'. Maps to LinkedIn's job location facet. Leave empty for all locations. This is a job-location filter, not the company headquarters.

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

Limit results by how recently a job was posted. 'any' returns all open postings; 'month'/'week'/'day' restrict to the last 30/7/1 days. Defaults to 'any'.

## `jobType` (type: `string`):

Filter by employment type. 'any' returns all types. Maps to LinkedIn's job-type facet (F/P/C/T/I). Defaults to 'any'.

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

Filter by seniority. 'any' returns all levels. Maps to LinkedIn's experience facet. Defaults to 'any'.

## `remoteOnly` (type: `boolean`):

When true, returns only roles LinkedIn flags as remote. Defaults to false (all workplace types: on-site, hybrid, remote).

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

Maximum number of job postings to return. LinkedIn's guest endpoint caps near 1000 per company-query. Defaults to 50. Each returned job is billed at the per-job rate.

## `enrichJobDetails` (type: `boolean`):

When true, visits each job's detail page to add description text, applicant count, seniority, employment type, job function and industries. Slower and adds one request per job. Defaults to false (list-level fields only).

## `enrichCompany` (type: `boolean`):

When true, attaches the company's industry, size, employee count, headquarters, followers, website and logo via ScrapeCreators/SociaVault. Required and forced on when 'company' is a URL or slug (used to resolve the numeric ID). Set false only when you pass a numeric company ID and want jobs without company metadata. Defaults to true.

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

Proxy settings. Defaults to Apify Residential US, which LinkedIn's job endpoints require. Override only if you know what you are doing.

## Actor input object example

```json
{
  "company": "https://www.linkedin.com/company/stripe",
  "keywords": "software engineer",
  "location": "United States",
  "datePosted": "any",
  "jobType": "any",
  "experienceLevel": "any",
  "remoteOnly": false,
  "maxResults": 50,
  "enrichJobDetails": false,
  "enrichCompany": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

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

All job postings scraped for the company.

## `summary` (type: `string`):

Resolved companyId, jobs scraped, provider used.

# 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 = {
    "company": "https://www.linkedin.com/company/stripe",
    "maxResults": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/linkedin-company-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 = {
    "company": "https://www.linkedin.com/company/stripe",
    "maxResults": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/linkedin-company-jobs-scraper").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 '{
  "company": "https://www.linkedin.com/company/stripe",
  "maxResults": 50
}' |
apify call khadinakbar/linkedin-company-jobs-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/jo4IhcXBcbcD0GC3r/builds/kHFEBMfEf6Qu8rrz9/openapi.json
