Scrape LinkedIn jobs, no browser to babysit

Search public job listings by keyword and location, or pass a job URL for the full posting. No login, no infinite scroll to fight.

Public, logged-out data Full 16-field job record 3,000 free / month
tldr.txt
two modes: search jobs by keyword + location, or a job URL for the full record
search returned 10 job cards in 822ms on our test, logged out
a job URL returns 16 fields: seniority, employment type, applicants, full description, more
one credit per successful call, an empty result is free, credits never expire
salary shows only when the listing publishes one, so treat it as sometimes present
ONE ENDPOINT

Two modes, one call

Everything runs through GET /v1/linkedin?type=jobs with your key in the x-api-key header. Pass keywords to search, or a job url for the full record. You change the inputs, not the endpoint.

Search by keyword

Pass keywords and an optional location. You get a list of job cards, six fields each, built for fast discovery. Our test returned 10 cards.

titlecompanylocationdatePostedjobUrljobId

Full record by URL

Pass a job url and get the full posting, 16 fields, including the complete description text, seniority, and applicant count.

seniorityemploymentTypejobFunctionindustriessalaryapplicantsdescriptionisEasyApply
THE REAL RESPONSE

What you get

I ran both calls on 2026-07-15 against public LinkedIn job pages. Here are the requests and the shapes that came back, trimmed only where an array repeats or a description runs long. Dawson Young, founder of CrustAPI.

1. The search: 10 job cards in 822ms

# search public jobs by keyword and location curl "https://crustapi.com/v1/linkedin?type=jobs&keywords=software+engineer&location=Austin,+TX" \ -H "x-api-key: YOUR_KEY"
{ "type": "linkedin-jobs", "query": "software engineer", "tookMs": 822, "jobs": [ { "title": "Exceptional Software Engineer", "company": "xAI", "location": "Austin, TX", "datePosted": "2026-06-30", "jobUrl": "https://www.linkedin.com/jobs/view/exceptional-software-engineer-at-xai-4416423134", "jobId": "4416423134" } // 10 job cards total ] }

2. The full record: pass a job URL, get 16 fields in 948ms

# the full posting for one job curl "https://crustapi.com/v1/linkedin?type=jobs&url=https://www.linkedin.com/jobs/view/exceptional-software-engineer-at-xai-4416423134" \ -H "x-api-key: YOUR_KEY"
{ "type": "linkedin-jobs", "tookMs": 948, "jobs": { "title": "Exceptional Software Engineer", "company": "xAI", "companyUrl": "https://www.linkedin.com/company/xai", "companyLogo": "https://media.licdn.com/dms/image/...", "location": "Austin, TX", "seniority": "Mid-Senior level", "employmentType": "Full-time", "jobFunction": "Engineering and Information Technology", "industries": "Technology, Information and Internet", "salary": null, "applicants": "Over 200 applicants", "postedDate": "2 weeks ago", "isEasyApply": false, "description": "ABOUT xAI ...", // full posting text "jobUrl": "https://www.linkedin.com/jobs/view/4416423134", "jobPostingId": "4416423134" } }

The salary field was null on this posting, because LinkedIn did not publish a structured pay range for it. It is filled only when the listing shows one, so treat it as sometimes present. The search returns thin cards on purpose, so discovery stays fast; pass a job URL when you need the full 16-field record. Something look off? Email support@crustapi.com.

Run these exact calls free
3,000 credits a month. No card, no contract.
Get started →
MEASURED JULY 15, 2026

Speed, measured

These are the response times from the live calls I ran on 2026-07-15. Search is quick because the cards are thin. The full record is a little slower because it carries the whole posting, description and all.

Search (10 cards returned)
time822ms
Full record (16 fields)
time948ms

A search can occasionally come back empty, which is free. When it does return jobs, each card carries the jobUrl you feed straight back in to pull the full record.

WHO IT'S FOR

Who this is for

This endpoint is a fit if you need fresh public job listings as clean JSON, without standing up and maintaining your own scraper.

Job boards and ATS

Recruiters

Hiring-trend research

THE WORKED MATH

What it costs

One credit is one successful call, whether that is a search or a full-record pull. An empty result is free. Packs are pay-as-you-go and the credits never expire, so a paused project does not burn what you already bought.

FREE EVERY MONTH
3,000 credits

No card. The free tier resets to 3,000 credits every month and does not stack.

THEN PAY AS YOU GO
1 credit / call

Packs start at $49 for 25,000 credits and the rate drops as the pack grows. Credits never expire.

The full ladder: 25k $49 · 100k $149 · 500k $549 · 2.5M $1,999 · 10M $6,500, ex-tax. Empty results are free, so a search that finds nothing does not cost you.

MORE THAN JOBS

Part of the full LinkedIn suite

The jobs endpoint is one surface of the CrustAPI LinkedIn data API. The same key and the same endpoint also cover public profiles, companies, posts, and people search. See how they fit together, with receipts and an honest vendor price table, on the LinkedIn Scraper API page.

See the full suite →
BEFORE YOU ASK

Common questions

# search, then pull the full record for the one you want curl "https://crustapi.com/v1/linkedin?type=jobs&keywords=KEYWORDS&location=CITY" -H "x-api-key: YOUR_KEY"

Full parameter reference at /docs#linkedin.

WORKS WITH YOUR STACK

Try it on your own searches

Point the endpoint at the roles and cities you actually track. The free tier is real, and the JSON decides, not this page.

Get 3,000 free credits
No credit card required