# LinkedIn Jobs API (linkedin.jobs)

- Canonical page: https://everyinfra.com/en/linkedin-api/jobs
- Endpoint: POST https://api.everyinfra.com/api/v1/social with {"platform": "linkedin", "action": "jobs", "params": {...}}
- Price: $0.000556 per call ($0.56 per 1,000 requests); failed calls and empty results are not charged
- Returns: list, default 20, max 200 per call
- Mode: sync; add "mode": "async" for slow tasks

LinkedIn Jobs looks up public job postings on LinkedIn by `keyword` and returns each one's title, description, company name, company page link and logo, location, salary, employment type, seniority level, applicant count and posting time. It shows who is hiring for a role, where and at what level. Recruiters and job boards use it to track openings, sales teams to spot companies that are growing a team, and labor market analysts to measure demand for a skill across places and over time.

`keyword` takes a search term such as software engineer, or the full URL of a LinkedIn job search. `employment_type` separates full-time, part-time, contract and internship roles, so keep those groups apart when you compare pay in `salary`. A null `posted_at` means LinkedIn did not disclose when the job went up, and each row's `location` is passed through in LinkedIn's own wording rather than a fixed format.

## Health

- Live health (24h percent, hourly and daily trends): https://api.everyinfra.com/api/v1/social/availability?platform=linkedin&action=jobs

## Parameters

| name | type | required | default | description |
|---|---|---|---|---|
| keyword | not declared | yes | not declared | Specifies the search string, acting as a post search keyword in search, a current job title in profile_search, or a job search term or full job URL in jobs. Searching for people with this parameter does not perform an exact match by individual name or email. |
| location | not declared | no | not declared | Specifies location text for person profiles in profile_search or job locations in jobs. When keyword in the jobs action is already a full search URL, the URL's embedded criteria take precedence and location is ignored. |
| limit | integer (1–200) | no | 20 | The most rows to return in this call, an integer from 1 to 200. The default applies when you leave it out, and a call can return fewer rows. Larger values return 422 before any charge. |

## Response fields (items in `results`)

| field | meaning |
|---|---|
| id | The record's unique ID on the platform. Unique only within one platform; IDs can repeat across platforms. |
| url | Link to the record on the platform. |
| title | Title. null when the platform has no titles (for example text-only posts). |
| text | Body text with HTML removed, returned in full and never cut short (on a few platforms the list results themselves carry only an excerpt; the platform's field notes say so). |
| company_name | Company name. |
| company_url | Link to the company page. |
| company_logo | Company logo. |
| location | Location description passed through as is; the format varies by platform. |
| salary | Pay information. |
| employment_type | Employment type (full-time, part-time, contract, internship). |
| seniority | Seniority level. |
| applicant_count | Number of people who have applied to the job. |
| posted_at | Publish time in ISO 8601, UTC (for example 2026-08-07T12:34:56+00:00). Non-standard strings from the platform are passed through as is, so parse defensively. null means the platform does not disclose it. |
| platform | Source platform identifier, the same as platform in the request (for example xiaohongshu, tiktok). |

## Example

```bash
curl -X POST 'https://api.everyinfra.com/api/v1/social' \
  -H "Authorization: Bearer $EVERYINFRA_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "platform": "linkedin",
  "action": "jobs",
  "params": {
    "keyword": "software engineer"
  }
}'
```

```python
import os
import requests

response = requests.post(
    "https://api.everyinfra.com/api/v1/social",
    headers={"Authorization": f"Bearer {os.environ['EVERYINFRA_API_KEY']}"},
    json={
        "platform": "linkedin",
        "action": "jobs",
        "params": {
            "keyword": "software engineer",
        },
    },
    timeout=120,
)
print(response.status_code)
print(response.json())
```

## Response example

Real response to the example request above, captured 2026-09-26T08:56:04Z. `results` and `count` are real with personal information (names, handles, avatars, profile links, contact details) removed; the list keeps the first 2 of 20. `id`, `billing` and `quota` differ on every call, so only their shape is shown.

```text
{
  "id": "req_…",
  "platform": "linkedin",
  "action": "jobs",
  "results": [
    {
      "id": "•••",
      "url": "https://www.linkedin.com/jobs/view/software-development-engineer-ii-at-expedia-group-4469399031?position=17&pageNum=0&refId=Cp4vOjae6AB%2Bd%2FM%2B3qjsQg%3D%3D&trackingId=zH57%2BPs4uVLHK0FvilHeog%3D%3D",
      "title": "Software Development Engineer II",
      "text": "At Expedia Group, we help travelers explore the world, one journey at a time. As a global travel company powered by passionate people, trusted partnerships, and leading technology, we connect travelers, partners, and advertisers through our consumer brands, B2B network, and trave…",
      "company_name": "Expedia Group",
      "company_url": "https://www.linkedin.com/company/expediagroup?trk=public_jobs_jserp-result_job-search-card-subtitle",
      "company_logo": "https://media.licdn.com/dms/image/v2/D4E0BAQH35rDiMFanuQ/company-logo_100_100/B4EaCgt37sGoAI-/0/1789402775480/expediagroup_logo?e=2147483647&v=beta&t=tTgqxIYsK7mUH_BfkjhzyHq_eH3V9cU7Q7FamrhMptM",
      "location": "Chicago, IL",
      "salary": "$111,000.00/yr - $155,500.00/yr",
      "employment_type": "Full-time",
      "seniority": "Not Applicable",
      "posted_at": "2026-09-24T00:00:00+00:00",
      "platform": "linkedin"
    },
    {
      "id": "•••",
      "url": "https://www.linkedin.com/jobs/view/software-engineer-ii-backend-platform-team-at-rippling-4463786876?position=18&pageNum=0&refId=Cp4vOjae6AB%2Bd%2FM%2B3qjsQg%3D%3D&trackingId=GWDyqCdQVVuCLrfoOsaOzg%3D%3D",
      "title": "Software Engineer II, Backend - Platform Team",
      "text": "About Rippling\n\nRippling gives businesses one place to run HR, IT, and Finance. It brings together all of the workforce systems that are normally scattered across a company, like payroll, expenses, benefits, and computers. For the first time ever, you can manage and automate ever…",
      "company_name": "Rippling",
      "company_url": "https://www.linkedin.com/company/rippling?trk=public_jobs_jserp-result_job-search-card-subtitle",
      "company_logo": "https://media.licdn.com/dms/image/v2/D4E0BAQGVw6UsjqtXGw/company-logo_100_100/B4EZlN73QeHIAQ-/0/1757949162831/rippling_logo?e=2147483647&v=beta&t=_-PZ3E8XmdCyc89UhLvip3soyI97bY1FRM89cZYXEiQ",
      "location": "Seattle, WA",
      "salary": "",
      "employment_type": "Full-time",
      "seniority": "Not Applicable",
      "posted_at": "2026-09-05T00:00:00+00:00",
      "platform": "linkedin"
    }
  ],
  "count": 20,
  "billing": {
    "charged": …,
    "charged_usd": …,
    "balance_after_usd": …,
    …
  },
  "quota": { … }
}
```

## FAQ

### Can I pass a LinkedIn job search URL instead of a keyword?

Yes. `keyword` accepts either a plain search term, such as data analyst, or the full address of a LinkedIn job search results page. With a URL, the search follows that link and `location` is not appended to it, so build any place filter into the URL before you copy it from the browser.

### How do I limit jobs to one city or country?

Put the place name in `location`, for example Berlin or Canada, and the role in `keyword`. The `location` that comes back on each row is LinkedIn's own text, passed through unchanged, so normalize it before you group or count jobs by place.

### How can I tell how competitive a posting is?

Read `applicant_count`, the number of people who have applied, together with `posted_at`. A large count on a posting that went up only days ago points to a crowded role. Compare postings with the same `seniority` and `employment_type` so that you weigh like against like.

## Also

- Capability catalog (no key): https://api.everyinfra.com/api/v1/social/catalog?platform=linkedin
- OpenAPI: https://everyinfra.com/openapi.json · Agents guide: https://everyinfra.com/agents.md
