GoogleChrome/lighthouse · error · Error
CSV output is not support for user flows
Error message
CSV output is not support for user flows
What it means
Thrown by ReportGenerator.generateReport when CSV output is requested for a user-flow result (a FlowResult object containing a 'steps' array). Lighthouse's CSV generator (generateReportCSV) only knows how to serialize a single Lighthouse Result (categories/audits), so a multi-step FlowResult has no CSV representation. The error message contains a typo ('support' instead of 'supported') in the shipped source.
Source
Thrown at report/generator/report-generator.js:178
* @param {LHResult['configSettings']['output']} outputModes
* @return {string|string[]}
*/
static generateReport(result, outputModes) {
const outputAsArray = Array.isArray(outputModes);
if (typeof outputModes === 'string') outputModes = [outputModes];
const output = outputModes.map(outputMode => {
// HTML report.
if (outputMode === 'html') {
if (ReportGenerator.isFlowResult(result)) {
return ReportGenerator.generateFlowReportHtml(result);
}
return ReportGenerator.generateReportHtml(result);
}
// CSV report.
if (outputMode === 'csv') {
if (ReportGenerator.isFlowResult(result)) {
throw new Error('CSV output is not support for user flows');
}
return ReportGenerator.generateReportCSV(result);
}
// JSON report.
if (outputMode === 'json') {
return JSON.stringify(result, null, 2);
}
throw new Error('Invalid output mode: ' + outputMode);
});
return outputAsArray ? output : output[0];
}
}
export {ReportGenerator};
View on GitHub (pinned to 9515cd4e58)
Solutions
- For FlowResult inputs, request 'html' or 'json' output instead of 'csv' — both are supported for flows (html via generateFlowReportHtml).
- If CSV per step is required, iterate flowResult.steps and call ReportGenerator.generateReportCSV(step.lhr) for each step's LHR individually.
- Add an isFlowResult(result) branch upstream so 'csv' is never passed for flow results.
Example fix
// before const out = ReportGenerator.generateReport(flowResult, 'csv'); // after const out = ReportGenerator.generateReport(flowResult, 'json'); // or, CSV per step: const csvPerStep = flowResult.steps.map(s => ReportGenerator.generateReportCSV(s.lhr));
Defensive patterns
Strategy: validation
Validate before calling
import {ReportGenerator} from 'report/generator/report-generator.js';
function safeGenerate(result, modes) {
const requested = Array.isArray(modes) ? modes : [modes];
if (ReportGenerator.isFlowResult(result) && requested.includes('csv')) {
throw new Error('CSV is unsupported for user flows; use html or json');
}
return ReportGenerator.generateReport(result, modes);
} Type guard
/** @param {LH.Result | LH.FlowResult} r */
function isFlowResult(r) {
return r != null && typeof r === 'object' && 'steps' in r && Array.isArray(r.steps);
} Try / catch
try {
ReportGenerator.generateReport(result, modes);
} catch (err) {
if (/not support for user flows/.test(err.message)) {
// switch to a flow-supported mode
ReportGenerator.generateReport(result, 'json');
} else throw err;
} Prevention
- Branch on ReportGenerator.isFlowResult(result) before choosing an output mode.
- Never include 'csv' in the requested modes when the input is a FlowResult.
- If per-step CSV is needed, map over result.steps and call generateReportCSV on each step.lhr.
When it happens
Trigger: Calling ReportGenerator.generateReport(flowResult, 'csv') or generateReport(flowResult, ['csv','html']) where flowResult is an LH.FlowResult (detected by ReportGenerator.isFlowResult via the presence of a 'steps' key).
Common situations: Running a Lighthouse user flow (multi-step navigation flow) and attempting to export the result with output mode 'csv'. Programmatic pipelines that pick output mode generically without distinguishing flow vs single-page results.
Related errors
AI-assisted analysis of GoogleChrome/lighthouse@9515cd4e58 (2026-08-13).
Data as JSON: /api/errors/5af7cf0601a5a8db.
Report an issue: GitHub.