LinkedIn Job Postings API — Public Hiring Data avatar

LinkedIn Job Postings API — Public Hiring Data

Pricing

from $33.50 / 1,000 public job postings

Go to Apify Store
LinkedIn Job Postings API — Public Hiring Data

LinkedIn Job Postings API — Public Hiring Data

Query public LinkedIn job postings by role, location, employment type, and posting age. Receive normalized records through an Apify dataset or API. Public job postings only; no accounts, profiles, or people data. Pay per delivered record.

Pricing

from $33.50 / 1,000 public job postings

Rating

0.0

(0)

Developer

NexGen Watch

NexGen Watch

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Share

Query public LinkedIn job postings and receive normalized hiring records through an Apify dataset or API response. This actor is for recruiting, hiring-intelligence, and labour-market workflows that need repeatable structured records rather than manual browsing.

What it delivers

  • One structured record per public posting, keyed by LinkedIn's numeric job_id.
  • Role title, hiring organisation, place, posting date, salary text when published, and the public posting URL.
  • Optional public description retrieval with an explicit description_status.
  • Source URL and UTC observed_at provenance on every record.
  • A bounded 500-record maximum and fail-loud handling for blocks, throttling, source-shape loss, and time-budget exhaustion.

This actor reads public logged-out job-posting pages only. It does not use accounts, cookies, profiles, people records, applicant data, or authenticated LinkedIn surfaces.

Pricing

Pay per delivered record. The record is pushed to the dataset before its charge fires.

EventUnitFREEBRONZESILVERGOLD / PLATINUM / DIAMOND
apify-actor-startRun start$0.02$0.02$0.02$0.02
job_recordPublic job posting delivered$0.05$0.045$0.04$0.0335

Worked example: 200 delivered public postings cost $0.02 + (200 × $0.05) = $10.02 on the base customer tier. Empty, blocked, or undelivered records never trigger job_record.

Input

{
"keywords": "data engineer",
"location": "United States",
"jobType": "full-time",
"datePosted": "past-week",
"maxResults": 100,
"fetchDescriptions": false,
"watchMode": false
}

The supplied store prefill requests five recent records and normally completes in well under five minutes. maxResults cannot exceed 500.

Sample output

{
"job_id": "4425881907",
"title": "Data Engineer",
"company": "Example Cloud",
"location": "United States",
"posted_at": "2026-08-12",
"job_url": "https://www.linkedin.com/jobs/view/data-engineer-at-example-4425881907",
"salary_text": "$120k-$150k",
"employment_type": "full-time",
"description": null,
"description_status": "not_requested",
"change_type": null,
"changed_fields": [],
"first_seen": null,
"detected_at": null,
"source_url": "https://www.linkedin.com/jobs/view/data-engineer-at-example-4425881907",
"observed_at": "2026-08-12T17:14:17Z",
"query": "data engineer"
}

Delta mode

Set watchMode to true and schedule stateless runs. The first run writes a KV baseline and emits zero alerts. Later runs deliver only newly seen postings, changed postings, and postings absent from the public result window on two consecutive eligible runs. The source-native composite key is job_id; a maximum of 500 deltas can be delivered in one run.

Delta mode stores only its bounded baseline in a named KV store. It does not run an always-on process. A partial source read never commits a new baseline.

API, CLI, and MCP

API:

curl -X POST "https://api.apify.com/v2/acts/nexgenwatch~linkedin-job-postings-api/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"keywords":"data engineer","location":"United States","maxResults":100}'

CLI:

$apify call nexgenwatch/linkedin-job-postings-api -p '{"keywords":"data engineer","maxResults":100}'

MCP: expose this actor through Apify's Actor tools and ask an agent to call nexgenwatch/linkedin-job-postings-api with the same JSON input. The output remains the default Apify dataset; no agent receives broader source access.

Use with

linkedin-job-postings-api → company/domain enrichment → hiring-intensity analysis → scheduled delta runs. Keep downstream enrichment on company-level public facts; this actor supplies no personal profiles or applicant data.

Honest limits

  • LinkedIn can throttle, block, or change its public guest-posting HTML without notice. A blocked first page fails loudly and bills no job_record; a later block retains delivered rows and labels the run PARTIAL.
  • Public result windows are not a complete census of all jobs. Ranking and availability can vary by place, query, and time.
  • Salary, description, and employment type can be absent because the source did not publish them.
  • removed_from_public_search means a posting disappeared from this public query twice; it is not proof that the employer closed the requisition.
  • The exact-host robots policy is re-read every run. This actor proceeds under Steve's recorded one-actor source ruling dated 2026-08-12; it never defeats a login, CAPTCHA, WAF, or paywall.

FAQ

Does this actor access LinkedIn profiles or people data? No. It is limited to public logged-out job postings.

Does it require my LinkedIn account? No account, cookie, credential, or authenticated surface is accepted.

What happens when the source blocks a request? Three bounded attempts run before the terminal decision. Zero delivered records fails loud and bills nothing; an interruption after delivery is labeled PARTIAL.

Why can description be null? Description retrieval is optional, and some public detail fragments are missing, removed, or blocked. description_status records the reason.

Does a zero-row run mean the actor succeeded? Only a usable public response with no matching cards is GENUINE_EMPTY. Login pages, challenges, 403/429/5xx responses, and timeouts are block-class outcomes.

Compliance

Public logged-out job postings only; transparent NexGenWatchBot/1.0 user agent; no authentication, profiles, people data, CAPTCHA solving, browser spoofing, paywall circumvention, or anti-bot defeat. Comply on objection.