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

  1. For FlowResult inputs, request 'html' or 'json' output instead of 'csv' — both are supported for flows (html via generateFlowReportHtml).
  2. If CSV per step is required, iterate flowResult.steps and call ReportGenerator.generateReportCSV(step.lhr) for each step's LHR individually.
  3. 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

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.