---
title: "LinkedIn Jobs API: real-time structured data | Scrape.ly"
description: "Scrape public LinkedIn job search results by keyword and location: titles, companies, locations, posting dates, salaries, full descriptions, and company details."
url: https://scrape.ly/api/linkedin-jobs-api
markdown: https://scrape.ly/api/linkedin-jobs-api.md
---

G2

4.7/5

[Excellent](https://www.trustpilot.com/review/scrape.ly)

[Trustpilot](https://www.trustpilot.com/review/scrape.ly)

# Turn LinkedIn Jobs into structured data

Scrape public LinkedIn job search results by keyword and location: titles, companies, locations, posting dates, salaries, full descriptions, and company details.

[Try LinkedIn Jobs API](https://scrape.ly/store/openrole/linkedin-jobs-scraper.md)

01 Integration

## Integrate LinkedIn Jobs API your way

Connect to Scrape.ly using Python, JavaScript, HTTP, cURL, OpenAPI, or MCP and start extracting LinkedIn Jobs data in minutes.

from scrapely_client import ScrapelyClient

client = ScrapelyClient ( 'YOUR_TOKEN' , api_url = 'https\://api.scrape.ly' )

run = client. actor ( 'openrole/linkedin-jobs-scraper' ) . call (

run_input = {

'keywords' : 'data engineer' ,

'location' : 'Berlin, Germany' ,

'datePosted' : 'pastWeek' ,

}

)

for item in client. dataset ( run.default_dataset_id ) . iterate_items () :

print ( item )

02 Input & Output

## Send a role and a location, get structured job listings

Pass keywords, locations, and posting dates into Scrape.ly. Get structured outputs with job titles and companies, locations and workplace types, salaries, posting dates and applicants, and full descriptions, and more.

Input

1 2 3 4 5

```
{
 "keywords":"data engineer",
 "location":"Berlin, Germany",
 "datePosted":"pastWeek"
}
```

Output

1 2 3 4 5 6 7 8 9 10

```
{
 "id":"4467979826",
 "title":"Senior Data Engineer (m/f/d)",
 "companyName":"A11",
 "location":"Berlin, Germany",
 "postedAt":"2026-10-14",
 "applicantsCount":"137",
 "employmentType":"Full-time",
 "link":"https://de.linkedin.com/jobs/view/senior-data-engineer-m-f-d-at-a11-4467979826?position=2&pageNum=0&refId=yajbes8RXcTLot6OjxZdMw%3D%3D&tr…"
}
```

Reference

## LinkedIn Jobs API reference

One request runs a LinkedIn job search and returns the jobs as JSON. Send LinkedIn job search URLs, or keywords and a location; everything else is optional.

### Endpoint

`POST https://api.scrape.ly/v2/actors/openrole~linkedin-jobs-scraper/run-sync-get-dataset-items`

Starts a run, waits up to 90 seconds and returns the dataset items. Add `?format=csv` for CSV. For longer jobs, start the run with `POST /v2/actors/{actorId}/runs` and read the dataset when it finishes. From $0.85 per 1,000 jobs.

```
curl -X POST "https://api.scrape.ly/v2/actors/openrole~linkedin-jobs-scraper/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $SCRAPELY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"keywords":"data engineer","location":"Berlin, Germany","datePosted":"pastWeek"}'
```

### Body parameters

| Name              | Type      | Description                                                                                                         |
| ----------------- | --------- | ------------------------------------------------------------------------------------------------------------------- |
| urls              | string\[] | LinkedIn job search URLs with your filters applied. When set, keywords, location and the filters below are ignored. |
| keywords          | string    | Job search keywords, used when no URLs are given.                                                                   |
| location          | string    | Location for the keyword search, for example “Berlin” or “United States”.                                           |
| limitPerSource    | integer   | Jobs per search (default 20). LinkedIn returns at most about 1,000 per search.                                      |
| datePosted        | enum      | anyTime (default), past24Hours, pastWeek or pastMonth.                                                              |
| distance          | integer   | Search radius in miles around the location.                                                                         |
| companyIds        | string\[] | LinkedIn numeric company IDs, for example "1441" for Google.                                                        |
| under10Applicants | boolean   | Only jobs with fewer than 10 applicants.                                                                            |
| geoId             | string    | A LinkedIn geoId for precise location targeting.                                                                    |
| splitByLocation   | boolean   | Split a country-wide search into one search per city (set splitCountry), to get past the 1,000-job cap.             |
| scrapeCompany     | boolean   | Add company details to each job (default true; slower).                                                             |

### Response fields

- id
- link
- title
- companyName
- location
- salaryInfo
- postedAt
- applicantsCount
- employmentType
- seniorityLevel
- workplaceTypes
- descriptionText
- companyWebsite
- companyEmployeesCount
- applyMethod

### Status codes

| Status | Type                                             | Meaning                                                                                                                                      |
| ------ | ------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------- |
| 200    | —                                                | The run succeeded. The body is the dataset items, a JSON array.                                                                              |
| 400    | run-failed                                       | The run ended in a status other than SUCCEEDED.                                                                                              |
| 401    | token-not-provided / token-not-valid             | No Authorization: Bearer header, or an unknown, expired or revoked token.                                                                    |
| 402    | payment-required                                 | The run cannot reserve enough credits.                                                                                                       |
| 408    | run-timeout-exceeded                             | The run did not finish within 90 seconds. It keeps going: wait with GET /v2/actor-runs/{runId}?waitForFinish=60 instead of starting another. |
| 429    | rate-limit-exceeded / concurrency-limit-exceeded | Too many requests or concurrent runs. Retry with exponential backoff.                                                                        |

Full details in the [Actors API docs](https://scrape.ly/docs/api-actors.md).

03 How it works

## Start extracting LinkedIn Jobs data in four simple steps

Scrape.ly keeps the setup simple so you can move from signup to live LinkedIn Jobs data without wasting time on scraping infrastructure.

[Get started for free](https://my.scrape.ly/register)

Step 1

### Create your Scrape.ly account

Create your account and get access to ready-made APIs, scrapers, and automation tools.

Step 2

### Get your Scrape.ly API token

Copy your API token from the Scrape.ly dashboard and use it to authenticate your requests.

Step 3

### Connect LinkedIn Jobs API

Choose Python, JavaScript, HTTP, or MCP and connect Scrape.ly to your app or workflow.

Step 4

### Fetch LinkedIn Jobs data

Send your keywords, locations, and posting dates, then receive clean structured data ready for analysis.

04 Why Scrape.ly

## Everything you need to extract data reliably

Scrape.ly gives you ready-made APIs, proxy support, monitoring, exports, integrations, and scalable infrastructure in one platform.

### Never Get Blocked

Use built-in proxy support to reduce blocks, rate limits, and failed requests.

### Export Any Format

Get results in JSON, CSV, Excel, XML, HTML table, RSS, or other workflow-friendly formats.

### Monitor Every Run

Track scraper status, performance, failures, retries, and outputs from one dashboard.

### Built-In Integrations

Connect with webhooks, APIs, automation tools, cloud apps, and internal systems.

### Scalable Infrastructure

Run small tests or high-volume extraction jobs without rebuilding your scraping stack.

### Developer-Friendly

Use clean APIs, SDKs, docs, examples, and structured outputs built for real workflows.

05 AI-Ready Data

## Feed LinkedIn Jobs data into your tools instantly

Connect Scrape.ly with your apps, dashboards, sheets, agents, and automation workflows to turn LinkedIn Jobs data into action.

[Browse integrations](https://scrape.ly/integrations.md) [API Reference](https://scrape.ly/docs/api-overview.md)

![AI-ready data workflow illustration](https://scrape.ly/assets/pages/api/ai-ready-data/ai-ready.svg)

[7 ready-made scrapers All LinkedIn scrapers on one page Real output, live prices per 1,000 results, and how to run each one. See them](https://scrape.ly/scrapers/linkedin.md)

06 Explore APIs

## More LinkedIn Jobs APIs on Scrape.ly

Browse ready-made LinkedIn Jobs scrapers and APIs available inside Scrape.ly and choose the one that fits your workflow.

![LinkedIn Jobs Scraper logo](https://scrape.ly/cdn-cgi/image/width=132,fit=scale-down,format=auto/https://api.scrape.ly/v2/actors/325c402eaa7249248/picture.webp?v=d90c2bfa89b6ff567ee34e066d9fdb70)

### [LinkedIn Jobs Scraper](https://scrape.ly/store/openrole/linkedin-jobs-scraper.md)

scrape.ly/store/openrole/linkedin-jobs-scraper

---

[Openrole](https://scrape.ly/users/openrole.md "Developed by Openrole")

Jobs Lead generation

---

1.1K monthly users

[Try for free](https://my.scrape.ly/store/openrole~linkedin-jobs-scraper?intent=signup)

### Check other related APIs

[View all](https://scrape.ly/api.md)

[LinkedIn Profile API](https://scrape.ly/api/linkedin-profile-api.md)

[LinkedIn Company API](https://scrape.ly/api/linkedin-company-api.md)

[Indeed API](https://scrape.ly/api/indeed-api.md)

[Glassdoor API](https://scrape.ly/api/glassdoor-api.md)

[Upwork API](https://scrape.ly/api/upwork-api.md)

[Trustpilot API](https://scrape.ly/api/trustpilot-api.md)

07 FAQ

## Common questions about LinkedIn Jobs API

Quick answers about using Scrape.ly's LinkedIn Jobs API, available data, setup, and legal usage.

Got more questions? [Reach out to us](mailto:hello@scrape.ly?subject=LinkedIn%20Jobs%20API%20question\&body=I%20have%20a%20question%20about%20the%20LinkedIn%20Jobs%20API.)

### How is this different from an official LinkedIn Jobs API?

---

Official APIs, where they exist, usually need approval, keys, or paid tiers and limit which public data you can pull. Scrape.ly's LinkedIn Jobs API collects the public data shown on LinkedIn Jobs and returns it as structured JSON, with no approval process.

### Can I try the LinkedIn Jobs API for free?

### What data can I get from the LinkedIn Jobs API?

### Is it legal to scrape LinkedIn Jobs data?

### How do I get started with the LinkedIn Jobs API?

G2

4.7/5

[Excellent](https://www.trustpilot.com/review/scrape.ly)

[Trustpilot](https://www.trustpilot.com/review/scrape.ly)

## The internet is full of data. Start owning yours.

Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes.

[Get Started Free](https://my.scrape.ly/register) [Chat with Support](mailto:hello@scrape.ly?subject=Question%20about%20Scrape.ly\&body=Hi%2C%20I%20have%20a%20question%20about%20Scrape.ly.)

No credit card. No setup calls.
