~ / endpoints / Job API

LinkedIn Job Scraper API

Our LinkedIn job scraper turns a single job posting, by numeric job ID or a /jobs/view/ URL, into structured JSON: title, company, location, applicant count, salary when shown, seniority, employment type, job function, industries, and the full description in both text and HTML.

Get a free API keyBrowse the endpoints
1,000
free requests / mo
2.6s
median response
JSON
structured output
1
flat charge per posting

Quickstart

cURL
curl "https://api.linkedinscraperapi.com/api/v1/linkedin/job?job_id=4406118990&api_key=$API_KEY"
Python
import requests

BASE = "https://api.linkedinscraperapi.com"
API_KEY = "YOUR_API_KEY"

# Pass a numeric job_id, or a full /jobs/view/{id} URL instead.
data = requests.get(
    f"{BASE}/api/v1/linkedin/job",
    params={"job_id": "4406118990", "api_key": API_KEY},
    timeout=30,
).json()

print(data["title"], "@", data["company"], "-", data["location"])
print(data["seniority"], "|", data["employment_type"], "|", data["salary"])
print(data["applicants"], "-", data["posted_label"])
print(data["description"][:280])

Params

ParameterRequiredDefaultNotes
job_idoptional-The numeric job ID from urn:li:jobPosting:{id}, e.g. 4406118990. One of job_id or url is required.
urloptional-A full /jobs/view/{id} URL instead of the ID. One of job_id or url is required.
api_keyrequired-Your API key, passed as a query parameter. Get one free at signup.

Response

200 OK
{
  "id": "4406118990",
  "job_id": "4406118990",
  "title": "Software Engineer, New Grad",
  "url": "https://www.linkedin.com/jobs/view/4406118990",
  "company": "Notion",
  "company_url": "https://www.linkedin.com/company/notionhq",
  "location": "San Francisco, CA",
  "applicants": "Over 200 applicants",
  "posted_label": "3 days ago",
  "salary": "$102,000.00 - $138,000.00",
  "seniority": "Entry level",
  "employment_type": "Full-time",
  "job_function": "Engineering and Information Technology",
  "industries": "Software Development",
  "description": "Who We Are Notion is the collaborative AI workspace where teams and agents think together. We're building one place where your knowledge, projects, meetings, and AI tools live side by side...",
  "description_html": "<p>Who We Are<br><br>Notion is the collaborative AI workspace where teams and agents think together...</p>",
  "company_logo": "https://media.licdn.com/dms/image/v2/D4E0BAQGwvcv_1tHZ4w/company-logo_100_100/B4EZW25gE2GgAQ-/0/1742530282185/notionhq_logo?e=2147483647&v=beta&t=h_sgZm5R2TgP9Fpbo95m2wmxnSDoEz06eupofZwpSXs"
}
FieldTypeDescription
job_idstringThe numeric job ID, the stable identifier for the posting.
titlestringThe job title from the top card, e.g. "Software Engineer, New Grad".
urlstringThe canonical /jobs/view/{id} URL.
companystringThe hiring company name.
company_urlstringThe hiring company's /company/ page URL.
locationstringThe job location, e.g. "San Francisco, CA".
applicantsstringThe applicant-count label when shown, e.g. "Over 200 applicants", otherwise null.
posted_labelstringRelative posting time, e.g. "3 days ago".

Use it for

>

Job board aggregation

Resolve a list of job IDs into title, company, location, and description to populate a niche job board or internal listings feed.
>

Hiring and market intelligence

Pull seniority, employment_type, job_function, and salary across postings to track what roles a company or sector is hiring for and at what pay.
>

Compensation benchmarking

Collect the salary field where LinkedIn shows it to build a pay-range dataset for a role, location, or seniority band.
>

Applicant-demand signals

Read the applicants label to gauge how competitive a posting is and rank openings by interest for candidates or clients.

How it compares

Our APIDIY (requests / headless)Official LinkedIn API
Input by ID or URLYes, job_id or /jobs/view/ URLManual fetch and parseNo public job-by-ID endpoint
Structured job fieldsTitle, company, criteria, salaryJSON-LD is empty, parse the cardJobs API is partner-gated
SetupAPI key onlyResidential proxies, headless browser, parsersTalent Solutions partnership
Salary and applicantsReturned when LinkedIn shows themExtra selectors, often missedNot exposed to general apps
Anti-bot and proxiesResidential-first, built inYou build and maintain itNot applicable
Removed postingsClean item-not-found resultParser crash on a 404 shell404 from the API
Full descriptionText and HTML in one callYou strip and clean the markupOnly for authorized partners

Pricing

PlanPriceBest for
Free1,000 requestsTesting and small jobs
Pro$0.60 / 1kProduction workloads
Pay-as-you-go$0.90 / 1kSpiky or one-off volume

Median response 2.6s. You only pay for successful requests.

FAQ

What is a LinkedIn job scraper?

A LinkedIn job scraper is a tool that reads a public job posting and returns it in a structured format. Our LinkedIn job scraper API takes a numeric job ID or a /jobs/view/ URL and returns the title, company, location, applicant count, salary when shown, seniority, employment type, job function, industries, and the full description as JSON from a single request.

How do I scrape a LinkedIn job posting?

Send one GET request to our linkedin/job endpoint with a job_id or a url and your API key. We route through residential proxies, handle anti-bot checks, and parse the rendered job card and criteria list, so you get clean JSON back without maintaining selectors against LinkedIn's guest job markup.

Can I pass a job URL instead of an ID?

Yes. Pass the numeric ID in job_id, for example 4406118990, or a full /jobs/view/{id} URL in url. One of the two is required, and the endpoint resolves the canonical posting URL either way.

Why is the salary field sometimes null?

LinkedIn only renders the salary range on postings where the employer chose to publish it, so most cards omit it. When it is present we return it as a string like "$102,000.00 - $138,000.00", and when it is not we return null. We never estimate or fabricate a pay range.

What happens if the job has been removed?

A stale or removed job ID returns a clean LinkedIn 404 shell with no top card. Our endpoint surfaces that as an item-not-found result rather than a hard parse error, so your pipeline can skip the posting and keep processing the rest of the batch.

Do I get the full job description?

Yes. The description comes back as plain text in the description field and with its original markup preserved in description_html, so you can index the clean text and render the formatted version. The criteria (seniority, employment type, job function, industries) come back as their own named fields alongside it.

Get job api as JSON
Free plan, 1,000 requests. No credit card required.
Get a free API key All endpoints