# LinkedIn Jobs API — search jobs, jobs by company, location lookup, similar jobs, posting detail & company profiles from LinkedIn (linkedin.com), no login required

> Search public LinkedIn job postings by keywords, with optional location and date/seniority/job-type/workplace filters.
> ReefAPI engine `linkedin-jobs` · 6 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/linkedin-jobs/v1/<action>` with a JSON body.
- **Auth:** header `x-api-key: <YOUR_REEFAPI_KEY>` — create one free (1,000 credits, no card): https://reefapi.com/signup
- **Response (every call):** `{ ok: boolean, data: ..., meta: { record_count, credits, ... }, error: { code, message } }` — branch on `ok`. Failed or blocked calls are free.
- **One key + one shared credit pool** across every ReefAPI API. Per-call credits are listed on each endpoint below.
- **Use it from an AI agent (MCP):** connect `https://api.reefapi.com/mcp` (remote streamable-http, `Authorization: Bearer <key>`) and your assistant can call these actions directly.

## Endpoints

### POST /linkedin-jobs/v1/jobs/search — 1 credit
Search public LinkedIn job postings by keywords, with optional location and date/seniority/job-type/workplace filters.

**Parameters:**
- `keywords` (string, required) — What job to search for — title, skill or keyword.
- `location` (string, optional) — Country, region or city to search in (free text, e.g. 'United States', 'Berlin').
- `max_results` (integer, optional, default 50) — How many jobs to return (1–1000). LinkedIn's guest API caps any single query at ~1000; use filters to narrow.
- `date_posted` (enum, optional) — Only jobs posted within this window (raw f_TPR codes like r86400 also accepted). [one of: 24h, week, month]
- `experience` (enum, optional) — Only jobs at this experience level (raw f_E codes 1–6 also accepted). [one of: internship, entry, associate, mid_senior, director, executive]
- `job_type` (enum, optional) — Only jobs of this employment type (raw f_JT codes F/P/C/T/I/V/O also accepted). [one of: fulltime, parttime, contract, temporary, internship, volunteer, other]
- `workplace` (enum, optional) — Only jobs with this workplace arrangement (raw f_WT codes 1/2/3 also accepted). [one of: onsite, remote, hybrid]
- `company` (string, optional) — Only jobs at this employer — a company slug (the part after linkedin.com/company/), the full company URL, or its numeric LinkedIn company id (maps to the f_C facet; slugs are resolved automatically). For a pure company browse use the jobs/by-company action.
- `industry` (string, optional) — Only jobs in this LinkedIn industry — raw f_I industry code(s), comma-separated for several (e.g. '4' = software).
- `job_function` (string, optional) — Only jobs in this job function — raw f_F function code(s) (e.g. 'it', 'eng', 'sale'), comma-separated.
- `salary_min` (integer, optional) — Only jobs paying at least this annual salary (USD). Mapped to LinkedIn's nearest pay band: 40k/60k/80k/100k/120k/140k+.
- `salary_band` (enum, optional) — Advanced: LinkedIn pay-band code directly (raw f_SB2). Prefer salary_min. [one of: 1, 2, 3, 4, 5, 6]
- `include_detail` (boolean, optional, default false) — Fetch the full posting per job (description, employment type, seniority, salary) — slower.
- `include_company` (boolean, optional, default false) — Also fetch the employer's company profile (industry, size, HQ) per job — slower.
- `page` (integer, optional, default 1) — Page number (easy paging: 1, 2, 3… — page size = max_results).
- `cursor` (string, optional) — Next page: pass the previous response's meta.pagination.next_cursor (the 'Next' button does this automatically).
- `start` (integer, optional) — Advanced: raw result offset (10 jobs/page, must stay < 1000). Prefer `page` or `cursor`.
- `geoId` (string, optional) — Advanced: LinkedIn numeric geo ID — pins the search to an exact region (more precise than free-text location).
- `filters` (object, optional) — Advanced: the same facets as one object {date_posted, experience, job_type, workplace} — explicit keys here win over the flat params.
- `detail_concurrency` (integer, optional, default 4) — Advanced: parallel detail fetches when include_detail=true (1–8).

**Returns:** jobs[]{job_id, job_url, title, company{name, url, slug}, location, workplace_type, posted_date, posted_relative, salary, seniority_level, employment_type, description_text (with include_detail)} + meta.pagination{page, has_more, next_cursor}

**Example request body:**
```json
{
  "keywords": "python developer",
  "location": "United States",
  "max_results": 25
}
```

### POST /linkedin-jobs/v1/jobs/detail — 1 credit
Full posting for one job: description, employment type, seniority, salary, applicant count.

**Parameters:**
- `job_id` (string, required) — LinkedIn job ID — the number in the job URL (linkedin.com/jobs/view/<job_id>) or `job_id` from jobs/search.
- `include_company` (boolean, optional, default false) — Also fetch the employer's company profile (industry, size, HQ) per job — slower.

**Returns:** job{job_id, job_url, title, company{...}, description_text, description_html, employment_type, seniority_level, salary, applicants}

### POST /linkedin-jobs/v1/company — 2 credits
Company profile: description, website, employee count, industry, HQ, founded year, specialties.

**Parameters:**
- `company` (string, required) — Company slug (the part after linkedin.com/company/) or the full LinkedIn company URL.

**Returns:** company{slug, url, description, website, employee_count, company_size, industry, headquarters, founded, organization_type, specialties}

### POST /linkedin-jobs/v1/jobs/by-company — 1 credit
All public job postings at a specific company — pass a company slug, URL or numeric id; optionally narrow with the same keyword/location/date/seniority/job-type/workplace filters as jobs/search.

**Parameters:**
- `company` (string, required) — The employer — a company slug (the part after linkedin.com/company/), the full company URL, or its numeric LinkedIn company id. Slugs/URLs are resolved to the company id automatically.
- `keywords` (string, optional) — Optional: also filter the company's jobs by title/skill/keyword (leave empty to browse all of the company's jobs).
- `location` (string, optional) — Optional: country, region or city to narrow to.
- `max_results` (integer, optional, default 50) — How many jobs to return (1–1000).
- `page` (integer, optional, default 1) — Page number (easy paging: 1, 2, 3… — page size = max_results).
- `cursor` (string, optional) — Next page: pass the previous response's meta.pagination.next_cursor (the 'Next' button does this automatically).

**Returns:** jobs[]{job_id, job_url, title, company{name, url, slug}, location, workplace_type, posted_date, posted_relative} + company_id + meta.pagination{page, has_more, next_cursor}

### POST /linkedin-jobs/v1/locations/search — 1 credit
Location typeahead → resolve a place name (city, region, metro area, country) to the LinkedIn numeric geoId used by the `geoId` search param for precise geo-pinned searches.

**Parameters:**
- `query` (string, required) — Place name to look up — city, region, metro area or country (e.g. 'San Francisco', 'Greater London').
- `limit` (integer, optional, default 10) — Max suggestions to return (1–25).

**Returns:** locations[]{name, geoId}

### POST /linkedin-jobs/v1/jobs/similar — 1 credit
Related job postings for a given job_id. LinkedIn's guest surface exposes no direct similar-jobs feed, so results are a keyword+location re-search seeded from the source job's own title (the seed job is excluded).

**Parameters:**
- `job_id` (string, required) — LinkedIn job ID to find similar postings for — the number in the job URL or `job_id` from jobs/search.
- `keywords` (string, optional) — Optional: override the re-search keywords (defaults to the seed job's title).
- `location` (string, optional) — Optional: override the re-search location (defaults to the seed job's location).
- `max_results` (integer, optional, default 25) — How many similar jobs to return (1–100).

**Returns:** jobs[]{job_id, job_url, title, company{name, url, slug}, location, posted_date, posted_relative} + seed{job_id, title, company, location} + method

## More
- Try it live, no code: https://reefapi.com/playground?engine=linkedin-jobs
- Human docs page: https://reefapi.com/docs/linkedin-jobs
- Every ReefAPI API in one file (for your AI): https://reefapi.com/llms-full.txt
