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

  1. Verify the expected inbox has conversations by checking linkedin.com/sales/inbox in the browser.
  2. Confirm the browser session is logged into the intended LinkedIn/Sales Navigator account.
  3. Re-run with a longer wait or retry if the inbox UI was still loading.
  4. 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

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


AI-assisted analysis of jackwener/OpenCLI@49907e53dc (2026-08-29). Data as JSON: /api/errors/3f167f0b37b0f864. Report an issue: GitHub.