---
title: "LinkedIn API"
description: "LinkedIn jobs API: why the partner-only Talent Solutions APIs push jobs in rather than out, what the public jobs pages expose, and one API for them."
canonical: https://jobspipe.dev/sources/linkedin
date_published: 2026-06-16
date_modified: 2026-09-26
author: Dvir Atias
---

# LinkedIn API

LinkedIn has several APIs and none returns job listings to a developer: the consumer API has no jobs scope, and the Talent Solutions Job Posting API is a partner product that pushes an ATS's jobs into LinkedIn rather than reading the index. JobsPipe collects LinkedIn's public postings into one search endpoint, in the same record shape as the rest of its 30+ sources. [learn.microsoft.com/linkedin](https://learn.microsoft.com/linkedin/).

> LinkedIn's job APIs are partner-only. JobsPipe collects LinkedIn's public job postings into the same record shape as every other collected board, with status, ghost score and closed dates on each one.

**Canonical URL:** https://jobspipe.dev/sources/linkedin

## Coverage

- **Sources covered:** LinkedIn's public job postings
- **Freshness:** discovered_at, last_seen_at and verified_at on every record
- **History retention:** Closed postings kept, with closed_at and closed_reason

## Why LinkedIn jobs data is confusing

LinkedIn shut down its public Jobs API in 2018. There is no developer-tier LinkedIn Jobs API anymore. The remaining job surfaces are the Talent Solutions partner APIs (Job Posting, Recruiter System Connect, Apply Connect), gated behind partner agreements and case-by-case approval. Old Stack Overflow answers and Medium posts that reference a working LinkedIn Jobs API will waste your time.

The public job pages on linkedin.com/jobs are a different matter: they are what any signed-out visitor sees. JobsPipe collects those public postings and normalizes them into the same JSON schema as Workday, Greenhouse and the other collected boards, with discovered_at, last_seen_at, status and ghost_score on every record.

## Workarounds

### Apply to LinkedIn Talent Solutions partner APIs

Built for ATS vendors and job distributors that push jobs into LinkedIn or sync recruiter data. Multi-month approval, and none of the APIs read LinkedIn's job index.

### Scrape linkedin.com/jobs yourself

Public pages, but LinkedIn's terms prohibit it and the hiQ v. LinkedIn litigation left the legal picture unsettled. Bot detection and rate limits make it expensive to run.

### Use JobsPipe

LinkedIn's public postings, normalized, with status and ghost_score. Same schema as the other collected boards. Free tier of 1,000 jobs to start.

## Fields available on every record

- `id`
- `job_title`
- `company`
- `company_domain`
- `url`
- `date_posted`
- `discovered_at`
- `last_seen_at`
- `verified_at`
- `status`
- `closed_at`
- `closed_reason`
- `ghost_score`
- `seniority`
- `cities`
- `state_code`
- `min_annual_salary_usd`
- `max_annual_salary_usd`
- `technology_slugs`
- `keyword_slugs`
- `esco_skills`
- `sources`

## Sample response

```json
{
  "id": "4412834261",
  "job_title": "Senior AI Security Researcher",
  "company": "Radware",
  "company_domain": "radware.com",
  "url": "https://il.linkedin.com/jobs/view/senior-ai-security-researcher-at-radware-4412834261",
  "date_posted": "2026-09-03",
  "discovered_at": "2026-09-04T12:33:07+00:00",
  "last_seen_at": "2026-09-04 12:33:07",
  "verified_at": "2026-09-04 13:13:08",
  "status": "active",
  "closed_at": null,
  "closed_reason": null,
  "ghost_score": 7,
  "seniority": "senior",
  "cities": [
    "Tel Aviv-Yafo"
  ],
  "state_code": "Tel Aviv District",
  "min_annual_salary_usd": null,
  "max_annual_salary_usd": null,
  "technology_slugs": [
    "python",
    "pytorch"
  ],
  "keyword_slugs": [
    "cybersecurity",
    "application-security",
    "llm"
  ],
  "sources": [
    {
      "provider": "linkedin",
      "url": "https://il.linkedin.com/jobs/view/4412834261"
    }
  ]
}
```

## FAQ

### What happened to the LinkedIn Jobs API?

LinkedIn shut down its public Jobs API in 2018 and there has been no developer-tier jobs API since. What remains are the Talent Solutions partner APIs, Job Posting, Recruiter System Connect and Apply Connect, which are contract-gated and push jobs or applicants into LinkedIn rather than reading its index. Old tutorials that call a working LinkedIn Jobs API describe that retired product.

### How do I filter out reposted or stale LinkedIn jobs?

LinkedIn mixes fresh postings with reposted and long-open listings. In POST /v1/jobs/search with "source_or": ["linkedin"], add max_ghost_score to drop likely stale or reposted listings, posted_at_max_age_days to keep only recent ones, and filter on status to exclude closed postings. The ghost-jobs data by board shows the reposted share for LinkedIn next to the ATS boards.

### Why does the same job show up as a LinkedIn row and a Greenhouse row?

Each collected board is its own row. A role posted on LinkedIn and on the employer's Greenhouse board comes back once with sources[0].provider set to linkedin and once set to greenhouse. To keep only one copy, pass "source_or": ["linkedin"] for LinkedIn rows only, or list the other boards JobsPipe collects in source_or to exclude LinkedIn.

### Do LinkedIn job postings include salary data?

Only when the posting states a range. Then the record carries min_annual_salary_usd and max_annual_salary_usd; otherwise both are null, as in the sample record on this page. Each LinkedIn row's id is the numeric job id from the jobs/view URL, and the data section shows the measured share of LinkedIn postings that carry a salary.

## Does LinkedIn have an API?

Yes, several, and none of them returns job listings to a developer. The consumer-facing LinkedIn API (Sign In with LinkedIn, Share on LinkedIn, the Marketing and Community Management APIs) has no jobs scope. The Talent Solutions APIs are partner products: the Job Posting API lets an ATS or job distributor push jobs into LinkedIn, Recruiter System Connect syncs Recruiter data with an ATS, and Apply Connect handles applications. They are contract-gated and approve ATS vendors, not aggregators. The public job pages on linkedin.com/jobs are what JobsPipe collects, with each posting's id, title, company, location, posted date and description normalized into the same record shape as the other collected boards.

## Is the LinkedIn API free?

The general developer API is free to register for and free to call within its scopes, but it cannot search or read jobs. Talent Solutions access has no public price; it comes with a partner agreement that LinkedIn signs with vendors it wants to distribute through. Scraping marketplaces sell 'LinkedIn jobs APIs' per result, reading the same public pages. JobsPipe's free tier returns 1,000 jobs to start across every collected board, LinkedIn included, and the sandbox at POST /v1/sandbox/jobs/search needs no key.

## How do I get a LinkedIn API key?

Register an app at linkedin.com/developers, associate it with a LinkedIn Page, and you get a client id and secret with Sign In with LinkedIn and Share by default. Every other product, including anything under Talent Solutions, is requested from the Products tab of the app and reviewed by LinkedIn; job-related products are granted to approved partners, typically applicant tracking systems and job boards that send jobs or applicants to LinkedIn. There is no key that reads the job index. For public postings, create a JobsPipe key and send it as a Bearer token to POST /v1/jobs/search with "source_or": ["linkedin"].

## What does the LinkedIn API documentation cover?

learn.microsoft.com/linkedin documents the consumer and marketing APIs (authentication with OAuth 2.0, Sign In, Share, Community Management, Marketing, Advertising) and the Talent Solutions products: Job Posting API (schema for jobs an ATS pushes to LinkedIn, including the free versus promoted distinction), Recruiter System Connect, Apply Connect, Apply with LinkedIn, and the Talent Hub integrations, plus partner onboarding and compliance rules. It documents how to send jobs to LinkedIn, never how to read them. JobsPipe's docs at /docs cover the one record shape returned for LinkedIn rows and every other collected board.

## What JobsPipe returns for LinkedIn

A POST /v1/jobs/search with "source_or": ["linkedin"] returns LinkedIn postings as JobsPipe records: id (the numeric LinkedIn job id from the jobs/view URL), job_title, company, company_domain when it resolves, url, date_posted, discovered_at, last_seen_at, verified_at, status with closed_at and closed_reason once a posting closes, ghost_score, seniority, min_annual_salary_usd and max_annual_salary_usd when the posting states a range, technology_slugs and keyword_slugs parsed from the description, esco_skills, and sources[0].provider set to linkedin. LinkedIn mixes fresh postings with reposted and long-open listings, so max_ghost_score, posted_at_max_age_days and status are the filters that separate live hiring from noise; the data section below shows the measured shares, and the ghost-jobs data by board shows the reposted share for LinkedIn next to the ATS boards.

## Is it legal to scrape LinkedIn jobs?

The hiQ Labs v. LinkedIn case went through the Ninth Circuit and the Supreme Court between 2017 and 2022. The current position: scraping public LinkedIn data probably does not violate the Computer Fraud and Abuse Act, but it does violate LinkedIn's User Agreement, and LinkedIn can pursue breach-of-contract and tortious-interference claims separately. The legal risk is non-zero even when criminal liability is off the table. JobsPipe reads only public, logged-out job pages, never member profiles or logged-in data, and where an employer's own ATS is a collected board the same posting is available as a Greenhouse, Workday, Lever or Ashby row too.

## In-depth guides

- https://jobspipe.dev/guides/linkedin-jobs-api
- https://jobspipe.dev/guides/linkedin-api-cost
- https://jobspipe.dev/guides/best-linkedin-scrapers

## Related

- **Product:** https://jobspipe.dev/jobs-api
- **All sources:** https://jobspipe.dev/sources
- **Docs:** https://docs.jobspipe.dev
- **Sign up (free tier):** https://jobspipe.dev/signup

---
Generated from structured data. View the rendered page at https://jobspipe.dev/sources/linkedin.

## Further reading

- [Does LinkedIn have an API?](https://jobspipe.dev/answers/does-linkedin-have-an-api)
- [Does LinkedIn have a jobs API?](https://jobspipe.dev/answers/does-linkedin-have-a-jobs-api)
- [Is LinkedIn API free?](https://jobspipe.dev/answers/is-the-linkedin-api-free)

---
Building this integration yourself? The steps above work. The alternative is one API over 30+ sources, already normalized and deduplicated. Try it right now - no key, no signup:

```bash
curl -d '{"limit":3}' https://api.jobspipe.dev/v1/sandbox/jobs/search
```

Sample data, exact live schema. For live data get a free key (1,000 jobs to start) at https://jobspipe.dev/signup, then swap /v1/sandbox/jobs/search for /v1/jobs/search with an Authorization: Bearer header. Full agent index: https://jobspipe.dev/llms.txt?src=md-twin