A dive into LinkedIn Jobs API
Published: 2022-07-30 12:36:24

![linkedin](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6cxktgq7ekkqhv9rg2bv.png)
 
## Table of Content

* Introduction
* Getting started with LinkedIn Jobs API
* Uses of LinkedIn Jobs API
* How to get access to LinkedIn Jobs API
* Fetching Jobs from the API
* Limitations of LinkedIn Jobs API
* Conclusion 


## Introduction

LinkedIn is the world's largest professional network on the internet. You can leverage LinkedIn to find the right job, connect with professionals within and outside of your career line and learn skills needed to transition into another career path, or become outstanding in your chosen career. LinkedIn can be accessed from any device with an internet connection. Optimizing Your LinkedIn profile can help you connect with opportunities all over the globe. Users can share their professional experience & skills, organize events, write articles, create learning content, search for jobs, post videos and photos, and more on LinkedIn.

With LinkedIn, business owners can grow their business through various means such as finding the right professional for a role, running marketing campaigns, content creation, etc. Job seekers can also tap into the network to connect with companies and hiring managers.

There are more than 830 million users in over 200 countries on LinkedIn. The platform also has over 57 million companies listed, with more than 15 million jobs listed.


## Getting started with LinkedIn Jobs API

[Proxycurl by Nubela](https://nubela.co/proxycurl/) makes tools for software engineers to build data-driven applications. You can think of Proxycurl as AWS for data-driven applications. It allows you to pull rich data about people and companies. With Proxycurl, you don't need to worry about scaling a web scrapping and data-science team for you to power your product with big data. Proxycurl offers a variety of endpoints: Person Profile API, Company Profile API, Work Email Lookup API, Employee Listing API, Reverse Email Lookup API, and Job API. Dwarf Forms, LinkDB, and Disposable Email Checker are other products by Proxycurl.

Proxycurl API is a set of tools designed to serve as plumbing for fresh and processed data in your application. It sits as a fully-managed layer between your application and raw data so that you can focus on building the actual application.

With Proxycurl API, you can:

* Lookup people
* Lookup companies
* Enrich people's profiles
* Enrich company profiles
* Lookup contact information on people and companies
* Check if an email address is of a disposable nature

Among the many Proxycurl APIs is the LinkedIn Jobs API that we shall be diving into in this article.

[Proxycurl's LinkedIn Jobs API](https://nubela.co/proxycurl/docs#jobs-api) has two endpoints that you can use to list jobs and get a job profile:

* [Jobs Listing Endpoint](https://nubela.co/proxycurl/docs#jobs-api-jobs-listing-endpoint): This endpoint list jobs posted by a company on LinkedIn.

* [Jobs Profile Endpoint](https://nubela.co/proxycurl/docs#jobs-api-job-profile-endpoint): This endpoint helps you get structured data of a LinkedIn job profile.

Using these endpoints, you can collate a comprehensive list of jobs on LinkedIn, as well as get structured data of a job profile. The API response is usually in JSON format.



## Uses of LinkedIn Jobs API

* **Build data-driven application:** Proxycurl Jobs API enables developers to build and scale data-driven applications. Perhaps, you are a product-oriented person looking to build an application where job seekers can search for companies that have open positions and are hiring, this API empowers you to do this in real-time. You can make up to 300 API calls per minute.

* **Build and scale fast with ease.** Build a working application in minutes. No worries about putting up a data science or web scrapping team. You need not crawl tens or even hundreds of job boards to gather job vacancies, rather, you will leverage Proxycurl Jobs API to get vacancies directly from hiring companies on LinkedIn. 

* **Leverage on Data to perform specific tasks inside your application.**

* **Get structured data of a LinkedIn job profile.** Proxycurl Jobs API offers you structured data like `apply_url`, `employment_type`, `industry` `job_description`, `seniority`, `location` etc.


## How to get access to LinkedIn Job API

* [Sign up with Proxycurl](https://nubela.co/proxycurl/auth/register)

![Sign-up](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8a31a5lb6f9gzo2qwm4n.png)


On successful signup, you get this:


![sign up successful](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/74a6tiquxrvy2fvk2zsx.png)


You have successfully created an account with Proxycurl and you have been credited with 10 credits to make API requests. 


* Next is to get you to the dashboard. Provide your email then click next to receive a magic link.

* A magic link is sent to your mail for you to sign in with. This link takes you directly to your dashboard

* Retrieve your API key from your dashboard. You are not authorized to make API request without your API key (Bearer token)


![api key](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8gun570xx11n8i9e0yro.png)


You may add your card to begin topping up to avoid running out of credit.

* Navigate the [documentation](https://nubela.co/proxycurl/docs#jobs-api) to get the Jobs endpoint. This endpoint is what you make requests to.

![docs endpoint](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w7af3rezyyy8z6qfkiw0.png)
 
Now that you have access to the Job API and also have an API key, you can now fetch jobs.


## Fetching Jobs from the API.

Let's fetch jobs from the Job listing endpoint using JavaScript. You can do this in any language of your choice. I pick JavaScript because I love it and I'm most familiar with it 😉 🥰.

```
const api_endpoint = `https://nubela.co/proxycurl/api/v2/linkedin/company/job?search_id=${search_id}`
const api_key = 'YOUR_API_KEY'

fetch(api_endpoint, {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer + api_key'
  }
})
.then(res => res.json())
.then(data => console.log(data))

```
The Job listing endpoint requires the `search_id` parameter to make a request. This is the only required parameter. You can get the `search_id` of a LinkedIn company via the [Company Profile API](https://nubela.co/proxycurl/docs?python#company-api).

We successfully made a request. Our response looks like this:

```
  {
    "job": [
        {
            "company": "Microsoft",
            "company_url": "https://www.linkedin.com/company/microsoft",
            "job_title": "Security Analyst (DART) - Detection and Response Team",
            "job_url": "https://www.linkedin.com/jobs/view/3099474469",
            "list_date": null,
            "location": "London, England, United Kingdom"
        },
        {
            "company": "Microsoft",
            "company_url": "https://www.linkedin.com/company/microsoft",
            "job_title": "Technology Specialists BizApps",
            "job_url": "https://www.linkedin.com/jobs/view/3073299528",
            "list_date": null,
            "location": "Reading, England, United Kingdom"
        },
        {
            "company": "Microsoft",
            "company_url": "https://www.linkedin.com/company/microsoft",
            "job_title": "Customer Success Management IC4",
            "job_url": "https://www.linkedin.com/jobs/view/3088297589",
            "list_date": null,
            "location": "Reading, England, United Kingdom"
        },
        {
            "company": "Microsoft",
            "company_url": "https://www.linkedin.com/company/microsoft",
            "job_title": "Web Sales \u0026 Customer Support Advisor - Consumer Customers",
            "job_url": "https://www.linkedin.com/jobs/view/3073408044",
            "list_date": null,
            "location": "London, England, United Kingdom"
        },
        {
            "company": "Microsoft",
            "company_url": "https://www.linkedin.com/company/microsoft",
            "job_title": "Digital Advisor",
            "job_url": "https://www.linkedin.com/jobs/view/3091944620",
            "list_date": null,
            "location": "Manchester, England, United Kingdom"
        },
        {
            "company": "Microsoft",
            "company_url": "https://www.linkedin.com/company/microsoft",
            "job_title": "Digital Advisor",
            "job_url": "https://www.linkedin.com/jobs/view/3091945492",
            "list_date": null,
            "location": "London, England, United Kingdom"
        },
        {
            "company": "Microsoft",
            "company_url": "https://www.linkedin.com/company/microsoft",
            "job_title": "Meeting Room Global Black Belt Sales Professional",
            "job_url": "https://www.linkedin.com/jobs/view/3073695907",
            "list_date": null,
            "location": "London, England, United Kingdom"
        },
        {
            "company": "Microsoft",
            "company_url": "https://www.linkedin.com/company/microsoft",
            "job_title": "Customer Success Manager - Modern Work",
            "job_url": "https://www.linkedin.com/jobs/view/3092059527",
            "list_date": null,
            "location": "Reading, England, United Kingdom"
        },
        {
            "company": "Microsoft",
            "company_url": "https://www.linkedin.com/company/microsoft",
            "job_title": "Business Administrator",
            "job_url": "https://www.linkedin.com/jobs/view/3073292283",
            "list_date": null,
            "location": "Cambridge, England, United Kingdom"
        },
        {
            "company": "Microsoft",
            "company_url": "https://www.linkedin.com/company/microsoft",
            "job_title": "Account Delivery Management IC6",
            "job_url": "https://www.linkedin.com/jobs/view/3073466352",
            "list_date": null,
            "location": "Reading, England, United Kingdom"
        },
        {
            "company": "Microsoft",
            "company_url": "https://www.linkedin.com/company/microsoft",
            "job_title": "Executive Producer-Xbox Publishing",
            "job_url": "https://www.linkedin.com/jobs/view/3089096967",
            "list_date": null,
            "location": "London, England, United Kingdom"
        }
    ],
"next_page_api_url": "http://proxycurl-web.127.0.0.1.nip.io:5002/proxycurl-dev/proxycurl-dev/api/v2/linkedin/company/job?pagination=eyJwYWdlIjogMX0\u0026search_id=1035",
    "next_page_no": 1,
    "previous_page_api_url": null,
    "previous_page_no": null
   
}

```

The endpoint returns an object having inside an array of `job`. The `job` array have objects containing `company`, `company_url`, `job_title`, `job_url`, `list_date`, and `location`. Other keys in the response are `next_page_no`, `next_page_api_url`, `previous_page_no`, and  `previous_page_api_url` for navigating across pages.

The Jobs API costs 1 credit per successful request.

Let's also send a request to the Job Profile Endpoint to get structured data of a LinkedIn Job Profile.

```
const api_endpoint = `https://nubela.co/proxycurl/api/linkedin/job?url=${url}`
const api_key = 'YOUR_API_KEY'

fetch(api_endpoint, {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer + api_key'
  }
})
.then(res => res.json())
.then(data => console.log(data))

```
`url` is a required parameter for our request. This is the URL of the LinkedIn job profile to target.

The response looks like this:

```
{
    "apply_url": null,
    "company": {
        "logo": "https://media-exp1.licdn.com/dms/image/C4D0BAQHiNSL4Or29cg/company-logo_400_400/0/1519856215226?e=1661385600\u0026v=beta\u0026t=rUecQpduLPDavL3JswjLsJAUNgSu1Q2l3JS5sGp8nHk",
        "name": "Google",
        "url": "https://www.linkedin.com/company/google"
    },
    "employment_type": "Full-time",
    "industry": [
        "Internet"
    ],
    "job_description": "This role may also be located in our Playa Vista, CA campus.\n\nNote: By applying to this position you will have an opportunity to share your preferred working location from the following: Redwood City, CA, USA; Ann Arbor, MI, USA; Chicago, IL, USA; New York, NY, USA; Los Angeles, CA, USA.\n\nMinimum qualifications:\nBachelor\u2019s degree in Engineering, Computer Science, Information Systems, Statistics, Economics, Mathematics, Finance, a related quantitative field, or equivalent practical experience.2 years of experience in business intelligence, data engineering, data modeling, or using analytics with SQL.Experience with programming languages (e.g. Python).Experience partnering or working with stakeholders across organizational boundaries.\n\nPreferred qualifications:\n4 years of experience designing and building scalable data pipelines to enable data-driven business selections.Experience in statistical tools (e.g., R, SPSS, MATLAB, etc.).Experience in machine learning models (e.g., sci-kit-learn, TensorFlow, etc.).Knowledge of commercial and other reporting tools and technologies (e.g., Tableau, QlikView, D3, Microstrategy, BusinessObjects, Cognos, etc.).Ability to manage multiple projects, and communicate findings/reports to stakeholders and non-technical audiences. Excellent verbal and written communication skills.\n\nAbout The Job\n\nAs a Data Engineer, you will use an analytical, data-driven approach to drive understanding of business changes. You will build data pipelines that enable engineers, analysts, and other stakeholders across the organization. You will also build data models to deliver insightful analytics while ensuring data integrity.\n\nWhen our millions of advertisers and publishers are happy, so are we! Our Google Customer Solutions (GCS) team of entrepreneurial, enthusiastic, and client-focused members are the \"human face\" of Google, helping entrepreneurs both individually and broadly build their online presence and grow their businesses. We are dedicated to growing the unique needs of advertising companies. Our teams of strategists, analysts, advisers, and support specialists collaborate closely to spot and analyze customer needs and trends. In collaboration, we create and implement business plans broadly for all types of businesses.\n\nResponsibilities\n\nBuild data pipelines, reports, best practices, and frameworks that enable analysts and stakeholders across the organization. Recognize and adopt best practices in developing pipelines and analytical insights, including data integrity, test design, analysis, validation, and documentation. Design and develop scalable and actionable solutions that provide insights to help advertisers grow. Work with stakeholders to understand feature and tool gaps and innovate on behalf of our customers.\n\nGoogle is proud to be an equal opportunity workplace and is an affirmative action employer. We are committed to equal employment opportunity regardless of race, color, ancestry, religion, sex, national origin, sexual orientation, age, citizenship, marital status, disability, gender identity, or Veteran status. We also consider qualified applicants regardless of criminal histories, consistent with legal requirements. See also Google\u0027s EEO Policy and EEO is the Law. If you have a disability or special need that requires accommodation, please let us know by completing our Accommodations for Applicants form .",
    "job_functions": [],
    "linkedin_internal_id": "3046202003",
    "location": null,
    "seniority_level": null,
    "title": "Data Engineer, Google Customer Solutions",
    "total_applicants": null
}

```
The response keys are: `total_applicants`, `title`, `seniority_level`, `location`, `linkedin_internal_id`, `job_functions`, `job_description`, `industry`, `employment_type`, `url`, `name`, `company`, and `apply_url`.


## Limitation of LinkedIn Jobs API

### Rate limit

Proxycurl allows you to make up to 300 requests per minute. You can make 1500 requests every 5 minutes.

When there is a high load of requests, Proxycurl might reduce rate limits for all accounts, this is to ensure that the services remain accessible for all users.

`429` error code is returned when you are rate limited and when Proxycurl is capacity limited. `429` errors should be handled appropriately with exponential back-off applied.

### Timeouts and API response time

Proxycurl API endpoints take an average of 2 seconds to complete. Concurrent requests to the API service are encouraged for [maximizing throughput](https://nubela.co/blog/how-to-maximize-throughput-on-proxycurl/). 
A timeout of 60 seconds is recommended.

### Credits

Each valid request on Proxycurl requires at least 1 credit to be processed. Credit is deducted only if the request was successful

Proxycurl defines a successful request as a request that returns either a `200` or `404` HTTP status code. The latter is considered a successful request because resources were committed for the search but the profile was not valid



## Conclusion

Leverage [Proxycurl's LinkedIn Job API](https://nubela.com/proxycurl) to get access to jobs posted by companies on LinkedIn. With this, you can build and scale data-driven applications within a short time.