Piotr VassevPiotr Vassev

How to Export LinkedIn Job Details for a Hiring Shortlist

When you already have a set of LinkedIn job links, the next task is often to compare requirements, posted pay, and employers. You do not need to repeat a broad search to extract those details.

The LinkedIn Job Details Scraper turns individual job URLs into structured descriptions, salary fields, company join keys, and application routes. I maintain it. This walkthrough prepares a small set of known postings for an application or hiring-research sheet.

How to Export LinkedIn Job Details for a Hiring Shortlist

Start with job links, not a keyword

This Actor runs on Apify without LinkedIn cookies, a login, or a proxy. Despite the input name searchUrls, it targets job details. Supply /jobs/view/ links or URLs containing a currentJobId; the Actor extracts the individual job ID. A generic keyword-search URL without a job ID is not the same task.

Open Input in JSON view:

{
  "searchUrls": ["https://www.linkedin.com/jobs/view/4390867392"]
}

This URL is the historical README example. Replace it with a current posting you want to inspect if it has expired. For a small real comparison, add a few current job links to the same array. The input schema has no maxResults field; you control scope with the URL list.

Click Start and open the dataset after completion. Confirm that jobId, jobUrl, and jobTitle correspond to the supplied posting before comparing the remaining fields.

Read salary and applicant counts with their source text

A shortened historical output shows:

{
  "jobId": "4390867392",
  "jobTitle": "Controls Engineer",
  "companySlug": "totalenergies",
  "numApplicantsCaption": "Over 200 applicants",
  "applicantCount": 200,
  "applyType": "offsite",
  "salaryText": "$80,000.00 - $125,000.00",
  "salaryMin": 80000,
  "salaryMax": 125000,
  "salaryCurrency": "$",
  "salaryPeriod": "year"
}

The numeric applicant count is useful for sorting, but the original caption says over 200. Do not report it as exactly 200 applicants or infer a hiring probability from it. Retain both fields so the number does not lose its qualification.

Likewise, salaryCurrency may be a symbol rather than an ISO code. $ alone is insufficient to combine postings from different countries. Confirm currency from location and source context before normalizing. salaryPeriod may be inferred from the amount when the text omits it; verify the original wording when pay period affects your decision.

LinkedIn job-details dataset with salary and company information

Earlier LinkedIn results show the job and company fields available for comparison.

Build a job table and a company table

Export CSV with jobId, jobUrl, jobTitle, jobLocation, companyName, companySlug, companyUrl, seniorityLevel, employmentType, salary fields, applyType, and scrapedAt. Export JSON when you need criteria, similarJobs, or peopleAlsoViewed arrays.

Deduplicate postings by jobId. Then group by companySlug to build the employer view, retaining the normalized companyUrl. Counting five job IDs under one company gives you five observed postings, not five hiring companies. It also does not prove five open headcount slots, since one posting may cover several hires or be a repost.

Filter by location and employment type, then read description to verify requirements. Add a review column for seniority mismatches: a structured “Entry level” label does not override a description asking for extensive experience.

For pay comparison, keep only rows with compatible currency and period and usable numeric bounds. A missing range means no parsed posted salary, not zero compensation. Use applyType to distinguish an offsite application route from Easy Apply, then follow the posting when you are ready to act.

Related jobs are discovery links, not fully enriched copies of the main record. If one is relevant, add its URL to a deliberate later input list rather than counting it as another completed job extraction.

Check plan pricing and the scheduled change

Pricing as of September 6, 2026: per-job rates are $0.003 on Free, $0.0025 on Bronze, $0.002 on Silver, and $0.0012 on Gold, Platinum, or Diamond. Five returned jobs therefore cost $0.015 at the Free rate. The active configuration has no separate start event.

A change scheduled for September 9, 2026 sets Free and Bronze to $0.004, Silver to $0.0036, and Gold, Platinum, and Diamond to $0.003 per job. Check the live pricing page, particularly before saving a recurring task.

If a job is missing or sparse, open the supplied URL to check whether the posting still exists and exposes the expected fields. postedTimeAgo is relative text, so preserve scrapedAt with it; do not turn “17 hours ago” into an exact publication timestamp without acknowledging that approximation.

The Node.js example shows how to run this Actor from code and retrieve its dataset.

Earlier video walkthrough

The video shows the earlier interface. Use the input names and pricing in this guide.

Frequently asked questions

Can I use this Actor for a full LinkedIn keyword search?

This Actor extracts known job details. Supply job URLs or URLs containing currentJobId; it does not expose keyword, location, or search-pagination inputs.

Does applicantCount represent an exact count?

Not always. Keep numApplicantsCaption with it: a caption such as “Over 200 applicants” may be normalized to 200, which should not be reported as an exact total.

Piotr Vassev

Piotr Vassev

Founder of FalconScrape. Building production-grade web scraping systems and data automation pipelines for businesses worldwide.

Connect on LinkedIn