Search LinkedIn job postings
Search LinkedIn job postings by keyword and location, with LinkedIn's own filters. Returns each posting's title, company, location, listed_at, URL, and workplace_type and easy_apply where the list shows them. employment_type, seniority_level, salary and description are null: linkedin/job gives them.
https://api.scrapefield.com/v1/linkedin/jobshttps://api.scrapefield.com/v1/linkedin/jobs?query=FerrariIn your code
const params = new URLSearchParams({
"query": "backend engineer"
});
const res = await fetch(`https://api.scrapefield.com/v1/linkedin/jobs?${params}`, {
headers: { Authorization: `Bearer ${process.env.SCRAPEFIELD_KEY}` },
});
const { data, meta } = await res.json();
console.log(data, meta.credits_charged);Parameters
| Parameter | What it does |
|---|---|
query | Job title or keywords, e.g. "backend engineer". |
location | Place name, e.g. "Berlin" or "United States". |
workplace_type | Only roles of this kind, as LinkedIn's filter names them. on-site · hybrid · remote |
posted_within | Only roles posted in the last day, week or month. day · week · month |
employment_type | Only roles of this kind. full-time · part-time · contract · temporary · internship |
experience_level | Only roles at this level, as LinkedIn's filter names them. internship · entry · associate · mid-senior · director · executive |
company_id | Only one company's roles: company_id in linkedin/company. |
easy_apply | Only roles that take applications on LinkedIn. |
sort | Most relevant first, or newest first. relevance · newest |
limit | At most this many results, 1–25. A page can hold fewer while next_cursor is set: read until it is null.1–25, default 25 |
cursor | The meta.next_cursor from the previous page. Omit for the first page. |
fresh | Skip the cache and fetch now. Charged normally. Not available on trial credits — buy any pack to unlock it. default false |
Response
Returns an array of linkedin_job. This is the demo’s answer, the one the playground above returns, in full rather than abbreviated — including the fields that come back null, because a field is null when the platform does not show it and you should know which ones those are before you build on them. A call with your key returns the account you ask for.
{
"data": [
{
"job_id": "4061273623",
"url": "https://www.linkedin.com/jobs/view/4061273623/",
"title": "Product Designer",
"company": {
"name": "Kestrel",
"url": "https://www.linkedin.com/company/kestrel/"
},
"location": "Berlin, Germany",
"workplace_type": "Hybrid",
"employment_type": "Full-time",
"seniority_level": "Director",
"salary": null,
"listed_at": "2026-08-24T02:23:30.000Z",
"easy_apply": false,
"description": "You will own a service end to end, from the schema to the on-call rota. We are small and everyone writes code."
},
{
"job_id": "4064558730",
"url": "https://www.linkedin.com/jobs/view/4064558730/",
"title": "Backend Engineer",
"company": {
"name": "Lantern",
"url": "https://www.linkedin.com/company/lantern/"
},
"location": "Austin, United States",
"workplace_type": "On-site",
"employment_type": "Contract",
"seniority_level": "Entry level",
"salary": null,
"listed_at": "2026-08-26T10:25:33.000Z",
"easy_apply": true,
"description": "You will own a service end to end, from the schema to the on-call rota. We are small and everyone writes code."
}
],
"meta": {
"request_id": "req_7f3ac1e94b2d40f8a1c6e5d2",
"credits_charged": 3,
"credits_remaining": 74218,
"cached": false,
"fetched_at": "2026-09-20T09:12:03Z",
"next_cursor": "eyJwIjoxLCJzIjoiYTNmOSJ9"
}
}Fields of linkedin_job
A LinkedIn job posting. Named after the words LinkedIn prints, since LinkedIn has no official data API.
| Field | What it is |
|---|---|
job_id | LinkedIn's numeric id — the number in /jobs/view/…. |
url | The posting. |
title | As the listing prints it. |
company | Who is hiring. |
company.name | As the listing prints it. |
company.url | The company page, where it has one. |
location | As printed, e.g. "Berlin, Germany". |
workplace_type | Where the work is done, as LinkedIn labels it. null where the listing does not say.On-site · Hybrid · Remote |
employment_type | "Full-time", "Part-time", "Contract", … |
seniority_level | "Entry level", "Mid-Senior level", … |
salary | As printed, where the posting shows one, e.g. "€70K/yr - €90K/yr". |
listed_at | When it was posted. null when the source does not say. |
easy_apply | Whether it takes applications on LinkedIn. null where the listing does not say. |
description | The full description, as text. |
What it costs
3 credits per successful call, whether we fetch it or serve it from cache — you pay for the answer, not for how we produced it. Responses are cached for 3 hours and a cached one tells you when the data was actually fetched. A call we fail costs 0 and is refunded automatically.
On the smallest pack that is $2.34 per 1,000 calls; on the largest, $1.32. The full table.
What people build with it
Questions
How much does the LinkedIn Jobs API cost?
3 credits a call: $2.34 per 1,000 calls on the smallest pack and $1.32 on the largest. A call that fails costs nothing, and the refund is automatic. A cached answer costs the same as a fresh one. Credits are bought in packs and never expire; there is no plan.
Do I need a LinkedIn account, a login or cookies?
No. You need a key from us and nothing from LinkedIn. We never take a customer's login, cookies or session, at any price, and no account of yours is ever at risk.
Can I try it without signing up?
Yes. Add demo=true and leave the key out, or press Send request in the playground on this page. The demo answers with a real answer about Ferrari, captured once a week, in exactly the shape a live call returns, whatever you ask, and charges nothing.
How fresh is the data?
An answer is kept for up to 3 hours, and a cached one says when it was fetched, in meta.fetched_at. Add fresh=true to fetch it again now, at the same price; it needs any purchase, not the trial.
What does it return?
A list of linkedin_job objects. Its fields are named after the words LinkedIn prints, since LinkedIn has no official data API. A field is null when LinkedIn does not show it, never missing. Every field is described on this page.
How do I get more than one page?
Pass meta.next_cursor back as cursor, and stop when it is null. Each page is a call, priced the same. A cursor lasts as long as the answer it belongs to is cached.
Can an AI agent call it?
Yes: it is the MCP tool search_linkedin_jobs on our MCP server, with the same parameters, answer and price. Without a key, the tool answers from the demo.