{"record":{"id":"649922a173c15ea8","repo":"jackwener/OpenCLI","slug":"no-people-found-on-the-rendered-page-for-keywor","errorCode":null,"errorMessage":"No people found on the rendered page for \"${keywords}\". The search may have returned zero results, or the DOM markup may have changed.","messagePattern":"No people found on the rendered page for \"(.+?)\"\\. The search may have returned zero results, or the DOM markup may have changed\\.","errorType":"error_code","errorClass":"EmptyResultError","httpStatus":null,"severity":"warning","filePath":"clis/linkedin/people-search.js","lineNumber":241,"sourceCode":"            if (looksLinkedInAuthWall(`${result.url || ''} ${result.error || ''}`)) {\n                throw new AuthRequiredError(LINKEDIN_DOMAIN, 'LinkedIn people search requires an active signed-in browser session.');\n            }\n            // If LinkedIn redirected away from the search page that\n            // usually means CUL was reached or the account is gated.\n            throw new CommandExecutionError(`LinkedIn redirected away from the search page (${result.error}). Likely Commercial Use Limit reached - the limit resets on the 1st of next month.`);\n        }\n        if (!result || typeof result !== 'object') {\n            throw new CommandExecutionError('LinkedIn people search returned malformed extraction payload');\n        }\n        const candidateCount = parseNonNegativeCount(result.candidate_count, 'candidate_count');\n        parseNonNegativeCount(result.person_entries_count, 'person_entries_count');\n        const resolvedCount = parseNonNegativeCount(result.resolved_count, 'resolved_count');\n        const rows = normalizePeopleRows(result.rows);\n        if (rows.length === 0 && (candidateCount > 0 || resolvedCount > 0)) {\n            throw new CommandExecutionError('LinkedIn people search found profile candidates but could not parse stable result rows');\n        }\n        if (rows.length === 0) {\n            throw new EmptyResultError(`No people found on the rendered page for \"${keywords}\". The search may have returned zero results, or the DOM markup may have changed.`);\n        }\n        return rows.slice(0, limit).map((p, i) => ({ rank: i + 1, ...p }));\n    },\n});\n\nexport const __test__ = {\n    parseLimit,\n    buildSearchUrl,\n    normalizeProfileUrl,\n    normalizePeopleRows,\n    parseNonNegativeCount,\n    extractionScript,\n};\n","sourceCodeStart":223,"sourceCodeEnd":255,"githubUrl":"https://github.com/jackwener/OpenCLI/blob/49907e53dc3ade5c223ff0c4c2c2785687cec4e6/clis/linkedin/people-search.js#L223-L255","documentation":"This EmptyResultError is thrown when a LinkedIn people search scrape completed but normalizePeopleRows returned zero rows AND the page reported no candidates (candidate_count and resolved_count are both 0 or falsy). It distinguishes a genuine/likely empty result from the parse-failure case (error 2350).","triggerScenarios":"Calling people-search with keywords that match no profiles on the rendered page, or the page failed to render any results at all — rows.length === 0 with candidateCount === 0 and resolvedCount === 0.","commonSituations":"Overly specific search keywords; searching a niche that has no LinkedIn matches; region/account restrictions yielding zero results; page did not actually load results (rate limiting or soft auth wall) so counters are also zero.","solutions":["Broaden or correct the keywords passed to the search","Verify the session is signed in and re-run so the page actually loads results","Retry after a delay if LinkedIn rate-limited or soft-blocked the request","Check the rendered page manually to confirm whether the search truly has zero results"],"exampleFix":"// before\nawait linkedin.peopleSearch({ keywords: 'senior vb.net devmond' });\n// after\nawait linkedin.peopleSearch({ keywords: 'senior vb.net developer' });","handlingStrategy":"try-catch","validationCode":"const result = await runSearch();\nif (Array.isArray(result?.rows) && result.rows.length === 0 && !(result?.candidate_count > 0) && !(result?.resolved_count > 0)) {\n  console.warn('Search likely returned zero results for', keywords);\n}","typeGuard":"null","tryCatchPattern":"try {\n  const rows = await linkedinPeopleSearch(keywords);\n} catch (e) {\n  if (e instanceof EmptyResultError || e.name === 'EmptyResultError') {\n    return []; // treat as zero results\n  }\n  throw e;\n}","preventionTips":["Validate keywords non-empty and reasonably specific before searching","Handle EmptyResultError as a normal zero-result outcome in pipelines","Retry broadening the query automatically when zero results are returned","Confirm the session is signed in so pages render real results"],"tags":["linkedin","empty-results","scraping"],"backgroundTag":"empty-result-set","analyzedSha":"49907e53dc3ade5c223ff0c4c2c2785687cec4e6","analyzedAt":"2026-08-29T08:14:47.543Z","schemaVersion":2},"datasetVersion":"2026-08-29T12:17:43.993Z"}