{"record":{"id":"de0b56f152b2c8a9","repo":"jackwener/OpenCLI","slug":"no-indeed-job-posting-found-for-jk-jk","errorCode":null,"errorMessage":"No Indeed job posting found for jk \"${jk}\"","messagePattern":"No Indeed job posting found for jk \"(.+?)\"","errorType":"exception","errorClass":"EmptyResultError","httpStatus":null,"severity":"warning","filePath":"clis/indeed/job.js","lineNumber":72,"sourceCode":"                    .map(s => (s.textContent || '').trim())\n                    .filter(t => t && t !== salary)\n                    .join(', ');\n                const description = document.querySelector('#jobDescriptionText')?.innerText?.trim() ?? '';\n                return { ready, challenge, notFound, title, company, location, salary, jobType, description };\n            })()`);\n        }\n        catch (e) {\n            throw new CommandExecutionError(`Failed to scrape Indeed job detail DOM: ${e?.message ?? e}`, 'The page may not have fully loaded; try again.');\n        }\n\n        if (detail?.challenge) {\n            throw new CommandExecutionError('Indeed served a Cloudflare challenge page', 'Open https://www.indeed.com in the connected browser and clear the challenge, then retry.');\n        }\n        if (!detail?.ready) {\n            throw new CommandExecutionError('Indeed job page did not expose detail or error markers within 15s', 'Indeed may still be loading or the DOM shape may have changed; retry after opening Indeed in the connected browser.');\n        }\n        if (detail?.notFound || (!detail?.title && !detail?.description)) {\n            throw new EmptyResultError('indeed job', `No Indeed job posting found for jk \"${jk}\"`);\n        }\n\n        return [{\n            id: jk,\n            title: detail.title.replace(/\\s+/g, ' ').trim(),\n            company: detail.company.replace(/\\s+/g, ' ').trim(),\n            location: detail.location.replace(/\\s+/g, ' ').trim(),\n            salary: detail.salary.replace(/\\s+/g, ' ').trim(),\n            job_type: detail.jobType.replace(/\\s+/g, ' ').trim(),\n            description: detail.description,\n            url,\n        }];\n    },\n});\n","sourceCodeStart":54,"sourceCodeEnd":87,"githubUrl":"https://github.com/jackwener/OpenCLI/blob/49907e53dc3ade5c223ff0c4c2c2785687cec4e6/clis/indeed/job.js#L54-L87","documentation":"An EmptyResultError thrown when the job page loaded successfully but reports the posting as not found, or no title and no description could be extracted. It means the jk (job key) does not correspond to a live Indeed posting.","triggerScenarios":"detail.notFound is true, or both detail.title and detail.description are empty after a ready job page scrape for the given jk.","commonSituations":"Job posting was taken down/expired since you got the jk; jk copied incorrectly or truncated; posting is region-locked and renders empty for your browser's locale; Indeed removed the listing without redirecting.","solutions":["Verify the jk value is correct and complete (32-char job key)","Re-obtain the jk from a fresh Indeed search — the posting may have expired","Open the job URL directly in the connected browser to confirm it is live","Check the posting's region/locale matches your browser session","If you scrape many postings, refresh your source list to drop dead postings"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":"// refresh jk values from a recent search before fetching details\nconst fresh = await indeed.search({ query: title, location });\nif (!fresh.some(j => j.id === jk)) throw new Error(`jk ${jk} may be expired`);","typeGuard":null,"tryCatchPattern":"try {\n  const job = await indeed.job(jk);\n} catch (e) {\n  if (e instanceof EmptyResultError || /No Indeed job posting/.test(e.message)) {\n    // skip this posting / fall back to a fresh search\n  }\n  throw e;\n}","preventionTips":["Refresh job-key lists frequently; postings expire quickly","Validate jk format before calling (32-char hex-ish key)","Skip and log dead postings in bulk pipelines instead of failing","Open the URL in a browser to confirm the posting is region-visible"],"tags":["empty-result","not-found","indeed","job-key"],"backgroundTag":"resource-not-found","analyzedSha":"49907e53dc3ade5c223ff0c4c2c2785687cec4e6","analyzedAt":"2026-08-29T08:14:47.543Z","schemaVersion":2},"datasetVersion":"2026-08-29T17:17:51.833Z"}