> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.meetgail.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.meetgail.com/_mcp/server.

# Parse CSV

> Reads a spreadsheet file into rows your workflow can loop over and act on.

The Parse CSV node reads a `.csv` file and turns it into a list of rows the
workflow can work with. Each row becomes a record with named columns, so later
steps can read individual values, filter, or loop over every row. It is how a
workflow makes sense of a spreadsheet that arrived as a file, whether it was
uploaded at the start or produced by an earlier step.

## When to use it

* Someone uploads a contact list or import file and you need to process each row.
* An earlier step produced a spreadsheet file and you want to read its contents
  back in.
* You want to filter or limit a file's rows before acting on them, such as
  keeping only Florida contacts.

## Inputs

| Field      | What it's for                                                                       | Example                                   |
| ---------- | ----------------------------------------------------------------------------------- | ----------------------------------------- |
| File       | The spreadsheet file to read, usually from an upload or an earlier step.            | The file uploaded at the start of the run |
| Has Header | Whether the first row is column names rather than data.                             | `Yes`                                     |
| Columns    | The columns to keep (with a header) or the names to give each column (without one). | `Name`, `Email`, `Phone`                  |
| Filter     | A test applied to each row so only the rows you want come through.                  | Keep only rows where state is `FL`        |
| Skip Rows  | A number of rows to drop from the start.                                            | `1`                                       |
| Max Rows   | The most rows to return.                                                            | `100`                                     |

The file usually comes from an earlier step written as an
[expression](/platform/workflows/core-concepts/expressions/using-expressions-in-nodes), and the
filter is an expression too.

## Outputs

| Field        | What you get back                                         |
| ------------ | --------------------------------------------------------- |
| Rows         | The parsed rows, each with its columns available by name. |
| Column Names | The list of columns in the result.                        |
| Row Count    | How many rows came back.                                  |

Column names are tidied into a consistent form so you can read them the same way
every time, for example a column titled `First Name` becomes available as
`first_name`.

## Example

A workflow starts when an agent uploads a spreadsheet of new prospects. A Parse
CSV node reads the file with its header row, keeps only the name, email, and
phone columns, and drops any row outside Florida. A
[For Each](/platform/workflows/node-reference/logic-and-flow/for-each) step then walks the
resulting rows, adding each prospect to the agency's CRM.

![The Parse CSV configuration panel, showing the file source and header setting.](https://fdr-prod-docs-files-public.s3.us-east-1.amazonaws.com/gail.docs.buildwithfern.com/f721094beb83893a27002b3d54bf21b8d1f68934f3dd891f166d666c930611d9/docs/pages/platform/workflows/assets/files-and-documents-parse-csv.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIA6KXJSKKNFOCF7G4B%2F20260823%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260823T232904Z&X-Amz-Expires=604800&X-Amz-Signature=a14bce281d66c7fa2762b1c8f7935252ce5cfd2865e10a0213aa44b1235c89e0&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject)

A very large file can be too big to read in one pass. When that happens, put a
[Slice CSV](/platform/workflows/node-reference/files-and-documents/slice-csv) step in
front to break the file into smaller pieces, then parse one piece at a time
inside a [For Each](/platform/workflows/node-reference/logic-and-flow/for-each) loop.

## Related nodes

#### [Slice CSV](/platform/workflows/node-reference/files-and-documents/slice-csv)

Break a file too large to read at once into smaller, parseable pieces.

#### [Create CSV](/platform/workflows/node-reference/files-and-documents/create-csv)

Write a spreadsheet file from a list of records instead of reading one.

#### [For Each](/platform/workflows/node-reference/logic-and-flow/for-each)

Repeat a set of steps for every row the file produced.

#### [Create Text File](/platform/workflows/node-reference/files-and-documents/create-text-file)

Build a file from content you supply.