DEV Community

Cover image for LinkedIn Jobs API: How to Get Job Listings and Salary Data as JSON in 2026
Truffle Pig Data
Truffle Pig Data

Posted on

LinkedIn Jobs API: How to Get Job Listings and Salary Data as JSON in 2026

Job postings are one of the most useful public signals on the internet. Who's hiring, for what, where, at what salary: it's market data, sales intelligence, and career research all at once, and the deepest pool of it sits on LinkedIn Jobs. Getting it out programmatically is the hard part, so I built the LinkedIn Jobs API on Apify: search public listings by keyword and location, or feed it posting URLs, and get one clean JSON row per job.

Disclosure: the Apify links in this post are affiliate links. If you run the Actor, I may earn a referral commission at no extra cost to you.

Does LinkedIn have a jobs API?

Not one you can sign up for. LinkedIn's official APIs live behind partner programs aimed at large talent platforms, and there's no self-serve endpoint where a developer with an API key can query job listings. That's why "linkedin jobs api" searches lead to scrapers. This Actor is that scraper packaged as an API: it reads the public job search pages, no login involved, and returns the listings as structured rows you can filter the same way the site does.

What the LinkedIn Jobs API returns

The LinkedIn Jobs API returns each public job listing as structured JSON: title, company, location, salary when posted, description, and the apply link.

Field Example Notes
Title Senior Python Developer The posting headline
Company Acme Analytics Hiring organization
Location New York, NY (Remote) With remote flags where shown
Salary $150,000 - $180,000 Present when the posting includes it
Description We're looking for... Full text for keyword mining
Apply link https://www.linkedin.com/jobs/view/... Direct route to the posting

Filters mirror the site: jobType, experienceLevel, remote, company, and timeRange down to jobs posted in the past day.

Who this is for

Recruiters and talent-intelligence teams mapping which companies hire for which skills. Builders of job boards and aggregators who need a reliable feed. And sales teams reading hiring signals, because a company posting five data-engineering roles is telling you something about next quarter's budget.

The manual way, and where it breaks

Scraping LinkedIn yourself is the classic trap. The public pages exist, but they're rendered for browsers, rate-limited for everyone else, and quick to serve an auth wall when your request pattern looks automated. Pagination behaves differently logged out, the markup changes without notice, and half the fields hide in embedded structures. I've watched more than one side project die at the "just scrape LinkedIn" step, which is precisely why this Actor exists.

The faster way: run the LinkedIn Jobs API

Apify Console

  1. Open the LinkedIn Jobs API and click Try for free.
  2. Set keyword and location, plus any filters like remote or timeRange.
  3. Run it and export the jobs as JSON or CSV.

REST

curl -X POST "https://api.apify.com/v2/acts/johnvc~linkedin-jobs-api/runs?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "keyword": "python developer", "location": "New York", "remote": true, "timeRange": "past-week", "maxJobs": 25 }'
Enter fullscreen mode Exit fullscreen mode

Endpoint semantics are in the Apify API docs.

Get LinkedIn jobs in Python

from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run = client.actor("johnvc/linkedin-jobs-api").call(
    run_input={
        "keyword": "machine learning engineer",
        "location": "United Kingdom",
        "experienceLevel": "mid-senior",
        "maxJobs": 25,
    }
)

for job in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(job.get("title"), job.get("company"), job.get("salary"))
Enter fullscreen mode Exit fullscreen mode

The runnable version lives in the task LinkedIn jobs data API for Python.

Search by keyword and location

Search LinkedIn jobs by keyword and location is the canonical starting run, and Scrape LinkedIn jobs to structured JSON shows the raw output shape those searches produce.

Fetch specific postings from a URL list

Already have the jobs and just need the data? Collect LinkedIn jobs from a URL list takes up to 1,000 posting URLs per run through jobUrls and returns one row each.

Watch one company's hiring

Monitor company hiring on LinkedIn pins the company filter and turns job postings into recruitment data about a competitor or prospect. This one, run weekly, is my favorite low-effort market signal.

Track remote roles as they appear

Track remote LinkedIn jobs by keyword combines remote with timeRange so each run returns only fresh remote postings for your search.

Drop it into an n8n workflow

For the automation crowd, Scrape LinkedIn jobs in an n8n workflow shows the Actor as a node in a no-code pipeline, jobs in, Slack alert or spreadsheet out.

Ask Claude for job listings over MCP

Through the Model Context Protocol the Actor becomes a tool Claude, Claude Code, and Cursor can call, so "find me mid-senior ML jobs in London posted this week" runs a real search mid-conversation. The task Get LinkedIn jobs in Claude via MCP documents the setup, and there's more about Claude at claude.ai.

FAQ about the LinkedIn jobs scraper

What does the LinkedIn jobs scraper actually collect?

Public job listings only. It reads the job search pages that are visible without an account: titles, companies, locations, salaries where posted, descriptions, and apply links. No login, no profile data, no personal information beyond what a posting itself contains.

How much does the jobs scraper cost per run?

Four tenths of a cent per job returned, so a 25-job search is about a dime and a 1,000-job URL batch is about $4. maxJobs caps each search's spend, and new Apify accounts include free credit.

Can Claude use this jobs scraper through MCP?

Yes. Once connected through Apify's MCP server it appears as a callable tool in Claude, Claude Code, and Cursor, returning rows the agent can reason over.

How do I schedule the scraper for daily hiring signals?

Save a search with timeRange set to past-day, attach an Apify schedule that runs each morning, and you get a rolling feed of new postings. Start from the LinkedIn Jobs API and save your first task.

Where does the jobs scraper fall short?

Salary appears only when the employer posts it, which varies a lot by market. Listings churn constantly, so a snapshot ages in days. And it deliberately sticks to public listing pages, so anything requiring a logged-in view is out of scope.

More from Truffle Pig Data

For the wider recruiting stack: the LinkedIn Company API adds firmographics to the companies you find hiring, the LinkedIn Profile API covers public profile data, and the Google Jobs Scraper pulls the same market from Google's job search.

Wrapping up

There's no public LinkedIn jobs API, but the public listings are right there, and now they behave like one. Run the LinkedIn Jobs API with one keyword and one city, and build from that first JSON row.

Top comments (0)