# LinkedIn jobs API — $0.001 per job

> LinkedIn jobs API: Public LinkedIn job listings for a role and location. $0.001 per delivered job, nothing delivered means nothing charged. Pay per row, $2 free

[Home](https://quanticdata.io/)/[Collectors](https://quanticdata.io/collectors/)/*LinkedIn jobs API*

# LinkedIn jobs API

A LinkedIn jobs API that returns public listings for a role and a location: title, company, location, posting date, salary chip, benefits and the listing URL — with remote-only and posted-within filters, and no login.

[Get my free API key](https://app.quanticdata.io/register) [See the request](/collectors/linkedin-jobs-api/#integration)

$0.001 per delivered job · $2 free every month · Failed runs never billed

POST /v1/scraper/collectors/linkedin_jobs/run

```
$ curl $QD/linkedin_jobs/run \
    -H "Authorization: Bearer $QD_API_KEY" \
    -d '{"query": "data engineer", "location": "United States", "max_results": 50}'
{ "status": "done", "count": 50,
  "results": [
    {
      "title": "…",
      "company": "…",
      "company_url": "…",
      "location": "…" } ],
  "cost": 0.05 }
# 50 jobs × $0.001 · nothing delivered, nothing charged
```

**$0.001 / job**2,000 jobs on the free $2 every month

**Semantic input**query, location, remote_only — no URL lists

**Up to 300**jobs per run, pagination handled for you

**No browser**read over HTTP/TLS — cheaper and faster than rendering

On this page: [What it is](/collectors/linkedin-jobs-api/#what) [Output fields](/collectors/linkedin-jobs-api/#output) [Inputs](/collectors/linkedin-jobs-api/#input) [Pricing](/collectors/linkedin-jobs-api/#pricing) [Integration](/collectors/linkedin-jobs-api/#integration) [Use cases](/collectors/linkedin-jobs-api/#use-cases) [Versus the alternatives](/collectors/linkedin-jobs-api/#compare) [FAQ](/collectors/linkedin-jobs-api/#faq)

## What a LinkedIn jobs API does

LinkedIn's logged-out job search calls a guest endpoint for its infinite scroll, and that endpoint serves plain listing cards to anyone. This collector reads it directly: ten cards a request, paginated to the volume you ask for, deduplicated by LinkedIn's own job id.

Everything here is public data. No cookie, no account, no session replay — which also means the run does not depend on a login that expires halfway through your backfill.

Input is meaning, not a URL *query* *location* *remote_only* *posted_within_days* *country*

## What one job looks like

Every delivered job carries these fields. Nullable means the source did not publish it — the field stays empty instead of being guessed.

| Field | Type | What it holds |
| --- | --- | --- |
| `rank` | integer | 1-based position across pages. |
| `title` | string | Job title. |
| `company` | string · nullable | Employer. |
| `company_url` | string · nullable | Employer's LinkedIn page. |
| `location` | string · nullable | Location as shown. |
| `posted_at` | string · nullable | Posting date (ISO, from the card's <time>). |
| `posted_label` | string · nullable | Posting age as shown ("2 weeks ago"). |
| `salary` | string · nullable | Salary chip when LinkedIn shows one. |
| `benefits` | string · nullable | Benefits chip when shown. |
| `job_id` | string · nullable | LinkedIn job id (dedupe key). |
| `link` | string · nullable | Listing URL. |
| `logo` | string · nullable | Company logo URL. |

## Inputs

The whole request. Anything you leave out falls back to the default shown in the catalog.

| Input | Type | Required | What it does |
| --- | --- | --- | --- |
| `query` | string | yes | Job title or keywords, e.g. "data engineer". |
| `location` | string | no | City, region or country, e.g. "New York" or "Italy". |
| `remote_only` | boolean | no | Only listings LinkedIn marks as remote. |
| `posted_within_days` | integer | no | Only listings posted in the last N days (1–30). |
| `country` | string | no | ISO 3166-1 alpha-2 code — proxy exit geo and Google locale (gl). Omit for the default pool. |
| `max_results` | integer | no | How many jobs to deliver at most (1–300). You pay only for delivered jobs. |

Pricing

## LinkedIn jobs API pricing

$0.001 per delivered job. A run that delivers nothing costs nothing: blocked pages, challenges and retries are on us, and the $2 monthly allowance covers about 2,000 jobs before you spend anything.

**$0.001**per delivered job*$1 per 1,000 delivered jobs*

**2,000 jobs**on the free allowance*$2 every month, no card*

**Zero rows**zero charge*blocks, captchas and retries are on us*

**−30%**on volume tiers*the catalog returns your key's price*

### Pay as you go

$0/mo

- $2 free credit / month

- 60 requests / min

- List unit prices

### Starter

$19/mo

- $15 free credit / month

- 300 requests / min

- 10% off unit prices

Most popular

### Growth

$79/mo

- $50 free credit / month

- 600 requests / min

- 20% off unit prices

### Scale

$299/mo

- $250 free credit / month

- 1,200 requests / min

- 30% off unit prices

Same wallet, same key and same $2 monthly allowance as every other [Data API](https://quanticdata.io/web-data-api-for-ai/). Prices are launch pricing read live from the billing config — `GET /v1/scraper/collectors` returns the price your key actually pays.

Integration

## One POST, typed rows

Base URL `https://api.quanticdata.io/v1`, Bearer auth, the same key as every other Data API. Endpoint: `POST /v1/scraper/collectors/linkedin_jobs/run`.

```
curl -X POST https://api.quanticdata.io/v1/scraper/collectors/linkedin_jobs/run \
  -H "Authorization: Bearer $QD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query":"data engineer","location":"United States","max_results":50}'
```

```
import requests

r = requests.post(
    "https://api.quanticdata.io/v1/scraper/collectors/linkedin_jobs/run",
    headers={"Authorization": f"Bearer {QD_API_KEY}"},
    json={
        "query": "data engineer",
        "location": "United States",
        "max_results": 50
    },
    timeout=120,
)
for row in r.json()["payload"]["results"]:
    print(row)
```

```
const res = await fetch(
  "https://api.quanticdata.io/v1/scraper/collectors/linkedin_jobs/run",
  {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.QD_API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({"query":"data engineer","location":"United States","max_results":50}),
  },
);
const { payload } = await res.json();
console.table(payload.results);
```

```
claude mcp add quantumproxies \
  -e QUANTUMPROXIES_API_KEY=qd_live_your_key_here \
  -- npx -y quantumproxies-mcp

# then, in the chat:
> run the linkedin_jobs collector with query="data engineer" and location="United States"
```

## What people build with the LinkedIn jobs API

Three shapes of work this endpoint was designed around.

### Hiring signals

Watch which competitors are staffing which functions, and how fast.

### Job boards and aggregators

Fill a vertical board with fresh listings, filtered by role and geography.

### Salary benchmarking

Collect the salary chips LinkedIn publishes for a role across markets.

## LinkedIn jobs API versus rolling your own

The differences that actually cost time when you build this in-house.

|  | DIY scraper | This collector |
| --- | --- | --- |
| Auth | Account cookie, ban risk | Public guest endpoint |
| Freshness filter | Post-filter after download | posted_within_days sent to LinkedIn |

## Partner programmes, or the public listings

LinkedIn's job APIs live inside Talent Solutions and Job Posting partner programmes: an approved partnership, a signed agreement and a business case LinkedIn agrees with. They exist so applicant tracking systems can post jobs into LinkedIn, not so anyone can read the job market. There is no self-serve tier.

This reads the logged-out guest endpoint — the same paginated surface LinkedIn's own signed-out infinite scroll calls. It is a narrower dataset than a session-based scraper claims and it is one that can run on a schedule without an account behind it that can be restricted.

## Limits, freshness and the legal bit

Up to 300 jobs per run, paginated internally ten cards at a time. `remote_only` and `posted_within_days` filter at the source, so a freshness-constrained sweep costs less rather than the same. Throughput is your plan's rate limit rather than anything about the collector: 60 requests/minute on pay-as-you-go, up to 1,200 on the top tier.

`salary` is frequently null because most LinkedIn listings do not publish pay. Record the null rate as a statistic about the market rather than treating it as missing data — it is one of the more interesting things the dataset says.

US courts have repeatedly declined to treat scraping publicly accessible pages as unauthorised access under the CFAA. LinkedIn's terms still prohibit automated collection, the analysis differs outside the US, and listings can name individual recruiters, which is personal data. None of this is legal advice — get some for your actual use case.

## FAQ

Questions we get about the LinkedIn jobs API.

[Something else? Ask us →](mailto:hello@quanticdata.io)

### Can I restrict to remote roles?

Yes — `remote_only` maps to LinkedIn's own remote filter, and `posted_within_days` to its freshness filter.

### Do all listings have a salary?

No. LinkedIn shows a salary chip only when the employer provides one; the field is null otherwise. For structured ranges, [Indeed](https://quanticdata.io/collectors/indeed-jobs-api/) publishes min, max and period.

### How many listings per run?

Up to 300, ten per request, deduplicated by job id.

### Is there a free LinkedIn jobs API?

Every account gets $2 of credit every month with no card, which is about 2,000 delivered jobs on this endpoint at $0.001 each. It renews monthly, and a run that delivers nothing is never billed — so a failed or blocked attempt does not eat the allowance.

### How much does one run cost?

Multiply the rows you actually receive by $0.001. A run capped at 300 jobs — the maximum for this collector — costs $0.3 if every row comes back, and less when the source has fewer. Volume tiers take up to 30% off, and `GET /v1/scraper/collectors` returns the price your key actually pays.

### How do I deduplicate across daily runs?

On job_id, which is stable. Employers repost and the same role surfaces across sweeps, so counting titles overstates demand — a set operation on ids does not.

### Why does it avoid logging in?

Because session-based LinkedIn scrapers get accounts restricted, and on LinkedIn that can mean losing a real person's professional identity. Reading only the guest surface keeps the pipeline schedulable.

## Run the LinkedIn jobs API now

$2 of free credit every month, no card. Your key returns its own prices from `GET /v1/scraper/collectors`.

[Get my free API key](https://app.quanticdata.io/register)

Related: [All 32 collectors](https://quanticdata.io/collectors/) [Indeed jobs API](https://quanticdata.io/collectors/indeed-jobs-api/) [Google Jobs API](https://quanticdata.io/collectors/google-jobs-api/) [LinkedIn company scraper API](https://quanticdata.io/collectors/linkedin-company-scraper-api/) [Documentation](https://quanticdata.io/docs/)

---

Source: https://quanticdata.io/collectors/linkedin-jobs-api/ · Site index for AI: https://quanticdata.io/llms.txt
