GET
/
linkedin
/
job-search
curl --request GET \
  --url https://api.harvest-api.com/linkedin/job-search \
  --header 'X-API-Key: <api-key>'
{
  "elements": [
    {
      "id": "<string>",
      "url": "<string>",
      "title": "<string>",
      "postedDate": "2023-11-07T05:31:56Z",
      "companyName": "<string>",
      "companyLink": "<string>",
      "companyUniversalName": "<string>",
      "location": {
        "linkedinText": "<string>"
      },
      "easyApply": true
    }
  ],
  "pagination": {
    "totalPages": 123,
    "totalElements": 123,
    "pageNumber": 123,
    "previousElements": 123,
    "pageSize": 123
  },
  "status": "<string>",
  "error": "<string>",
  "query": {
    "title": "<string>",
    "companyId": "<string>",
    "location": "<string>",
    "geoId": "<string>",
    "sortBy": "<string>",
    "workplaceType": "<string>",
    "postedLimit": "<string>",
    "page": 123
  }
}
const params = new URLSearchParams({
  search: 'Software Engineer',
  companyId: '1441', // Google
  location: 'US',
  sortBy: 'date',
  workplaceType: 'hybrid,remote',
  employmentType: 'full-time',
  postedLimit: 'month',
  page: '1',
  salary: '100k+',
});
fetch(`https://api.harvest-api.com/linkedin/job-search?${params.toString()}`, {
  headers: { 'X-API-Key': '<api-key>' },
})
  .then((response) => response.json())
  .then((data) => console.log(data));

How to get Company ID

const params = new URLSearchParams({
  search: 'Google',
  apiKey: '<api-key>',
});

fetch(`https://api.harvest-api.com/linkedin/company-search?${params.toString()}`)
  .then((res) => res.json())
  .then((data) => {
    const companies = data.elements;
    const firstMatchId = companies[0].id;
    console.log(`LinkedIn ID for Google: ${firstMatchId}`);
  });

Search by LinkedIn GeoID

For most of the cases, when specifying full location name, the search by the location parameter should work fine.
However sometimes search by location may not give you what you expect, as LinkedIn have some other location for your text query. For example, NY returns New Zealand as first match instead of New York (it’s based on LinkedIn autocomplete feature, you can try it in UI).

To make sure the location is correct, you can fetch LinkedIn GeoID first and check it. GeoID search is free, it will not count against your quota.

const apiKey = '<api-key>';

fetch(`https://api.harvest-api.com/linkedin/geo-id-search?search=New York`, {
  headers: { 'X-API-Key': apiKey },
})
  .then((response) => response.json())
  .then((data) => {
    console.log('All matches:', data.elements);
    console.log('Closest match GeoID:', data.id);

    // Search for profiles in New York
    const params = new URLSearchParams({
      geoId: data.id,
      apiKey,
    });
    fetch(`https://api.harvest-api.com/linkedin/profile-search?${params.toString()}`)
      .then((response) => response.json())
      .then((data) => console.log(data));
  });

Authorizations

X-API-Key
string
header
required

Query Parameters

Search jobs by title

companyId
string

Filter by company ID. One value or multiple comma-separated.

location
string

Filter by location text

geoId
string

Filter by location as LinkedIn Geo ID. Overrides the location query param. Use the /linkedin/geo-id-search endpoint to find the Geo ID

sortBy
string

Sort by field. Supported values: 'relevance', 'date'

workplaceType
string

Filter by workplace type. One or multiple values comma-separated. Supported values: 'office', 'hybrid', 'remote'

employmentType
string

Filter by employment type. One or multiple values comma-separated. Supported values: 'full-time', 'part-time', 'contract', 'temporary', 'internship'

salary
string

Filter by salary range. Supported values: '40k+', '60k+', '80k+', '100k+', '120k+', '140k+', '160k+', '180k+', '200k+'

postedLimit
string

Filter posts by maximum posted date. Supported values: '24h', 'week', 'month'

page
integer
default:1

Page number for pagination

Response

200
application/json
Job search response
elements
object[]
pagination
object
status
string
error
string
query
object