Skip to content

Instantly share code, notes, and snippets.

@barretts
Created March 26, 2025 03:29
Show Gist options
  • Select an option

  • Save barretts/dfd0f1f776d79b557a392174ced47b56 to your computer and use it in GitHub Desktop.

Select an option

Save barretts/dfd0f1f776d79b557a392174ced47b56 to your computer and use it in GitHub Desktop.
get applied job information from LinkedIn
function extractJobs(linkedInResponse) {
const jobs = [];
const jobElements = linkedInResponse?.data?.data?.searchDashClustersByAll?.elements?.[0]?.items || [];
const jobDetails = linkedInResponse?.included || [];
jobElements.forEach(({ item }) => {
const entityUrn = item?.["*entityResult"];
if (!entityUrn) return;
const jobDetail = jobDetails.find(detail => detail.entityUrn === entityUrn);
if (!jobDetail) return;
// Extract company logo URL
let companyLogo = null;
if (jobDetail.image?.attributes?.[0]?.detailData?.["*companyLogo"]) {
const companyUrn = jobDetail.image.attributes[0].detailData["*companyLogo"];
const companyData = jobDetails.find(detail => detail.entityUrn === companyUrn);
if (companyData?.logoResolutionResult?.vectorImage) {
const logo = companyData.logoResolutionResult.vectorImage;
const artifact = logo.artifacts?.find(a => a.width === 200) || logo.artifacts?.[0];
companyLogo = artifact ? logo.rootUrl + artifact.fileIdentifyingUrlPathSegment : null;
}
}
jobs.push({
title: jobDetail?.title?.text || "Unknown Title",
company: jobDetail?.primarySubtitle?.text || "Unknown Company",
location: jobDetail?.secondarySubtitle?.text || "Unknown Location",
jobUrl: jobDetail?.navigationUrl || "#",
postedTime: jobDetail?.insightsResolutionResults?.[0]?.simpleInsight?.title?.text || "Unknown Time",
trackingId: jobDetail?.trackingId || "N/A",
unread: jobDetail?.unreadIndicatorDetails ? "Yes" : "No",
companyLogo: companyLogo || "No Logo Available"
});
});
return jobs;
}
async function getAllJobs() {
let allJobs = [];
let start = 0;
const pageSize = 10;
let total = Infinity;
const headers = {
"accept": "",
"accept-language": "",
"cache-control": "",
"csrf-token": "",
"pragma": "",
"priority": "",
"sec-ch-prefers-color-scheme": "",
"sec-ch-ua": "",
"sec-ch-ua-mobile": "",
"sec-ch-ua-platform": "",
"sec-fetch-dest": "",
"sec-fetch-mode": "",
"sec-fetch-site": "",
"x-li-lang": "",
"x-li-page-instance": "",
"x-li-pem-metadata": "",
"x-li-track": "",
"x-restli-protocol-version": ""
};
while (total - start >= 1) {
const url = `https://www.linkedin.com/voyager/api/graphql?variables=(start:${start},query:(flagshipSearchIntent:SEARCH_MY_ITEMS_JOB_SEEKER,queryParameters:List((key:cardType,value:List(APPLIED)))))&queryId=voyagerSearchDashClusters.9c3177ca40ed191b452e1074f52445a8`;
try {
const response = await fetch(url, {
method: "GET",
headers,
referrer: "https://www.linkedin.com/my-items/saved-jobs/?cardType=APPLIED",
referrerPolicy: "strict-origin-when-cross-origin",
mode: "cors",
credentials: "include"
});
if (!response.ok) {
console.error("Error fetching data:", response.status);
break;
}
const json = await response.json();
allJobs.push(json);
total = json?.data?.data?.searchDashClustersByAll?.paging?.total || total;
start += pageSize;
} catch (error) {
console.error("Fetch error:", error);
break;
}
}
return allJobs;
}
(async () => {
const jobHolder = [];
const allJobsJson = await getAllJobs();
allJobsJson.forEach((resp) => {
const jobs = extractJobs(resp);
jobHolder.push(...jobs);
});
console.log(jobHolder);
})();
@barretts
Copy link
Copy Markdown
Author

Run from my Chrome console while logged into LinkedIn. Just update the headers with your own.

@lwcorp
Copy link
Copy Markdown

lwcorp commented May 14, 2026

No longer works:

Dead link

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment