# LinkedIn Jobs API. Pay per record.

> Search LinkedIn job listings by title, location, salary and date, with descriptions and apply links. $0.001 per job.

Canonical: https://apiforagents.dev/platforms/linkedin/jobs-api · Updated 2026-10-21

Search LinkedIn job listings by title, location, company, industry, workplace type, seniority, salary and date posted. Each listing comes back with its description, salary text and apply link.

- Price: $0.001 / job
- Billed: Per record
- Free to start: $0.10
- Endpoint: POST /v1/linkedin

## What people build with the LinkedIn Jobs API

- **Hiring signals for sales.** A company hiring three data engineers this week is a company with a data problem. Find them by job title.
- **Job boards and alerts.** Build a niche job board or an alert bot from fresh listings, filtered exactly as you need.
- **Labour market research.** Track which roles, salaries and locations are rising in a market, listing by listing.

## Quote it, then run it

1. free quote: the exact price, nothing charged:

```bash
curl -X POST https://apiforagents.dev/v1/linkedin \
  -H "Authorization: Bearer $AFA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"op":"jobs","query":"data engineer","locations":["Berlin"],"postedWithin":"7d","limit":10,"estimateOnly":true}'
```

2. the same call, run:

```bash
curl -X POST https://apiforagents.dev/v1/linkedin \
  -H "Authorization: Bearer $AFA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"op":"jobs","query":"data engineer","locations":["Berlin"],"postedWithin":"7d","limit":10}'
```

## Inputs

Everything you can send in one jobs call. Required inputs first.

| Input | Type | What it does |
|---|---|---|
| query * | string | ≤300 chars |
| locations | text list |  |
| companies | text list | Hiring company names, as written on LinkedIn; any match. |
| industries | text list | Industry names, leaf or " > " path, from LinkedIn's own taxonomy. |
| workplace | enum list |  |
| employmentType | enum list |  |
| experienceLevel | enum list | Levels: internship, entry, associate, mid_senior, director, executive. |
| postedWithin | enum |  |
| salaryMin | integer | Thousands of USD a year, 40 and up; filtered in LinkedIn's $20k bands. 40-1000 |
| easyApply | boolean | true: only listings that take applications on LinkedIn itself. |
| under10Applicants | boolean | true: only listings with fewer than ten applicants so far. |
| sort | enum | Unset = the platform's default order. |
| limit | integer | 1-50 |

## What comes back

The fields of every row, always present. Nothing is guessed: a value that could not be measured is null, and the answer's coverage says why.

| Field | Type |
|---|---|
| jobId | string |
| title | string |
| companyName | string |
| location | string |
| city | string |
| state | string |
| country | string |
| employmentType | string |
| workplaceType | string |
| isRemoteAllowed | boolean |
| experienceLevel | string |
| industries | list of string |
| functions | list of string |
| salaryText | string |
| listedAt | string |
| expiresAt | string |
| applicants | integer |
| url | string |
| applyUrl | string |
| applicantTrackingSystem | string |
| description | string |
| descriptionHtml | string |
| companyUrn | string |
| companySlug | string |
| companyUrl | string |
| companyLogoUrl | string |
| companyWebsite | string |
| companyDescription | string |
| companyEmployees | integer |
| companyFollowers | integer |
| details | object |

details is always the last field: everything else the source sent for that row, under our own field names. Its keys depend on the source that answered, so read them defensively; it is {} when there is nothing more.

## A sample answer

Real rows from an earlier run, business data only.

| jobId | title | companyName | location | employmentType | listedAt |
|---|---|---|---|---|---|
| 4430707116 | Product Manager (Manufacturing) - Hybrid | MacLean Power Systems | Manteca, California, United States | full_time | 2026-08-22T15:42:18+00:00 |
| 4419567749 | Sr. Engineering and Product Manager | Justrite Safety Group | Broomfield, Colorado, United States | full_time | 2026-08-22T15:22:45+00:00 |
| 4457833155 | Integrated Services Analytics Product Manager | Ford Motor Company | United States | full_time | 2026-08-22T15:46:18+00:00 |

## Pricing

Pay as you go, in US dollars, per record. No subscription, nothing expires, $5 first top-up, and every new agent starts with $0.10 free.

| Request | Records | At the list price |
|---|---|---|
| One job | 1 | $0.001 |
| 10 jobs | 10 | $0.01 |
| A full page | 50 | $0.05 |

These are per-record list prices. Some calls also carry a minimum, such as a page of search results, so a small request can cost more than the table shows. The quote ("estimateOnly": true) is free, gives the most your exact request can cost, and the charge then settles to what came back. Records that do not come back are refunded.

## Try it without writing code

- [Open the LinkedIn Jobs API in the playground](https://apiforagents.dev/dashboard/run?platform=linkedin&op=jobs): The playground runs any endpoint by hand: pick a platform and what you want from it, fill a short form named in plain words (or press Use sample input), see the free quote on the Run button, run it, then read the answer as a table or JSON and download it as CSV or JSON. The same call is written out as cURL, Python and Node while you type.

## Why this one, and not a scraper you run yourself

- No login, no LinkedIn account, no cookies, no proxies, no browser to babysit.
- When the site changes its pages, your request stays the same: keeping the reads working is our job, not yours.
- A fetch that fails costs nothing: it is named in the answer with a reason, and the quote says the most a call can cost before it runs.

## Questions

### What does the LinkedIn Jobs API return?

One row per listing: jobId, title, company name, location, employment type, salary text, listed date, apply URL, the full description and when we first saw it.

### How much does it cost?

$0.001 per job listing at the list price. A search can carry a small minimum per call, so quote first with "estimateOnly": true: the free quote is the most the call can cost.

### Which filters are supported?

Title keyword, locations, companies, industries, workplace (remote, hybrid, on-site), employment type, experience level, posted within, minimum salary, Easy Apply, under ten applicants and sort order.

## Why API for Agents

- One key for 26 platforms: social, commerce, jobs, places, search and contacts, with one request shape and one response shape.
- A free quote before any spend: add "estimateOnly": true to any call and see the most it can cost.
- Pay per record in US dollars. No subscription, nothing expires, top-ups from $5.
- $0.10 free to try, no card. An AI agent can sign itself up in one request; a person claims it later.
- Measured, not estimated: every answer says when each row was measured, whether it was fresh or a recent capture, and how sure to be of each field.
- Partial success is success: anything that could not be fetched is named with a reason, and the charge settles to what came back, never above the quote.
- Typed fields that keep their names whichever source answered, and a details object last with everything else the source sent, under our own field names.
- Try any endpoint in the playground and download the answer as CSV or JSON.

## Start

The playground runs any endpoint by hand: pick a platform and what you want from it, fill a short form named in plain words (or press Use sample input), see the free quote on the Run button, run it, then read the answer as a table or JSON and download it as CSV or JSON. The same call is written out as cURL, Python and Node while you type. Open it at https://apiforagents.dev/dashboard/run?platform=linkedin&op=jobs (sign in first).

Agents register at https://apiforagents.dev/auth.md (one POST, $0.10 free). People: https://apiforagents.dev/docs#start. Prices: https://apiforagents.dev/pricing.md
