SOCIAL MEDIA

Search LinkedIn Jobs API

Search LinkedIn job postings by keyword and location. Returns title, company, location, posting date, salary hint and the job id you pass to linkedin-jobs-detail. Reads LinkedIn's public guest surface — no LinkedIn account or cookie is required.

Part of: LinkedIn Jobs Scraper API

linkedinjobshiringrecruitingsearchscraping
Try it freeGet an API key

How to call it

Send one POST to api.upapi.io/linkedin-jobs-search.get with your key in the X-Api-Key header and the parameters below as a JSON body. Each call spends 6 weighted units of your monthly quota. The operation times out after 45 seconds. Identical requests are served from cache for 300 seconds, unbilled.

endpoint
POST https://api.upapi.io/linkedin-jobs-search.get

Search LinkedIn Jobs API reference

Request parameters

page
integer — 1-based results page. LinkedIn's guest surface returns 10 postings per page.
keywords
stringrequired — Job title, skill or company to search for (e.g. "python developer")
location
string — City, region or country to search in (e.g. "United States")
proxyUrl
string — User-provided proxy URL. Omit to use the operation's own datacenter pool.
timePosted
string — Recency filter: any, past-month, past-week or past-24h
workplaceType
string — Workplace filter: any, on-site, remote or hybrid

Response fields

jobs
arrayrequired
jobs[].jobId
stringrequired
jobs[].title
stringrequired
jobs[].jobUrl
stringrequired
jobs[].salary
stringrequired
jobs[].company
stringrequired
jobs[].logoUrl
stringrequired
jobs[].benefits
arrayrequired
jobs[].location
stringrequired
jobs[].postedAt
stringrequired
jobs[].companyUrl
stringrequired
jobs[].postedLabel
stringrequired
page
integerrequired
hasMore
booleanrequired
keywords
stringrequired
location
stringrequired
elapsedMs
integerrequired
fetchedAt
stringrequired
resultCount
integerrequired

Example request and response

The example response is generated from this operation’s published output schema — it shows the shape and field names, not values from a recorded call.

json — example request body
{
  "page": 1,
  "keywords": "python developer",
  "location": "United States",
  "timePosted": "any",
  "workplaceType": "any"
}
json — example response shape
{
  "jobs": [
    {
      "jobId": "example",
      "title": "Alan Turing",
      "jobUrl": "example",
      "salary": "example",
      "company": "example",
      "logoUrl": "example",
      "benefits": [
        "example"
      ],
      "location": "example",
      "postedAt": "example",
      "companyUrl": "example",
      "postedLabel": "example"
    }
  ],
  "page": 1,
  "hasMore": false,
  "keywords": "example",
  "location": "example",
  "elapsedMs": 1,
  "fetchedAt": "example",
  "resultCount": 1
}

Code snippets

cURL
curl
curl -X POST https://api.upapi.io/linkedin-jobs-search.get \
  -H 'Content-Type: application/json' \
  -H 'x-api-key: YOUR_API_KEY' \
  -d '{ "page": 1, "keywords": "python developer", "location": "United States", "timePosted": "any", "workplaceType": "any" }'
JavaScript
javascript
const response = await fetch('https://api.upapi.io/linkedin-jobs-search.get', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'x-api-key': 'YOUR_API_KEY',
  },
  body: JSON.stringify({
  "page": 1,
  "keywords": "python developer",
  "location": "United States",
  "timePosted": "any",
  "workplaceType": "any"
}),
});

const data = await response.json();
console.log(data);
Python
python
import requests

response = requests.post(
    'https://api.upapi.io/linkedin-jobs-search.get',
    headers={
        'Content-Type': 'application/json',
        'x-api-key': 'YOUR_API_KEY',
    },
    json={
  "page": 1,
  "keywords": "python developer",
  "location": "United States",
  "timePosted": "any",
  "workplaceType": "any"
},
)

print(response.json())
Go
go
package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"io"
	"net/http"
)

func main() {
	payload := []byte(`{ "page": 1, "keywords": "python developer", "location": "United States", "timePosted": "any", "workplaceType": "any" }`)

	req, _ := http.NewRequest("POST", "https://api.upapi.io/linkedin-jobs-search.get", bytes.NewBuffer(payload))
	req.Header.Set("Content-Type", "application/json")
	req.Header.Set("x-api-key", "YOUR_API_KEY")

	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()

	body, _ := io.ReadAll(resp.Body)
	var result map[string]any
	json.Unmarshal(body, &result)
	fmt.Println(result)
}
PHP
php
<?php

$payload = json_encode([
    'page' => 1,
    'keywords' => 'python developer',
    'location' => 'United States',
    'timePosted' => 'any',
    'workplaceType' => 'any',
]);

$ch = curl_init('https://api.upapi.io/linkedin-jobs-search.get');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => $payload,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => [
        'Content-Type: application/json',
        'x-api-key: YOUR_API_KEY',
    ],
]);

$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true);
var_dump($data);
Ruby
ruby
require 'net/http'
require 'uri'
require 'json'

uri = URI('https://api.upapi.io/linkedin-jobs-search.get')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == 'https'

request = Net::HTTP::Post.new(uri.path)
request['Content-Type'] = 'application/json'
request['x-api-key'] = 'YOUR_API_KEY'
request.body = { "page": 1, "keywords": "python developer", "location": "United States", "timePosted": "any", "workplaceType": "any" }.to_json

response = http.request(request)
puts JSON.parse(response.body)
Java
java
import okhttp3.*;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Map;

OkHttpClient client = new OkHttpClient();
ObjectMapper mapper = new ObjectMapper();

String json = "{ \"page\": 1, \"keywords\": \"python developer\", \"location\": \"United States\", \"timePosted\": \"any\", \"workplaceType\": \"any\" }";

RequestBody body = RequestBody.create(json, MediaType.get("application/json"));
Request request = new Request.Builder()
    .url("https://api.upapi.io/linkedin-jobs-search.get")
    .post(body)
    .addHeader("Content-Type", "application/json")
    .addHeader("x-api-key", "YOUR_API_KEY")
    .build();

try (Response response = client.newCall(request).execute()) {
    Map<?, ?> result = mapper.readValue(response.body().string(), Map.class);
    System.out.println(result);
}
C#
csharp
using System.Net.Http;
using System.Net.Http.Json;
using System.Text.Json;

using var client = new HttpClient();
client.DefaultRequestHeaders.Add("x-api-key", "YOUR_API_KEY");

var payload = JsonSerializer.Deserialize<object>("{ \"page\": 1, \"keywords\": \"python developer\", \"location\": \"United States\", \"timePosted\": \"any\", \"workplaceType\": \"any\" }");
var response = await client.PostAsJsonAsync("https://api.upapi.io/linkedin-jobs-search.get", payload);

var result = await response.Content.ReadFromJsonAsync<JsonElement>();
Console.WriteLine(result);

Frequently asked questions

How much does the Search LinkedIn Jobs API cost per call?

Each call spends 6 weighted units of your plan's monthly quota. Full pricing is at https://upapi.io/pricing.

How do I authenticate to the Search LinkedIn Jobs API?

Send your key in the X-Api-Key header. A free guest key is available without creating an account.

Are Search LinkedIn Jobs API responses cached?

Yes — identical requests are served from cache for 300 seconds, and a cache hit is not billed.

More Social Media APIs

Browse every Social Media API →