Skip to main content

Parse CSV

Parses a CSV string or file into an array of row objects, making each column accessible by name in downstream expressions.

Properties

PropertyRequiredDescription
CSV InputYesThe CSV data to parse. Accepts a string expression or a file reference from a File Upload or HTTP Request node. Supports expressions
DelimiterNoSingle-character column separator. Defaults to ,
First Row is HeaderNoWhether the first row contains column names. Defaults to Yes

Output

FieldTypeDescription
rowsArray or FileParsed rows. See Large files below
countNumberTotal number of parsed rows

Access the output in downstream nodes:

{{ $nodes['Parse CSV'].count }}
{{ $nodes['Parse CSV'].rows[0].email }}

Replace Parse CSV with the actual name you gave the node.

Behaviour

  • If First Row is Header is Yes (default), each row becomes an object where the keys are the column headers from the first row.
  • If First Row is Header is No, each row is an array of values indexed by position.
  • An empty or whitespace-only input produces rows: [] and count: 0 without failing.
  • If the data cannot be parsed the node fails.

Large files

When the input is a file reference (a BinaryRef from a File Upload or HTTP Request node), Parse CSV streams the content directly from storage rather than loading it into memory. The parsed rows are written to a temporary file in JSONL format (one JSON object per line) and rows in the output becomes a file reference rather than an in-memory array.

This file reference can be passed directly to a Loop or Transform node — both automatically detect the JSONL format and process the data row-by-row without materialising the full dataset in memory. This makes it practical to process files of hundreds of megabytes or more.

Parse CSV → Loop (Items: {{ $nodes['Parse CSV'].rows }}) → body branch per row

Example: process a large CSV from storage

  1. Add a File Upload node set to the Load operation. Point it at the CSV file reference.
  2. Add a Parse CSV node. Set CSV Input to {{ $nodes['File Upload'].output }}.
  3. Connect a Loop node. Set Items to {{ $nodes['Parse CSV'].rows }}.
  4. Inside the loop body, reference columns with {{ $nodes['My Loop'].currentItem.columnName }}.

Notes

  • Column names are taken verbatim from the header row, including spaces and casing. Use bracket notation in expressions if a name contains spaces: $nodes['Parse CSV'].rows[0]['First Name'].
  • For tab-separated files, set Delimiter to \t (a literal tab character).
  • When parsing a string input directly, all rows are held in memory. For large files, prefer passing a file reference.