LinkedIn Wiki

LinkedIn Company Jobs API: How to Access Job Listings

Learn how to use the Fresh LinkedIn Scraper API to retrieve company job listings from LinkedIn without OAuth authentication.

LinkedIn Company Jobs API: How to Access Job Listings

LinkedIn Company Jobs API: How to Access Job Listings

Accessing job listings data from LinkedIn companies programmatically can be invaluable for recruitment platforms, job aggregators, and market research. In this guide, we'll explore how to use the Fresh LinkedIn Scraper API to retrieve comprehensive company job listings without complex OAuth authentication.

Table of Contents

Why Access LinkedIn Company Jobs Data?

LinkedIn is the world's largest professional network with millions of job listings. Programmatic access to this data provides numerous benefits:

  • Recruitment Platforms: Aggregate job listings across companies
  • Market Research: Analyze hiring trends across industries
  • Competitive Intelligence: Monitor competitor hiring patterns
  • Talent Acquisition: Stay updated on relevant job openings
  • Career Services: Help job seekers find relevant opportunities

The Fresh LinkedIn Scraper API

The Fresh LinkedIn Scraper API on RapidAPI provides a straightforward way to access LinkedIn company job listings without:

  • Complex OAuth authentication
  • LinkedIn developer program approval
  • Rate limiting concerns of direct scraping
  • Terms of service violations

How to Get LinkedIn Company Jobs Data

To retrieve job listings for a company, you'll use the company jobs endpoint with either a company ID or name.

API Endpoint

GET https://fresh-linkedin-scraper-api.p.rapidapi.com/api/v1/company/jobs

Request Parameters

Parameter Required Description
company_id Required* LinkedIn company ID (e.g., "783611")
company Required* Company name (consumes an additional request)
page No Page number for pagination (default: 1)
sort_by No Sort order: "recent" or "relevant" (default: "recent")
date_posted No Filter by post date: "anytime", "past_month", "past_week", "past_24_hours"
geocode No Geographical code for location-based search
experience_level No Filter by level: "internship", "entry_level", "associate", "mid_senior", "director", "executive"
remote No Filter by location type: "onsite", "remote", "hybrid"
job_type No Filter by employment type: "full_time", "part_time", "contract", etc.
easy_apply No Filter jobs that are easy to apply for (boolean)
has_verifications No Filter jobs with company verifications (boolean)
under_10_applicants No Filter jobs with fewer than 10 applicants (boolean)
fair_chance_employer No Filter jobs from fair chance employers (boolean)

*Either company_id or company is required, but using company_id is more efficient.

Required Headers

x-rapidapi-host: fresh-linkedin-scraper-api.p.rapidapi.com
x-rapidapi-key: YOUR_RAPIDAPI_KEY

Example Request

curl --request GET \
	--url 'https://fresh-linkedin-scraper-api.p.rapidapi.com/api/v1/company/jobs?company_id=783611&page=1' \
	--header 'x-rapidapi-host: fresh-linkedin-scraper-api.p.rapidapi.com' \
    --header 'x-rapidapi-key: YOUR_RAPIDAPI_KEY'

Understanding the API Response

The API returns a comprehensive JSON object with job listings data. Let's examine the key parts of the response:

Response Overview

{
  "success": true,
  "message": "success",
  "process_time": 1173,
  "data": [
    /* array of job listings */
  ],
  "cost": 1,
  "page": 1,
  "total": 654,
  "has_more": true,
  "metadata": {
    "companyId": "783611",
    "filter": {}
  }
}

Individual Job Listing

Each job in the response contains detailed information:

{
  "id": "4126182940",
  "title": "Software Engineer 3",
  "url": "https://www.linkedin.com/jobs/view/4126182940",
  "listed_at": "2025-04-20T14:13:54.000Z",
  "is_promote": false,
  "is_easy_apply": false,
  "location": "San Francisco, CA",
  "company": {
    "id": "783611",
    "name": "MongoDB",
    "url": "https://www.linkedin.com/company/783611",
    "verified": true,
    "logo": [
      {
        "width": 200,
        "height": 200,
        "url": "https://media.licdn.com/dms/image/v2/C4D0BAQFKe8PwqzyHyA/company-logo_200_200/company-logo_200_200/0/1635171226992/mongodbinc_logo?e=1751500800&v=beta&t=KgDMukDaRdjivdTrIHSHfFu7dZIAwWh7a0qGeAU_-zg",
        "expires_at": 1751500800000
      }
      // Additional logo sizes...
    ]
  }
}

Code Examples

Here are implementation examples in popular programming languages:

JavaScript/Node.js

const axios = require("axios");

const options = {
  method: "GET",
  url: "https://fresh-linkedin-scraper-api.p.rapidapi.com/api/v1/company/jobs",
  params: {
    company_id: "783611",
    page: "1",
  },
  headers: {
    "x-rapidapi-host": "fresh-linkedin-scraper-api.p.rapidapi.com",
    "x-rapidapi-key": "YOUR_RAPIDAPI_KEY",
  },
};

async function getCompanyJobs() {
  try {
    const response = await axios.request(options);
    console.log(response.data);
    return response.data;
  } catch (error) {
    console.error(error);
  }
}

getCompanyJobs();

Python

import requests

url = "https://fresh-linkedin-scraper-api.p.rapidapi.com/api/v1/company/jobs"

querystring = {
    "company_id": "783611",
    "page": "1",
    "sort_by": "recent"
}

headers = {
    "x-rapidapi-host": "fresh-linkedin-scraper-api.p.rapidapi.com",
    "x-rapidapi-key": "YOUR_RAPIDAPI_KEY"
}

response = requests.request("GET", url, headers=headers, params=querystring)

print(response.json())

PHP

<?php

$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_URL => "https://fresh-linkedin-scraper-api.p.rapidapi.com/api/v1/company/jobs?company_id=783611&page=1",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "GET",
    CURLOPT_HTTPHEADER => [
        "x-rapidapi-host: fresh-linkedin-scraper-api.p.rapidapi.com",
        "x-rapidapi-key: YOUR_RAPIDAPI_KEY"
    ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response;
}

Best Practices

When using the LinkedIn Company Jobs API, follow these best practices:

1. Use Company ID When Possible

While you can use a company name to retrieve jobs, using the company ID is more efficient:

// More efficient - uses company_id directly
const efficientOptions = {
  params: { company_id: "783611" },
};

// Less efficient - requires an additional API call
const lessEfficientOptions = {
  params: { company: "mongodb" },
};

2. Implement Pagination for Complete Results

LinkedIn jobs are paginated, so retrieve all pages for complete results:

async function getAllCompanyJobs(companyId) {
  let allJobs = [];
  let currentPage = 1;
  let hasMore = true;

  while (hasMore) {
    const options = {
      method: "GET",
      url: "https://fresh-linkedin-scraper-api.p.rapidapi.com/api/v1/company/jobs",
      params: {
        company_id: companyId,
        page: currentPage.toString(),
      },
      headers: {
        "x-rapidapi-host": "fresh-linkedin-scraper-api.p.rapidapi.com",
        "x-rapidapi-key": "YOUR_RAPIDAPI_KEY",
      },
    };

    const response = await axios.request(options);
    allJobs = [...allJobs, ...response.data.data];

    hasMore = response.data.has_more;
    currentPage++;

    // Optional: Add delay to avoid rate limiting
    await new Promise((resolve) => setTimeout(resolve, 1000));
  }

  return allJobs;
}

3. Use Filters for Targeted Results

The API offers multiple filter parameters to get more targeted results:

const options = {
  params: {
    company_id: "783611",
    experience_level: "mid_senior",
    remote: "remote",
    job_type: "full_time",
    date_posted: "past_week",
  },
};

4. Implement Caching

Job listings don't change very frequently. Implement caching to reduce API calls:

const NodeCache = require("node-cache");
const cache = new NodeCache({ stdTTL: 3600 }); // Cache for 1 hour

async function getCompanyJobsWithCache(companyId, page) {
  const cacheKey = `jobs_${companyId}_${page}`;

  // Check if data exists in cache
  const cachedData = cache.get(cacheKey);
  if (cachedData) {
    return cachedData;
  }

  // Fetch new data
  const response = await axios.request({
    // API request options...
    params: {
      company_id: companyId,
      page: page,
    },
  });

  // Store in cache
  cache.set(cacheKey, response.data);

  return response.data;
}

By following this guide, you'll be able to effectively access and utilize LinkedIn company job listings through the Fresh LinkedIn Scraper API, enabling powerful job search and recruitment applications without the complexity of LinkedIn's official API.