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

LinkedIn Jobs & Company Scraper collects job postings from any LinkedIn job search URL. Get full job descriptions, company, location, posting date, seniority, employment type and recruiter details. Export to JSON, CSV or Excel for hiring trend analysis and job market research.

- **URL**: https://apify.com/alpha-scraper/linkedin-jobs-company-scraper.md
- **Developed by:** [Alpha Scraper](https://apify.com/alpha-scraper) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 results

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/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 & Company Scraper

LinkedIn Jobs & Company Scraper turns a LinkedIn job search URL into a clean dataset of job postings and the companies behind them. Paste a search link, choose how many jobs you want, and the Actor returns each job's description, company, location, posting date, seniority, employment type, salary clues and recruiter details where LinkedIn shows them.

It reads public LinkedIn job pages, so you do not need a LinkedIn account, cookies or login. LinkedIn Jobs & Company Scraper suits recruiters, hiring analysts, sales teams and job-board builders who need structured hiring data without manual copy and paste.

The simplest workflow is to search on LinkedIn, copy the address from your browser and let LinkedIn Jobs & Company Scraper collect the results. You can export the data as JSON, CSV or Excel from Apify.

> **📌 LinkedIn Jobs & Company Scraper at a glance**
>
> - **Platform:** LinkedIn public job search
> - **Input:** one LinkedIn job search URL per run
> - **Output:** one dataset item per job posting
> - **Login required:** no

### 🔹 LinkedIn Jobs & Company Scraper – Key Features

LinkedIn Jobs & Company Scraper keeps the input simple and the output rich:

- **One URL, one limit** – paste a LinkedIn job search URL and set the maximum number of jobs.
- **Filters carry over** – the filters in your LinkedIn URL are passed on to LinkedIn's public job search.
- **Location from the link** – LinkedIn "jobs-in-place" links work too, because the location is read from the address.
- **Full descriptions** – every LinkedIn job includes description text and HTML.
- **Job criteria** – seniority level, employment type, job function and industries.
- **Pay clues** – base salary and extra compensation such as bonuses, when they appear on LinkedIn or in the description.
- **Apply details** – the apply type (Easy Apply or External) and an apply URL.
- **Recruiter and company data** – recruiter name, title and profile where shown, plus the company name, LinkedIn page, logo and ID.

### 📊 LinkedIn Jobs & Company Scraper – What Data You Can Extract

Each dataset item describes one job posting. LinkedIn Jobs & Company Scraper returns an empty value when LinkedIn does not show a field.

| Group | Fields |
|---|---|
| Job basics | `title`, `location`, `job_urn`, `job_url` |
| Company | `company_name`, `company_profile`, `company_logo`, `company_id` |
| Dates | `posted_datetime`, `posted_time_ago` |
| Description | `description_text`, `description_html` |
| Job criteria | `seniority_level`, `employment_type`, `job_function`, `industries` |
| Pay | `base_salary`, `additional_compensation` |
| Application | `apply_type`, `apply_url`, `applicants` |
| Recruiter | `recruiter_name`, `recruiter_detail`, `recruiter_image`, `recruiter_profile` |

Instead of opening hundreds of job pages by hand, LinkedIn Jobs & Company Scraper gives you every role, employer and application path in one flat table. The data model has no nested objects, so the results open cleanly in a spreadsheet or database without any reshaping.

> **🌟 Why use LinkedIn Jobs & Company Scraper?**
>
> - **Fast setup** – one search URL and one number are all you need.
> - **Consistent columns** – every record uses the same field names, so runs are easy to compare.
> - **Cost control** – you pay per result, and the maximum number of jobs sets your ceiling.
> - **No account needed** – nothing to log in to and no cookies to maintain.

### 🚀 How to Use LinkedIn Jobs & Company Scraper

You can run LinkedIn Jobs & Company Scraper from the Apify Console in a few minutes:

- **Step 1:** Open the LinkedIn jobs page, enter keywords and a location, and add any filters you want.
- **Step 2:** Copy the full address from the browser bar and paste it into **LinkedIn job search URL**.
- **Step 3:** Set **Maximum number of jobs**. Start small, for example 10 to 25.
- **Step 4:** Click **Start**. LinkedIn Jobs & Company Scraper collects the jobs one by one.
- **Step 5:** Open the **Output** tab to preview the table, then download your LinkedIn data in the format you need.

> **💡 Tip:** Check a small run first. If the jobs match your LinkedIn search, raise the limit.

### 🎯 LinkedIn Jobs & Company Scraper – Use Cases

LinkedIn Jobs & Company Scraper helps whenever you need a list of open roles with employer context:

- **Recruiting and sourcing** – use LinkedIn Jobs & Company Scraper to see who is hiring for a role and how they describe it.
- **Hiring trend analysis** – use LinkedIn Jobs & Company Scraper to track posting dates, seniority and employment types for a role over time.
- **Employer research** – group jobs by company name and company ID to see who hires the most.
- **Lead generation** – let LinkedIn Jobs & Company Scraper turn job ads into a list of companies with active hiring needs.
- **Job boards and aggregators** – feed fresh postings into your own site or database.
- **Salary research** – collect the pay information that employers publish.
- **Recruiter outreach** – find the profile of the person who posted a job, where LinkedIn shows one.

### 🧩 How LinkedIn Jobs & Company Scraper Works

After you start a run, LinkedIn Jobs & Company Scraper reads your search URL, keeps the search filters and asks LinkedIn's public job search for results page by page. It skips jobs it has already seen, then opens the public page of each job to read the full details.

LinkedIn jobs are saved to the dataset one at a time, so the Output tab fills up while the run is in progress. If LinkedIn refuses a request, the Actor retries it. A job that has been removed is skipped.

If several job pages in a row cannot be loaded, LinkedIn Jobs & Company Scraper stops the run instead of wasting resources. Jobs collected up to that point are kept. The Actor reads LinkedIn pages in English, so labels such as seniority level and employment type use English wording.

### 🔎 How to Scrape LinkedIn Jobs From a Search URL

To scrape LinkedIn jobs for a role and country, paste a search link such as the example below.

```json
{
  "search_url": "https://www.linkedin.com/jobs/search/?keywords=python%20developer&location=Germany",
  "max_results": 25
}
```

You can also use a place-based link, for example `https://www.linkedin.com/jobs/jobs-in-bangladesh`. The location is taken from the link. Pages for a single job, a company or a person are not supported.

### ⚙️ LinkedIn Jobs & Company Scraper – Input

LinkedIn Jobs & Company Scraper has two input fields, available in the Console form and through the Apify API.

| Field | Type | Default | What it does |
|---|---|---|---|
| `search_url` | string | prefilled sample link | **Required.** One LinkedIn job search URL per run. |
| `max_results` | integer | 10 | Maximum jobs to scrape. Each job counts as one result. Minimum 1. |

The URL must be a LinkedIn job search link (`linkedin.com/jobs/search…`) or a place-based link (`linkedin.com/jobs/jobs-in-…`). Anything else stops the run with a clear error message. LinkedIn tracking parameters such as `currentJobId` are ignored.

> **⚠️ Good to know:** LinkedIn returns at most about 1,000 jobs per search. LinkedIn also decides which filters it applies to public results, so some filters may not narrow the list. Check a small run before you scale up.

If fewer jobs match than your limit, the run ends early and returns what exists.

### 📦 LinkedIn Jobs & Company Scraper – Output

LinkedIn Jobs & Company Scraper saves one record per job to the default dataset. Here is a shortened example:

```json
[
  {
    "title": "Accountant",
    "location": "Dhaka, Bangladesh",
    "company_name": "Go Plane Private Limited",
    "posted_time_ago": "3 weeks ago",
    "posted_datetime": "2026-10-04",
    "applicants": "Over 200 applicants",
    "base_salary": null,
    "additional_compensation": null,
    "seniority_level": "Associate",
    "employment_type": "Full-time",
    "job_function": null,
    "industries": "International Affairs",
    "description_text": "We're Hiring: Accountant | Go Plane Private Limited\nGo Plane Private Limited, a leading IATA-accredited travel agency in Dhaka, is expanding its finance team. We are looking for an experienced and detail-oriented Accountant to manage our airline accounts, BSP/TRAACS operations, and statutory compliance.\nKey Responsibilities\nMaintain daily accounts, vouchers, invoices, receipts and payments\nManage TRAACS accounting records and airline sales transactions\nHandle BSP settlements and airline ticketing-related financial records\nPrepare Excel-based reports, reconciliations and financial statements\nMonitor receivables, payables, and cash flow\nManage VAT, Tax, TDS/VDS and other statutory compliance requirements\nSupport internal and external audits and tax return preparation\nMaintain accurate and organized financial documentation\nCandidate Profile\nBachelor's degree in Accounting, Finance, or related field\n2–4 years of relevant experience, preferably in the Travel/Airline industry\nHands-on experience with TRAACS strongly preferred\nAdvanced proficiency in Microsoft Excel\nSound knowledge of Bangladesh VAT & Tax regulations\nHigh attention to detail and financial accountability\nLocation:\nDhaka, Bangladesh",
    "description_html": "<div class=\"show-more-less-html__markup show-more-less-html__markup--clamp-after-5\n            relative overflow-hidden\">\n          <p><strong>We're Hiring: Accountant | Go Plane Private Limited</strong></p><p>Go Plane Private Limited, a leading IATA-accredited travel agency in Dhaka, is expanding its finance team. We are looking for an experienced and detail-oriented Accountant to manage our airline accounts, BSP/TRAACS operations, and statutory compliance.</p><p><br></p><p><strong>Key Responsibilities</strong></p><ul><li>Maintain daily accounts, vouchers, invoices, receipts and payments</li><li>Manage TRAACS accounting records and airline sales transactions</li><li>Handle BSP settlements and airline ticketing-related financial records</li><li>Prepare Excel-based reports, reconciliations and financial statements</li><li>Monitor receivables, payables, and cash flow</li><li>Manage VAT, Tax, TDS/VDS and other statutory compliance requirements</li><li>Support internal and external audits and tax return preparation</li><li>Maintain accurate and organized financial documentation</li></ul><p><br></p><p><strong>Candidate Profile</strong></p><ul><li>Bachelor's degree in Accounting, Finance, or related field</li><li>2–4 years of relevant experience, preferably in the Travel/Airline industry</li><li>Hands-on experience with TRAACS strongly preferred</li><li>Advanced proficiency in Microsoft Excel</li><li>Sound knowledge of Bangladesh VAT &amp; Tax regulations</li><li>High attention to detail and financial accountability</li></ul><p><br></p><p><strong>Location: </strong>Dhaka, Bangladesh</p>\n        </div>",
    "job_urn": "4475378474",
    "job_url": "https://www.linkedin.com/jobs/view/4475378474",
    "apply_type": "Easy Apply",
    "apply_url": "https://www.linkedin.com/jobs/view/4475378474",
    "recruiter_name": "Sumaya Akter",
    "recruiter_detail": "Team Leader - CRM at nextjobz Limited, A Concern of AKIJ Resource",
    "recruiter_image": "https://media.licdn.com/dms/image/v2/D5603AQHlDzkq7QUgqw/profile-displayphoto-scale_400_400/B56aC1mPILKoAg-/0/1789753095792?e=2147483647&v=beta&t=o-oUmDrvTW05MAbQEKUiSb27aVtIUqV_8wUEvnTUgvQ",
    "recruiter_profile": "https://bd.linkedin.com/in/sumayaakter6",
    "company_profile": "https://bd.linkedin.com/company/goplane",
    "company_logo": "https://media.licdn.com/dms/image/v2/D4D0BAQEpsx3gRnZeRQ/company-logo_100_100/B4DZuIMeOlHwAQ-/0/1767516530121?e=2147483647&v=beta&t=GQJk7KAHmon3mrNFAe_zY3f80Itxm1KLRKWrT_MdbP0",
    "company_id": "110786039"
  }
]
```

The full record also holds `description_html`, `recruiter_image` and `company_logo`. Recruiter fields are filled only when LinkedIn shows a job poster. Whenever LinkedIn does not show a value, LinkedIn Jobs & Company Scraper returns that field empty.

> **📝 Field notes**
>
> - `apply_type` is **External** or **Easy Apply**. `apply_url` is the external apply link when LinkedIn exposes one, otherwise the LinkedIn job link.
> - `posted_datetime` is an exact date when LinkedIn provides one, otherwise it is estimated from the "posted ago" text.
> - `additional_compensation` is the first description line that mentions a bonus, commission or incentive with a figure.

### 💰 LinkedIn Jobs & Company Scraper – Pricing

LinkedIn Jobs & Company Scraper is billed per result, so each job saved to the dataset counts toward your cost. The **Maximum number of jobs** setting is your main cost control.

See the Pricing tab on this Actor's page for the current rate. To set a hard cap, add a maximum cost per run in Apify. LinkedIn Jobs & Company Scraper stops when that cap is reached.

### ✅ Tips and Best Practices for LinkedIn Jobs & Company Scraper

> **Get cleaner results**
>
> - Test every new search with 10 to 25 jobs first.
> - Copy the URL after you apply filters on LinkedIn, so the filters travel with it.
> - Run one search per Actor run, and start several runs for several searches.
> - Schedule LinkedIn Jobs & Company Scraper in Apify to track new postings weekly.
> - Use `job_urn` as a unique key when you merge runs.

Narrow searches work best. A focused LinkedIn query returns more relevant jobs than a broad one, and fewer unneeded results means a lower bill.

### ❓ Frequently Asked Questions

#### 🤔 What is LinkedIn Jobs & Company Scraper?

LinkedIn Jobs & Company Scraper is an Apify Actor that collects public job postings from a LinkedIn job search URL and returns them with company and recruiter details.

#### 👥 Who uses LinkedIn Jobs & Company Scraper?

Recruiters, HR analysts, sales teams, market researchers, job-board owners and developers who need hiring data in a structured format.

#### 🔐 Can I use LinkedIn Jobs & Company Scraper without logging in?

Yes. The Actor reads public LinkedIn pages, so no account, cookies or password are needed.

#### 🏢 What company data does LinkedIn Jobs & Company Scraper return?

For every job it returns the company name, the LinkedIn company page URL, the logo and the LinkedIn company ID. It does not open separate company pages.

#### 💵 Does LinkedIn Jobs & Company Scraper return salary information?

Yes, when it is available. `base_salary` comes from the pay box, the job's structured data or a clear range in the description. `additional_compensation` captures bonus or commission lines. Both stay empty when no pay is mentioned.

#### 🧑‍💼 Can LinkedIn Jobs & Company Scraper find recruiter details?

It returns the recruiter name, title, photo and profile link when LinkedIn shows a job poster. It does not return email addresses or phone numbers.

#### 🔢 How many jobs can I scrape from one LinkedIn search?

LinkedIn returns about 1,000 jobs per search. Set `max_results` up to that number, or run several narrower searches.

#### 🌍 How do I scrape LinkedIn jobs in a specific country?

Add the country or city to the LinkedIn search URL, or use a `jobs-in-` link. The location is read from the link.

#### 📁 Can I export LinkedIn Jobs & Company Scraper results to Excel or CSV?

Yes. Open the dataset and choose Excel, CSV, JSON or another format, or fetch the data through the Apify API.

#### 🔌 Can I start LinkedIn Jobs & Company Scraper through the Apify API?

Yes. Call the Actor with the JSON input shown above and read the dataset when the run finishes.

#### 🔁 Can I scrape several searches in one run?

Each run takes one search URL. To cover several searches, start several runs of LinkedIn Jobs & Company Scraper, or schedule them in Apify.

#### 📉 Why did I get fewer jobs than my limit?

LinkedIn may have fewer matching jobs, a job may have been removed, or a job page may not have loaded. Try a broader search.

#### ⚖️ Is it allowed to scrape LinkedIn job data?

The Actor collects only publicly visible job information. You remain responsible for using the data lawfully and in line with LinkedIn's terms.

### 📬 Support

Questions, feature requests or a LinkedIn search that does not behave as expected? Share the search URL and your run link so the issue with LinkedIn Jobs & Company Scraper can be reproduced.

- Contact me by email: alphascraper69@gmail.com

# Actor input Schema

## `search_url` (type: `string`):

The LinkedIn job search page to scrape (one URL per run). Easiest way: open https://www.linkedin.com/jobs/search/ in your browser, enter keywords and a location, apply any filters you want (date posted, experience level, job type, remote/hybrid, ...), then copy the full address from the browser bar and paste it here. Every search filter in the URL's query string is passed on to LinkedIn's public job search, so your filters carry over (LinkedIn's own tracking parameters, such as currentJobId, are ignored). Accepted formats: https://www.linkedin.com/jobs/search/?keywords=python%20developer\&location=Germany, or https://www.linkedin.com/jobs/jobs-in-bangladesh (the location is read from the link). Pages for a single job, a company, or a person are not supported.

## `max_results` (type: `integer`):

The most job postings to scrape in this run; each job counts as one result. The run ends earlier if LinkedIn has fewer matching jobs; LinkedIn itself returns at most about 1,000 jobs per search. When trying a new search, start with a small number such as 10 to 25 and increase it once the results look right.

## Actor input object example

```json
{
  "search_url": "https://www.linkedin.com/jobs/jobs-in-bangladesh",
  "max_results": 10
}
```

# Actor output Schema

## `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 = {
    "search_url": "https://www.linkedin.com/jobs/jobs-in-bangladesh",
    "max_results": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("alpha-scraper/linkedin-jobs-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 = {
    "search_url": "https://www.linkedin.com/jobs/jobs-in-bangladesh",
    "max_results": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("alpha-scraper/linkedin-jobs-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 '{
  "search_url": "https://www.linkedin.com/jobs/jobs-in-bangladesh",
  "max_results": 10
}' |
apify call alpha-scraper/linkedin-jobs-company-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,alpha-scraper/linkedin-jobs-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/P4II3hiOvj2ShvZWQ/builds/FwOTfANtjY45bzNeD/openapi.json
