Public job data · REST · JSON

LinkedIn Jobs API for Job Listings and Full Descriptions

Search public LinkedIn jobs, retrieve full descriptions by URL, and get recent listings by company slug. Get structured JSON for internal tools and data pipelines.

No LinkedIn login, cookies, or proxies required.

100 one-time free credits to test the API. No credit card required.

EnvoAPI is an independent, unofficial service, not affiliated with or endorsed by LinkedIn. It reads public data; it does not publish jobs or submit applications.

GET/v1/jobs/searchdata.jobs · 0
json
{  "title": "Mobile engineer",  "location": "Lagos",  "postedAt": "2026-06-24T02:05:00Z",  "companyName": "Quanta Pay",  "isEasyApply": true}

Synthetic job card · Selected fields · Not a live vacancy. Map pings are illustrative.

  1. 01 / DiscoverSearch job listings
  2. 02 / SelectChoose a job URL
  3. 03 / RetrieveRead the description

01 / API routes

Choose how to retrieve LinkedIn job data

Search returns matching job cards. A details lookup retrieves a posting by URL. Company jobs returns recent listings for a company slug.

  • Your starting pointKeywords and filters
    GET endpointGET /v1/jobs/search1 credit per requestJob search reference
    What you receive

    data.jobs: job cards with URLs and available listing fields.

  • Your starting pointA LinkedIn job URL
    GET endpointGET /v1/jobs/details1 credit per requestJob details reference
    What you receive

    One object in data, including the description and job status.

  • Your starting pointA company slug
    GET endpointGET /v1/companies/jobs1 credit per requestCompany jobs reference
    What you receive

    data.company and the company’s data.jobs.

Search by role, location, or hiring criteria. For a known job URL, go straight to details.

For a known company, pass a slug such as microsoft to company jobs. That selector differs from the companyIds filter used in job search. Company jobs returns listings worldwide, newest first; subsidiaries are not included automatically.

All three routes return JSON, with different payloads and pagination rules.

02 / Find relevant listings

Filter LinkedIn jobs by location and hiring criteria

Combine the required keywords parameter with filters to find relevant jobs before spending credits on full descriptions.

For a location filter, use location search to find the place, then pass its data.locations[].id. The job-search parameter expects that ID, not a city name or a LinkedIn geoID.

A filter is not a returned field: under10Applicants does not add an applicant-count field to the response. See the search reference for accepted values and combinations. For discovery across other record types, explore the LinkedIn search API.

03 / Know your output

See the job fields returned in JSON

List responses identify postings; detail responses add full descriptions. Search cards, job details, and company-job cards have different schemas.

Job data available in each response
DataSearch cardsJob detailsCompany jobs
Title and job URLtitle, urltitle, urltitle, url
CompanycompanyName, companyUrl, companyLogoUrlNested company objectShared data.company object outside the jobs array
Location and posting datelocation, postedAt; nullablelocation, postedAt, postedOnTextlocation, postedAt; nullable
Full descriptionNot includeddescriptionNot included
Workplace and employmentNot includedworkplaceType, employmentType; nullableNot included
Status and repostingNot includedstatus, isRepostedNot included
Search badgesisEasyApply, isPromotedNot includedNot included

In job details, status can be open, closed, or unknown. Treat an unknown status as unresolved, rather than marking the job closed. A nullable field may have no value in a valid response; handle that separately from a failed request.

Company-job cards contain title, URL, location, and posting date. Read the company once from data.company; do not expect every search-card field on those cards.

The current job-detail schema does not expose dedicated salary, seniority, applicant-count, recruiter-contact, or application-URL fields. Check the linked operation references against your required fields before integrating.

04 / From search to description

Make your first LinkedIn Jobs API request

Store your key server-side as ENVO_API_KEY and pass it in the Authorization: Bearer header. See the authentication guide for setup.

Search for jobs, select a URL, then retrieve its description. Every response below is real, captured from the live API.

  1. Search for job listings

    Start with a keyword, a location ID from location search, and the first page.

    GET/v1/jobs/searchbash
    curl --get "https://api.envoapi.com/v1/jobs/search" \  --header "Authorization: Bearer $ENVO_API_KEY" \  --header "Accept: application/json" \  --data-urlencode "keywords=software engineer" \  --data-urlencode "location=geo_6yITcz" \  --data-urlencode "start=0"

    Real response, captured on October 22, 2026. The first of its 10 cards is shown; Copy takes the whole page.

    Response200json
    {  "data": {    "jobs": [      {        "title": "Frontend Software Engineer (Js, UI)",        "url": "https://www.linkedin.com/jobs/view/4482068450",        "location": "United States (Remote)",        "postedAt": "2026-10-21T18:18:24.000Z",        "companyName": "Wiraa",        "companyUrl": "https://www.linkedin.com/company/sundayyworld",        "companyLogoUrl": "https://image.envoapi.com/i/u-SdogSdPUtGhYpW…",        "isPromoted": true,        "isEasyApply": false      },      … 9 more in the full response    ]  },  "meta": {    "paging": { "start": 0, "count": 10, "hasMore": true },    "creditCost": 1  }}

    Read cards from data.jobs. Paging count is the page size, not the number of returned cards. Continue while hasMore is true.

  2. Fetch details for a selected job

    Pass a card’s URL to the details route. This request asks for the first card from the search above.

    GET/v1/jobs/detailsbash
    curl --get "https://api.envoapi.com/v1/jobs/details" \  --header "Authorization: Bearer $ENVO_API_KEY" \  --header "Accept: application/json" \  --data-urlencode "url=https://www.linkedin.com/jobs/view/4482068450"

    Real response for that card, captured on October 26, 2026. The description is shortened. The posting had closed by then, so status is closed.

    Response200json
    {  "data": {    "url": "https://www.linkedin.com/jobs/view/4482068450",    "title": "Frontend Software Engineer (Js, UI)",    "description": "About The Company Coinbase is a leading cryptocurrency exchange platform committed to increasing economic freedom worldwide. As a remote-first company with a global presence, Coinbase strives to create…",    "company": {      "name": "Wiraa",      "linkedinUrl": "https://www.linkedin.com/company/sundayyworld",      "logoUrl": "https://image.envoapi.com/i/xoMZs9iHYmTn9vpA…",      "followerCount": 73109    },    "location": "United States",    "workplaceType": "Remote",    "employmentType": "Full-time",    "postedAt": "2026-10-21T11:14:30.000Z",    "postedOnText": "Posted on Oct 21, 2026.",    "status": "closed",    "isReposted": false  },  "meta": { "creditCost": 1 }}

    Details returns one object in data, with no pagination. Each detail lookup adds a request, so retrieve descriptions only for the jobs your application needs.

Have a company slug instead? View the company-jobs request and response

Retrieve the company object and a page of recent job cards with a company slug.

GET/v1/companies/jobsbash
curl --get "https://api.envoapi.com/v1/companies/jobs" \  --header "Authorization: Bearer $ENVO_API_KEY" \  --header "Accept: application/json" \  --data-urlencode "slug=microsoft" \  --data-urlencode "start=0"

The company is in data.company and its cards are in data.jobs. While hasMore is true, follow meta.paging.nextStart. total is estimated, and only the first 1,000 matches are available.

Real response, captured on October 26, 2026. The first of its 10 cards is shown; Copy takes the whole page.

Response200json
{  "data": {    "company": {      "name": "Microsoft",      "slug": "microsoft",      "url": "https://www.linkedin.com/company/microsoft",      "logoUrl": "https://image.envoapi.com/i/61k0obDjefX6vPAU…"    },    "jobs": [      {        "title": "Software Engineer II and/or Senior Software Engineer - Backend",        "url": "https://www.linkedin.com/jobs/view/4447790912",        "location": "Redmond, WA (Hybrid)",        "postedAt": "2026-10-25T17:36:18.000Z"      },      … 9 more in the full response    ]  },  "meta": {    "paging": {      "start": 0,      "count": 10,      "returned": 10,      "total": 2327,      "hasMore": true,      "nextStart": 10    },    "creditCost": 1  }}

05 / Plan your requests

LinkedIn Jobs API pricing and free credits

Job search, job details, and company jobs each cost 1 credit per request. Billing is per API call, not per returned job. Each response reports its cost in meta.creditCost.

Estimate your job data request cost

Two search-page calls plus 20 selected detail calls use 22 credits. This assumes you find and select 20 URLs; two pages are not guaranteed to return that many suitable jobs. Add one location lookup and the same workflow uses 23 credits.

Estimate a request budget

Enter API calls, not returned job records. Each call below costs 1 credit at the current rate.

Estimated total22 credits

Extra pages, repeat refreshes, other lookups, and accepted retries can add cost. This estimate covers only the calls entered above. Check retrieval limits before planning a larger run.

Compare plans by cost per 1,000 requests

Estimated rates assume 1 request = 1 credit and full use of each monthly allowance. Calculate the cost per 1,000 requests as monthly price ÷ monthly credits × 1,000.

Figures are rounded to the nearest cent. These are effective rates within a monthly plan; using fewer credits increases the cost per 1,000 requests. Enterprise rates depend on your quote.

No credit card required for the free trial. Paid monthly credits reset at renewal. All keys on an account share its rate limit.

View current plans, credit costs, and billing terms

06 / Build with the right expectations

Understand job data freshness and retrieval limits

Plan for changing results, incomplete fields, and bounded retrieval. A request gives your application an observation of available data; it does not establish a complete record of every job on LinkedIn.

Distinguish posting dates from observation time

EnvoAPI reads public data when you send a request. Retrieval time is different from the source posting date and from the first time your application sees a URL. A fresh read does not guarantee that the source itself was recently updated.

Record an observation timestamp in your own system. A newly observed listing may be older or reposted. A listing missing from a later result does not prove the role has been filled. No fixed freshness window is promised here.

Paginate search and company job results correctly

The API controls page size. Do not send undocumented count, limit, or fetchAll parameters. Keep filters unchanged across pages and deduplicate job URLs because results can change during retrieval.

Stop when pagination ends, the next offset reaches an invalid range, continuation stops advancing, or your local request budget is exhausted. A short page alone is not a stopping signal.

Respect rate limits and handle incomplete data

Coordinate requests across keys and workers sharing an account. On 429, follow Retry-After with bounded retries. Fix invalid credentials instead of retrying authentication failures. Treat nullable fields as missing data, not automatically as errors. The rate-limit guide explains retry behavior.

07 / Put job data to work

Build hiring monitors and job data workflows

Add storage, refresh schedules, and display logic to build these workflows.

Track hiring at selected companies

Start with company slugs, retrieve job lists, and store dated snapshots. Compare URLs and fields to identify changes worth reviewing. Add context through the LinkedIn company API when you need more company data. Your application owns the schedule and comparison logic.

Build an internal jobs dashboard

Search by role and hiring criteria, display relevant cards, and fetch descriptions for selected postings. Store records by URL, handle missing fields, and set a refresh budget. Explore job-data monitoring workflows for deeper guidance on snapshots and interpreting changes.

Use job data in an approved customer-facing job board

A job board can consume listings and descriptions, but embedded or external use requires express permission in an Order Form. Confirm your use case with EnvoAPI before deploying to end users. The API retrieves data; your product provides the interface and refresh process.

For workflows that combine jobs with profiles, companies, or posts, explore the broader LinkedIn data API.

08 / AI assistants

Connect LinkedIn job data to AI tools with MCP

Search listings, compare roles, and summarize job requirements in Claude, ChatGPT, Cursor, or another compatible AI client. The EnvoAPI MCP server exposes three tools for working with job data:

  • search_jobs finds listings by keyword and supported filters.

  • get_job_details retrieves a full description from a job URL.

  • get_company_jobs lists recent jobs at a company.

https://api.envoapi.com/mcp

Add https://api.envoapi.com/mcp as a remote Model Context Protocol (MCP) server. Follow the setup guide for your AI client; EnvoAPI hosts the server and returns structured data to your assistant.

Example prompt

“Find software engineer jobs, then summarize the requirements from five matching descriptions. Include each job’s source URL.”

MCP lookups share your existing credits and rate limits, with no additional MCP fee. One prompt may trigger several API calls; each search page and detail lookup counts separately.

09 / Workflow automation

Connect LinkedIn job data to n8n, Make, and more

Build scheduled job searches, company hiring monitors, and internal alerts in n8n, Make, Zapier, or Pipedream. HTTP request steps retrieve structured JSON for your spreadsheet, database, or dashboard.

Build a scheduled job monitor

Call /v1/jobs/search on a schedule, iterate over data.jobs, and deduplicate by url. Fetch descriptions through /v1/jobs/details for selected listings, then save the records with an observation timestamp. Start from /v1/companies/jobs when monitoring a company slug.

Configure the schedule, pagination, and request budget in your automation platform. Each search page and detail lookup counts as a separate API request.

10 / Before you start

LinkedIn Jobs API FAQ

Does LinkedIn provide an official jobs API?

LinkedIn’s Job Posting API supports approved integrations that publish jobs on customers’ behalf. EnvoAPI independently retrieves public listings and job details.

Do I need a LinkedIn login, cookies, or proxies?

No LinkedIn login, cookies, or proxies required. You do not need a Sales Navigator account.

Can I publish jobs or manage applications?

No. These endpoints read public job data. They do not create, edit, close, or promote employer postings, submit applications, or manage applicants. The isEasyApply flag describes a listing; it does not enable applications.

Can I retrieve every job on LinkedIn?

The API does not guarantee coverage of every LinkedIn job. Search results depend on the query and available source data, while company jobs exposes only the first 1,000 matching listings. Follow each route’s pagination rules and limits. A supported offset range or estimated total does not guarantee that every matching job can be retrieved.

Can I use the data in a customer-facing product?

By default, the Services and Output Data are for internal business purposes under the EnvoAPI Terms. Embedded or external use needs express permission in an Order Form. Contact EnvoAPI with your intended use, including how end users will access the data, before deploying a customer-facing application or job board.