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.
/v1/jobs/searchdata.jobs · 0{ "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.
- 01 / DiscoverSearch job listings
- 02 / SelectChoose a job URL
- 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 filtersGET endpoint
GET /v1/jobs/searchWhat you receivedata.jobs: job cards with URLs and available listing fields. - Your starting pointA LinkedIn job URLGET endpoint
GET /v1/jobs/detailsWhat you receiveOne object in
data, including the description and job status. - Your starting pointA company slugGET endpoint
GET /v1/companies/jobsWhat you receivedata.companyand the company’sdata.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.
- Required
Role or topic
Parameter:
keywordsA query such as
software engineer. Location
Parameter:
locationAn Envo location ID.
Company
Parameter:
companyIdsCompany IDs from
data.publicIdin company details.Experience and employment
Parameters:
experienceemploymentTypeSupported experience levels and employment types.
Working arrangement
Parameter:
workplaceTypeFor example,
remote,hybrid, oron_site.Posting time and order
Parameters:
timePostedsortA supported time window; relevance or recent sorting.
Application-related filters
Parameters:
easyApplyunder10ApplicantsSet the relevant filter to
true; otherwise omit it.
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.
| Data | Search cards | Job details | Company jobs |
|---|---|---|---|
| Title and job URL | title, url | title, url | title, url |
| Company | companyName, companyUrl, companyLogoUrl | Nested company object | Shared data.company object outside the jobs array |
| Location and posting date | location, postedAt; nullable | location, postedAt, postedOnText | location, postedAt; nullable |
| Full description | Not included | description | Not included |
| Workplace and employment | Not included | workplaceType, employmentType; nullable | Not included |
| Status and reposting | Not included | status, isReposted | Not included |
| Search badges | isEasyApply, isPromoted | Not included | Not 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.
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. Pagingcountis the page size, not the number of returned cards. Continue whilehasMoreis true.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
statusisclosed.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.
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.
{ "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.
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.
Free
$0
- Est. cost / 1,000 requests
- Not applicable
- Included credits
- 100 one-time free credits to test the API
- Requests per minute
- 10
Launch
$49 / month
- Est. cost / 1,000 requests
- $4.90
- Included credits
- 10,000 / month
- Requests per minute
- 60
GrowthRecommended
$149 / month
- Est. cost / 1,000 requests
- $2.98
- Included credits
- 50,000 / month
- Requests per minute
- 120
Scale
$499 / month
- Est. cost / 1,000 requests
- $2.00
- Included credits
- 250,000 / month
- Requests per minute
- 300
Volume
$1,799 / month
- Est. cost / 1,000 requests
- $1.80
- Included credits
- 1,000,000 / month
- Requests per minute
- 600
Enterprise
- Est. cost / 1,000 requests
- Custom quote
- Included credits
- 2,000,000+ / month
- Requests per minute
- Custom
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.
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
Job search
/v1/jobs/search- Next page
- While
hasMoreis true, usemeta.paging.start + meta.paging.count. - Boundary
startaccepts 0–10,000. This input range is not a job-count guarantee.
Company jobs
/v1/companies/jobs- Next page
- While
hasMoreis true, followmeta.paging.nextStart. - Boundary
startaccepts 0–999. Only the first 1,000 matches are available;totalis estimated.
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_jobsfinds listings by keyword and supported filters.get_job_detailsretrieves a full description from a job URL.get_company_jobslists recent jobs at a company.
https://api.envoapi.com/mcpAdd 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.
“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.
n8n: Import a cURL example into the HTTP Request node, configure its credentials, and map the JSON response into later steps.
Make: Add HTTP → Make a request, select
GET, set the query parameters, and enable response parsing.Other platforms: Follow the same request pattern wherever HTTP calls and JSON mapping are supported.
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.