jackwener/OpenCLI · info · EmptyResultError
No owned or subscribed lists found
Error message
No owned or subscribed lists found
What it means
EmptyResultError thrown when the Twitter lists payload was valid (shape check passed) but parseListsManagement extracted zero owned or subscribed lists. This is a semantic 'no data' signal rather than a malfunction: the account genuinely has no lists, or lists exist but were filtered out (e.g. the seen-set dedupe or pagination captured nothing).
Source
Thrown at clis/twitter/lists.js:174
'X-Csrf-Token': ct0,
'X-Twitter-Auth-Type': 'OAuth2Session',
'X-Twitter-Active-User': 'yes',
});
const apiUrl = buildUrl(queryId);
const data = await page.evaluate(`async () => {
const r = await fetch(${JSON.stringify(apiUrl)}, { headers: ${headers}, credentials: 'include' });
return r.ok ? await r.json() : { error: r.status };
}`);
if (data?.error) {
throw new CommandExecutionError(describeTwitterApiError('ListsManagementPageTimeline', data.error));
}
const seen = new Set();
if (!getListsManagementInstructions(data)) {
throw new CommandExecutionError('Twitter lists returned an unexpected payload shape');
}
const lists = parseListsManagement(data, seen);
if (lists.length === 0) {
throw new EmptyResultError('twitter lists', 'No owned or subscribed lists found');
}
return lists.slice(0, limit);
},
});
View on GitHub (pinned to 49907e53dc)
Solutions
- Verify the account actually has lists by visiting https://x.com/<username>/lists in the same browser session.
- Create at least one list or subscribe to one, then re-run the command.
- Confirm the session is authenticated as the intended account (a different profile may be loaded in the automation browser).
- If lists exist but the command still returns empty, capture the raw payload and report a parsing regression to the CLI maintainers.
Defensive patterns
Strategy: try-catch
Validate before calling
const lists = await twitterLists({ limit: 20 }).catch(err =>
err instanceof EmptyResultError ? [] : Promise.reject(err));
if (lists.length === 0) console.log('Account has no owned/subscribed lists'); Try / catch
try {
const lists = await twitterLists({ limit });
} catch (err) {
if (err.name === 'EmptyResultError') {
console.info('No lists on this account — nothing to do');
return [];
}
throw err;
} Prevention
- Treat EmptyResultError as an expected empty state, not a bug
- Confirm the authenticated account is the one you intend to inspect
- Check the account's lists page manually before automating against it
When it happens
Trigger: Calling the 'twitter lists' command with an account that owns no lists and subscribes to none, or where the captured payload's list entries are all duplicates/filtered so the parsed array is empty before list.slice(0, limit).
Common situations: New or cleaned-up X accounts with no lists; accounts whose lists are private/hidden in the current session; rate-limited or partially loaded pages where pagination never surfaced list entries.
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 device-follow notification tweets found.
- No trains found from ${fromStation.name} to ${toStation.name
- NO_DATA
- No Wayback snapshots for "${target}".
- Chess.com has no game archives for ${username}
AI-assisted analysis of jackwener/OpenCLI@49907e53dc (2026-08-29).
Data as JSON: /api/errors/8252ab509ab10461.
Report an issue: GitHub.