jackwener/OpenCLI · warning · EmptyResultError
linkedin salesnav-inbox
Error message
linkedin salesnav-inbox
What it means
This is an EmptyResultError raised when the Sales Navigator inbox was fetched successfully but contained zero conversations (and --unread-only was not set). The library surfaces the command name plus a human-readable reason instead of returning an empty result set.
Source
Thrown at clis/linkedin/salesnav-inbox.js:191
strategy: Strategy.UI,
browser: true,
args: [
{ name: 'limit', type: 'number', default: DEFAULT_LIMIT, help: 'Maximum conversations to return (1-500)' },
{ name: 'max-pages', type: 'number', default: 30, help: 'Maximum Sales Navigator API pages to fetch' },
{ name: 'unread-only', type: 'bool', default: false, help: 'Return only unread conversations' },
],
columns: ['rank', 'thread_id', 'thread_url', 'person_name', 'last_message_snippet', 'last_activity_time', 'unread', 'unread_count', 'total_message_count', 'archived', 'participants', 'next_page_starts_at'],
func: async (page, args) => {
if (!page) throw new CommandExecutionError('Browser session required for linkedin salesnav-inbox');
const limit = parseLimit(args.limit);
const maxPages = parseLimit(args['max-pages'], 30);
await page.goto(SALES_INBOX_URL);
await page.wait(4);
let rows = await fetchInboxRows(page, { limit, maxPages });
if (args['unread-only']) rows = rows.filter((row) => row.unread);
if (rows.length === 0) {
if (args['unread-only']) return [];
throw new EmptyResultError('linkedin salesnav-inbox', 'No Sales Navigator conversations were found.');
}
return rows.slice(0, limit).map((row, index) => ({ ...row, rank: index + 1 }));
},
});
export const __test__ = {
THREAD_DECORATION,
normalizeWhitespace,
parseLimit,
encodeRestliDecoration,
salesnavThreadUrl,
threadListUrl,
parseSalesnavThreads,
fetchInboxRows,
};
View on GitHub (pinned to 49907e53dc)
Solutions
- Verify the expected inbox has conversations by checking linkedin.com/sales/inbox in the browser.
- Confirm the browser session is logged into the intended LinkedIn/Sales Navigator account.
- Re-run with a longer wait or retry if the inbox UI was still loading.
- If you only want unread threads, pass --unread-only so an empty result returns [] instead of throwing.
Example fix
// before linkedin salesnav-inbox // after linkedin salesnav-inbox --unread-only // returns [] gracefully when none match
Defensive patterns
Strategy: try-catch
Try / catch
try { const rows = await run('linkedin salesnav-inbox'); } catch (e) { if (e.name === 'EmptyResultError' || /No Sales Navigator conversations/.test(e.message)) return []; throw e; } Prevention
- Pass --unread-only when empty results are acceptable (returns []).
- Verify the account actually has conversations before automating.
- Confirm you're logged into the expected Sales Navigator account.
- Retry once if the inbox UI may have been slow to load.
When it happens
Trigger: fetchInboxRows returns an empty rows array and args['unread-only'] is falsy — the inbox pagination completed with no threads found.
Common situations: Brand-new or empty Sales Navigator account; logged into the wrong LinkedIn account; inbox UI failed to load threads despite page.goto succeeding (slow load, region restrictions); all conversations were archived or deleted.
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
- 1point3acres thread
- 1point3acres user
- amazon ${definition.commandName} did not expose any ranked i
- amazon search did not expose any product cards
- No posts found in this Band
AI-assisted analysis of jackwener/OpenCLI@49907e53dc (2026-08-29).
Data as JSON: /api/errors/3f167f0b37b0f864.
Report an issue: GitHub.