jackwener/OpenCLI · warning · EmptyResultError
No people found on the rendered page for "${keywords}". The
Error message
No people found on the rendered page for "${keywords}". The search may have returned zero results, or the DOM markup may have changed. What it means
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).
Source
Thrown at clis/linkedin/people-search.js:241
if (looksLinkedInAuthWall(`${result.url || ''} ${result.error || ''}`)) {
throw new AuthRequiredError(LINKEDIN_DOMAIN, 'LinkedIn people search requires an active signed-in browser session.');
}
// If LinkedIn redirected away from the search page that
// usually means CUL was reached or the account is gated.
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.`);
}
if (!result || typeof result !== 'object') {
throw new CommandExecutionError('LinkedIn people search returned malformed extraction payload');
}
const candidateCount = parseNonNegativeCount(result.candidate_count, 'candidate_count');
parseNonNegativeCount(result.person_entries_count, 'person_entries_count');
const resolvedCount = parseNonNegativeCount(result.resolved_count, 'resolved_count');
const rows = normalizePeopleRows(result.rows);
if (rows.length === 0 && (candidateCount > 0 || resolvedCount > 0)) {
throw new CommandExecutionError('LinkedIn people search found profile candidates but could not parse stable result rows');
}
if (rows.length === 0) {
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.`);
}
return rows.slice(0, limit).map((p, i) => ({ rank: i + 1, ...p }));
},
});
export const __test__ = {
parseLimit,
buildSearchUrl,
normalizeProfileUrl,
normalizePeopleRows,
parseNonNegativeCount,
extractionScript,
};
View on GitHub (pinned to 49907e53dc)
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
Example fix
// before
await linkedin.peopleSearch({ keywords: 'senior vb.net devmond' });
// after
await linkedin.peopleSearch({ keywords: 'senior vb.net developer' }); Defensive patterns
Strategy: try-catch
Validate before calling
const result = await runSearch();
if (Array.isArray(result?.rows) && result.rows.length === 0 && !(result?.candidate_count > 0) && !(result?.resolved_count > 0)) {
console.warn('Search likely returned zero results for', keywords);
} Type guard
null
Try / catch
try {
const rows = await linkedinPeopleSearch(keywords);
} catch (e) {
if (e instanceof EmptyResultError || e.name === 'EmptyResultError') {
return []; // treat as zero results
}
throw e;
} Prevention
- 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
When it happens
Trigger: 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.
Common situations: 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.
Understand the failure class
Background: EmptyResultError / "no results found": when an API or scraper succeeds but returns zero rows — this error's family across 9 libraries.
Related errors
- No series found for '${brand}'. Check the brand name spellin
- This series has no koubei rating yet.
- ${command} returned no results
- NOT_FOUND
- guazi browse ${code}
AI-assisted analysis of jackwener/OpenCLI@49907e53dc (2026-08-29).
Data as JSON: /api/errors/649922a173c15ea8.
Report an issue: GitHub.