Track Hiring Trends with LinkedIn Jobs Data (2026)

By Serpent API Team · · 12 min read

Job postings are one of the most honest signals a company sends. Before a press release, before a funding announcement, a company tells the world what it is investing in by what it is hiring for. Aggregate those postings across a market and you get something valuable: a live read on where demand is heading — which roles, which companies, which cities.

This guide shows how to turn the public LinkedIn jobs surface into that kind of hiring-trend intelligence using one REST endpoint. We will pull real postings, aggregate and break them down by company and location, and track the volume over time. And — because this matters more than the pitch — I will be honest about exactly what the data can and cannot tell you.

TL;DR: Ingest public postings with GET /api/linkedin/jobs?keywords=<role>&location=<place>, dedupe by job_id, and you can (1) count how many roles of a type are open in a market, (2) break them down by company and location, and (3) track that volume over time by saving dated snapshots. It is keyword-matched, not company-filtered, and each page returns 10 postings — so you paginate for depth. Jobs calls are $0.50/1K, down to $0.025/1K at Scale. Reads publicly available LinkedIn data only. Real data and tested code below.

Why job postings are a market signal

Hiring is expensive and deliberate, so companies only post roles they intend to fill. That makes the mix of open postings a leading indicator: a surge in "machine learning engineer" roles across a sector says where budget is moving; a city climbing the location breakdown says where a function is concentrating. Recruiters, market researchers, investors, and go-to-market teams all want this read, and most of it is sitting in plain sight on public job pages.

What the data is (and isn't)

Set expectations correctly and this works well; misunderstand the endpoint and you will draw wrong conclusions. Two honest points up front:

Within those bounds, the reliable per-posting fields are job_id, job_title, company_name, location and job_posted_date — everything you need to count and break down demand.

Real data: a live market snapshot

Here is the top of a real response for keywords=machine learning engineer&location=United States, pulled on July 2, 2026:

Job titleCompanyLocation
Data ScientistZest for TechWashington DC-Baltimore Area
Machine Learning Engineer ICNNNew York, NY
Software Engineer, AI/ML, Google ResearchGoogleMountain View, CA
Machine Learning Engineer, EntryParamountNew York, NY

Method: live GET /api/linkedin/jobs call on 2026-07-02, first four rows verbatim. Note the mix — a broadcaster (CNN), a studio (Paramount), and a search giant (Google) all hiring ML talent, which is itself a signal.

A candlestick market chart on a dark screen, representing trend analysis over time

Aggregating a snapshot by company and location

A list of postings becomes intelligence the moment you aggregate it. Ingest several pages, dedupe by job_id, and count. Here is a tested aggregator that does exactly that:

import time, requests
from collections import Counter

API_KEY = "YOUR_API_KEY"
BASE = "https://apiserpent.com/api/linkedin/jobs"

def ingest(keywords, location, pages=3):
    seen, rows = set(), []
    for p in range(pages):
        r = requests.get(BASE, headers={"X-API-Key": API_KEY},
                         params={"keywords": keywords, "location": location, "start": p * 10},
                         timeout=60)
        if r.status_code != 200:
            break
        jobs = r.json().get("data", {}).get("jobs", [])
        if not jobs:
            break
        for j in jobs:
            jid = j.get("job_id")
            if jid and jid not in seen:
                seen.add(jid); rows.append(j)
        time.sleep(0.4)
    return rows

rows = ingest("machine learning engineer", "United States", pages=3)
print("unique postings:", len(rows))
print("top locations:", Counter(r["location"] for r in rows).most_common(4))
print("top companies:", Counter(r["company_name"] for r in rows).most_common(4))

Running that against live data on July 2, 2026 returned:

unique postings: 29
top locations: [('United States', 4), ('New York, NY', 3), ('Atlanta, GA', 2), ('San Francisco, CA', 2)]
top companies: [('CNN', 2), ('Crossing Hurdles', 2), ('Adobe', 2), ('Qualcomm', 2)]

That is a real market read in five lines of output: ML-engineer demand is spread across the country with New York leading the named metros, and the hiring is not just the usual big-tech names — a recruiting firm, Adobe, and Qualcomm all show up. Swap the query for your sector and you have your own breakdown.

Turning snapshots into a trend

One snapshot is a photograph; a trend is a film. The endpoint returns a point-in-time read, so — exactly like the headcount tracker — you build the time series by saving snapshots on a schedule:

  1. Fix your queries and depth. Pick your role-and-location pairs and a constant page depth (say 3 pages), so counts are comparable week to week.
  2. Ingest weekly and save the count. Store date, query, unique_count per run. Weekly is the right cadence — hiring moves in weeks, not hours.
  3. Compare. A query whose unique count climbs over a quarter is a market heating up; a falling count is one cooling off.

Because the ingest and dedupe logic is the same as the job-board pipeline, you can run both off one scheduled script: store the postings for your board and log the counts for your trend in the same pass.

What to do with hiring trends

A person analyzing charts and graphs on a screen, representing market intelligence work

1. Market and talent research

Which roles are in demand, and where? A weekly breakdown by title and location maps the supply-and-demand of a skill across markets — the backbone of a talent-market report or a "state of hiring" content piece.

2. Competitive and sector intelligence

Track a sector's postings and watch which companies keep appearing. A firm that suddenly floods the board with engineering roles is scaling a product; pair the observation with its headcount trend to confirm.

3. Go-to-market timing

If your buyer is a "Head of Data" and those roles are spiking in a sector, that sector is building the teams that buy your product. Hiring trends make a surprisingly good early demand signal for sales and marketing.

Errors, rate limits and retries

StatusMeaningWhat to do
200Success — {"success": true, "data": {…}}Read data.jobs.
400Missing keywordsFix the request; don't retry.
429Rate limit for your bracketHonor Retry-After, then retry.
503Temporarily unavailableExponential backoff and retry.

The ingest function handles each code; your rate limit scales with your balance bracket. Full semantics live in the API docs.

Pricing

TierUnlockJobs searchPer call
DefaultNone$0.50 / 1,000$0.0005
GrowthOne $100 deposit (10× off)$0.05 / 1,000$0.00005
ScaleOne $500 deposit (20× off)$0.025 / 1,000$0.000025

Tracking 30 role-and-location queries at 3 pages each, weekly, is about 90 calls a week — roughly 4,700 a year, or under $3 a year on Default and pennies at Scale. Pay-as-you-go, no subscription. See the full pricing page.

A note on compliance

Serpent's jobs endpoint reads the public LinkedIn jobs surface only — the listings a logged-out visitor sees. There is no login or credential in the flow. Aggregating public postings for market research is a common use case, but whether your specific use is permitted depends on LinkedIn's terms, your jurisdiction, and how you store and use the data. Treat compliance as your own decision; you remain responsible for lawful use.

Turn job postings into market intelligence

Aggregate and track public LinkedIn hiring data through one REST endpoint — no login, no proxies to manage. Jobs data from $0.50/1K, dropping to $0.025/1K at Scale, pay-as-you-go with no subscription.

Get Your Free API Key

Explore: LinkedIn API · Social Media APIs · Pricing

FAQ

What hiring data can I get from the LinkedIn Jobs API?

For any keyword and location you get a list of public job postings, each with job_id, job_title, company_name, location and job_posted_date. By ingesting and deduping those postings you can measure how many roles of a given type are open in a given place, break them down by company and location, and — by re-running on a schedule and saving the counts — track how that volume changes over time.

Can I filter LinkedIn jobs by a specific company?

Not directly. The jobs endpoint matches your keywords against the posting text, so searching a company name returns postings that mention that company (including roles at other firms) rather than only that company's own listings. For company-level signals, track the employer's headcount with the company endpoint instead, and use jobs search for role-and-location demand.

How do I track hiring trends over time?

Pick a set of role-and-location queries, ingest and dedupe the postings for each on a schedule (weekly works well), and save the unique-posting count with a date. Comparing those saved counts week over week shows whether demand for a role in a market is rising or cooling. The API returns a point-in-time snapshot, so the trend is something you build by storing snapshots.

How much does hiring-trend tracking cost?

Jobs search is $0.50 per 1,000 requests on Default, $0.05 on Growth (one $100 deposit) and $0.025 on Scale (one $500 deposit). Tracking 30 role-and-location queries at 3 pages each, weekly, is about 90 calls a week or roughly 4,700 a year — under $3 a year on Default. Pay-as-you-go, no subscription.

Is this real-time hiring data?

It is a live read of the public LinkedIn jobs surface at the moment you call it, so it is current — but it is a snapshot, not a streaming feed. For trend analysis that is exactly what you want: sample on a schedule and compare. It is not designed to alert you the instant a single new role is posted.