# LinkedIn Jobs API for public job search and postings

> Search LinkedIn’s public job listings by keyword, place, company and posting date, then open any posting for its pay range, criteria and full description. Public job data only, as JSON, priced per call.

Canonical page: https://scrapercompany.com/linkedin-jobs-api. Endpoints and prices checked against the API on 2026-10-11.

LinkedIn is where many employers post a role first, so its job listings are a common source for hiring signals, recruiting tools and labour-market research. LinkedIn’s own job APIs are for approved partners that post jobs, not for reading other companies’ listings. This API reads LinkedIn’s public job search and posting pages, the ones a signed-out visitor sees, and returns them as JSON.

Signed-out search honours only some filters: keywords, place, distance, posting age, company, Easy Apply and under 10 applicants. LinkedIn ignores job type, experience level, remote or hybrid and date sorting for signed-out visitors, so the API refuses those instead of returning an unfiltered list. Search cards carry the posting date and LinkedIn’s badges but no salary; the posting endpoint adds the pay range when the poster shows one, the job criteria, the applicant count and the full description. Member profiles, company pages and anything behind a login are not covered.

## What you get

- `job_id`: LinkedIn’s numeric posting id, from a search card or a job link
- `title, company, location`: as LinkedIn prints them, with the company’s LinkedIn page and logo
- `posted_at, posted`: the posting date from the search card and LinkedIn’s relative age, such as “3 weeks ago”
- `insights[]`: LinkedIn’s badges word for word, such as “Actively Hiring” or “Be an early applicant”
- `salary, salary_label`: the pay range and who provided it, when the poster shows one (posting endpoint)
- `seniority_level, employment_type, industries`: the job criteria LinkedIn lists on the posting
- `applicants, easy_apply, closed`: applicant count text, Easy Apply or apply on the company site, and whether it still takes applications
- `description, description_html`: the full job description as plain text and as safe HTML with every attribute removed

## Endpoints and price per call

| Endpoint | Method and path | What it returns | Credits per successful call | Price per call |
| --- | --- | --- | --- | --- |
| [Job search](https://scrapercompany.com/docs/reference/linkedin-jobs) | `POST /v1/linkedin/jobs` | One page of up to 10 job cards for keywords and a place, with date, company and Easy Apply filters | 2 credits | $0.0020 on Starter, $0.0012 on Growth, $0.0008 on Scale |
| [Job posting](https://scrapercompany.com/docs/reference/linkedin-job) | `POST /v1/linkedin/job` | One posting by id or link: criteria, pay range, applicants and full description | 2 credits | $0.0020 on Starter, $0.0012 on Growth, $0.0008 on Scale |

Pricing: Free $0/month for 1,000 credits; Starter $49/month for 50,000 credits; Growth $149/month for 250,000 credits; Scale $399/month for 1,000,000 credits. Failed requests (4xx or 5xx) and empty results cost 0 credits. Free during the beta. https://scrapercompany.com/pricing

## Example

`POST /v1/linkedin/jobs`, 2 credits per successful call.

```bash
curl -X POST "https://api.scrapercompany.com/v1/linkedin/jobs" \
  -H "x-api-key: $SCRAPERCOMPANY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
```

Response (trimmed):

```json
{
  "search_parameters": {
    "engine": "linkedin_jobs",
    "keywords": "python developer",
    "location": "United States",
    "page": 1,
    "easy_apply": true
  },
  "jobs_results": [
    {
      "job_id": "4458251161",
      "title": "Software Engineer, Backend (Partner 16, Partner 18)",
      "company": "Andreessen Horowitz",
      "company_url": "https://www.linkedin.com/company/a16z",
      "company_logo": "https://media.licdn.com/dms/image/v2/D560BAQFs3wvS2NM10g/company-logo_100_100/B56ZaiHxu.GoAc-/0/1746476670161/a16z_logo?e=2147483647&v=beta&t=sAyMO5tlSPsBt9wWt2LdOR6xDalxk5hlNiUZWZRm0xQ",
      "location": "San Francisco, CA",
      "posted_at": "2029-03-12",
      "posted": "17 hours ago",
      "insights": [
        "Actively Hiring"
      ],
      "link": "https://www.linkedin.com/jobs/view/4458251161/"
    },
    {
      "job_id": "4464227292",
      "title": "Python Developer",
      "company": "Synechron",
      "company_url": "https://www.linkedin.com/company/synechron",
      "company_logo": "https://media.licdn.com/dms/image/v2/D4E0BAQGU3XDmI-XtZg/company-logo_100_100/B4EZbozLqWHcAU-/0/1747662453848/synechron_logo?e=2147483647&v=beta&t=967JcOKqVUEfAxo-JLDXVLacACGsfj3Itpkbmqz1HrA",
      "location": "Jersey City, NJ",
      "posted_at": "2029-02-15",
      "posted": "3 weeks ago",
      "insights": [
        "Actively Hiring +8 benefits"
      ],
      "link": "https://www.linkedin.com/jobs/view/4464227292/"
    }
  ],
  "total": 2,
  "next_page": 2,
  "meta": {
    "source": "linkedin",
    "wire_bytes": 30971,
    "elapsed_s": 0.47
  }
}
```

## FAQ

### Does LinkedIn have a public jobs API?

Not for reading job postings. LinkedIn’s Job Posting API and its other Talent Solutions APIs are for approved partners, such as applicant-tracking systems and job distributors, that post jobs to LinkedIn or sync candidates. This API is independent of LinkedIn and returns the job listings LinkedIn shows to signed-out visitors.

### Does it return LinkedIn profiles or other logged-in data?

No. It covers public job postings only: search results and posting pages as a signed-out visitor sees them. It does not return member profiles, company pages, posts or contact details, and it does not return the off-site apply link, which LinkedIn shows only to signed-in members.

### Which search filters work?

Keywords, a free-text location or a numeric geo_id, distance from that location, posting age (past day, week or month), company ids, Easy Apply only and under 10 applicants. Without a location, LinkedIn answers with United States jobs. Job type, experience level, workplace type and sort order are ignored by LinkedIn for signed-out visitors, so the API rejects them with an error.

### How many jobs can one search return?

Each call returns one page of up to 10 job cards. Set page from 1 to 100; LinkedIn does not serve results past the 1,000th, so that is the deepest you can go. next_page is set when a page was full, and a page past the last result comes back empty and is not charged.

### How do I get the salary and the company id?

Salary is not on search cards. Call the posting endpoint with the job_id; it returns the pay range and LinkedIn’s label for who provided it, when the poster published one. The same response carries company_id, which you can pass in company_ids to search only that company’s postings.

### Do failed requests cost credits?

No. A failed or blocked call (any 4xx or 5xx response) costs 0 credits, and so does a search page that comes back empty. You pay only for successful results.

### How do I get an API key?

Create an account on the sign-up page. Public sign-up is invite-only during the beta, so join the waitlist there and we will email you when your account is ready. The Free plan includes 1,000 credits a month, and the API is free while it is in beta. You create and rotate keys yourself in the dashboard.

## Read next

- [Job search reference](https://scrapercompany.com/docs/reference/linkedin-jobs)
- [Job posting reference](https://scrapercompany.com/docs/reference/linkedin-job)
- [Every open job on a company’s careers page](https://scrapercompany.com/docs/reference/careers-jobs)
- [All APIs](https://scrapercompany.com/apis.md)
