> ## Documentation Index
> Fetch the complete documentation index at: https://docs.spojit.com/llms.txt
> Use this file to discover all available pages before exploring further.

# CSV Tools

> Parse, convert, filter, sort, and transform CSV data.

The CSV Tools connector provides operations for working with CSV data: parsing, converting to and from JSON, filtering rows, and transforming columns.

<Note>No connection required; this utility connector works out of the box.</Note>

## Tools

<AccordionGroup>
  <Accordion title="to-json: Convert CSV to JSON">
    <ParamField body="csv" type="string" required>
      CSV string to convert.
    </ParamField>

    <ParamField body="header" type="boolean" default="true">
      First row is headers.
    </ParamField>

    <ParamField body="delimiter" type="string" default=",">
      Field delimiter.
    </ParamField>

    <ParamField body="skipEmptyLines" type="boolean" default="true">
      Skip empty lines.
    </ParamField>

    **Example request:**

    ```json theme={null}
    {
      "csv": "name,age,city\nAlice,30,Portland\nBob,25,Seattle"
    }
    ```

    **Example response:**

    ```json theme={null}
    {
      "items": [
        { "name": "Alice", "age": 30, "city": "Portland" },
        { "name": "Bob", "age": 25, "city": "Seattle" }
      ],
      "count": 2
    }
    ```
  </Accordion>

  <Accordion title="from-json: Convert JSON to CSV">
    <ParamField body="data" type="object[]" required>
      Array of objects to convert.
    </ParamField>

    <ParamField body="columns" type="string[]">
      Specific columns to include.
    </ParamField>

    <ParamField body="delimiter" type="string" default=",">
      Field delimiter.
    </ParamField>

    <ParamField body="header" type="boolean" default="true">
      Include header row.
    </ParamField>

    <ParamField body="quotes" type="boolean" default="false">
      Quote all fields.
    </ParamField>

    <ParamField body="encoding" type="enum" default="utf8">
      Output encoding for the `csv` field: `utf8` (default) or `base64` (for email attachments, SFTP uploads, or knowledge-base embedding). The response includes an `encoding` tag.
    </ParamField>

    **Example request:**

    ```json theme={null}
    {
      "data": [
        { "name": "Alice", "age": 30, "city": "Portland" },
        { "name": "Bob", "age": 25, "city": "Seattle" }
      ],
      "columns": ["name", "city"]
    }
    ```

    **Example response:**

    ```json theme={null}
    {
      "csv": "name,city\nAlice,Portland\nBob,Seattle",
      "rows": 2
    }
    ```
  </Accordion>

  <Accordion title="parse: Parse CSV with options">
    Parse CSV with detailed configuration.

    <ParamField body="csv" type="string" required>
      CSV string to parse.
    </ParamField>

    <ParamField body="delimiter" type="string">
      Field delimiter.
    </ParamField>

    <ParamField body="newline" type="string">
      Newline character.
    </ParamField>

    <ParamField body="quoteChar" type="string" default="&#x22;">
      Quote character.
    </ParamField>

    <ParamField body="escapeChar" type="string" default="&#x22;">
      Escape character.
    </ParamField>

    <ParamField body="header" type="boolean" default="true">
      First row is headers.
    </ParamField>

    <ParamField body="dynamicTyping" type="boolean" default="true">
      Auto-convert values to numbers.
    </ParamField>

    <ParamField body="skipEmptyLines" type="boolean" default="true">
      Skip empty lines.
    </ParamField>

    <ParamField body="preview" type="number">
      Only parse the first N rows.
    </ParamField>

    **Example request:**

    ```json theme={null}
    {
      "csv": "product;price;stock\nWidget;9.99;150\nGadget;24.50;75\nDoohickey;4.99;300",
      "delimiter": ";",
      "preview": 2
    }
    ```

    **Example response:**

    ```json theme={null}
    {
      "items": [
        { "product": "Widget", "price": 9.99, "stock": 150 },
        { "product": "Gadget", "price": 24.5, "stock": 75 }
      ],
      "count": 2,
      "meta": {
        "delimiter": ";",
        "linebreak": "\n",
        "fields": ["product", "price", "stock"]
      }
    }
    ```
  </Accordion>

  <Accordion title="filter: Filter rows by condition">
    <ParamField body="csv" type="string" required>
      CSV string.
    </ParamField>

    <ParamField body="column" type="string" required>
      Column name to filter on.
    </ParamField>

    <ParamField body="operator" type="string" required>
      Operator: `equals`, `not_equals`, `contains`, `not_contains`, `gt`, `gte`, `lt`, `lte`, or `regex`.
    </ParamField>

    <ParamField body="value" type="string | number" required>
      Value to compare.
    </ParamField>

    <ParamField body="delimiter" type="string" default=",">
      Field delimiter.
    </ParamField>

    <ParamField body="encoding" type="enum" default="utf8">
      Output encoding for the `csv` field: `utf8` (default) or `base64` (for email attachments, SFTP uploads, or knowledge-base embedding). The response includes an `encoding` tag.
    </ParamField>

    **Example request:**

    ```json theme={null}
    {
      "csv": "name,age,city\nAlice,30,Portland\nBob,25,Seattle\nCarol,35,Portland",
      "column": "city",
      "operator": "equals",
      "value": "Portland"
    }
    ```

    **Example response:**

    ```json theme={null}
    {
      "csv": "name,age,city\nAlice,30,Portland\nCarol,35,Portland",
      "rows": 2
    }
    ```
  </Accordion>

  <Accordion title="sort: Sort rows">
    <ParamField body="csv" type="string" required>
      CSV string.
    </ParamField>

    <ParamField body="columns" type="string[]" required>
      Columns to sort by.
    </ParamField>

    <ParamField body="orders" type="string[]">
      Sort order for each column: `asc` or `desc`.
    </ParamField>

    <ParamField body="delimiter" type="string" default=",">
      Field delimiter.
    </ParamField>

    <ParamField body="encoding" type="enum" default="utf8">
      Output encoding for the `csv` field: `utf8` (default) or `base64` (for email attachments, SFTP uploads, or knowledge-base embedding). The response includes an `encoding` tag.
    </ParamField>

    **Example request:**

    ```json theme={null}
    {
      "csv": "name,age,city\nAlice,30,Portland\nBob,25,Seattle\nCarol,35,Portland",
      "columns": ["city", "age"],
      "orders": ["asc", "desc"]
    }
    ```

    **Example response:**

    ```json theme={null}
    {
      "csv": "name,age,city\nCarol,35,Portland\nAlice,30,Portland\nBob,25,Seattle",
      "rows": 3
    }
    ```
  </Accordion>

  <Accordion title="dedupe: Remove duplicate rows">
    <ParamField body="csv" type="string" required>
      CSV string.
    </ParamField>

    <ParamField body="columns" type="string[]">
      Columns to check for uniqueness (all columns if omitted).
    </ParamField>

    <ParamField body="keepFirst" type="boolean" default="true">
      Keep the first occurrence (or last if false).
    </ParamField>

    <ParamField body="delimiter" type="string" default=",">
      Field delimiter.
    </ParamField>

    <ParamField body="encoding" type="enum" default="utf8">
      Output encoding for the `csv` field: `utf8` (default) or `base64` (for email attachments, SFTP uploads, or knowledge-base embedding). The response includes an `encoding` tag.
    </ParamField>

    **Example request:**

    ```json theme={null}
    {
      "csv": "name,department\nAlice,Engineering\nBob,Sales\nCarol,Engineering\nDave,Sales",
      "columns": ["department"]
    }
    ```

    **Example response:**

    ```json theme={null}
    {
      "csv": "name,department\nAlice,Engineering\nBob,Sales",
      "rows": 2
    }
    ```
  </Accordion>

  <Accordion title="transform: Rename, reorder, or select columns">
    <ParamField body="csv" type="string" required>
      CSV string.
    </ParamField>

    <ParamField body="select" type="string[]">
      Columns to include.
    </ParamField>

    <ParamField body="rename" type="object">
      Rename mapping (e.g., `{"old_name": "new_name"}`).
    </ParamField>

    <ParamField body="delimiter" type="string" default=",">
      Field delimiter.
    </ParamField>

    <ParamField body="encoding" type="enum" default="utf8">
      Output encoding for the `csv` field: `utf8` (default) or `base64` (for email attachments, SFTP uploads, or knowledge-base embedding). The response includes an `encoding` tag.
    </ParamField>

    **Example request:**

    ```json theme={null}
    {
      "csv": "first_name,last_name,email\nAlice,Smith,alice@example.com\nBob,Jones,bob@example.com",
      "rename": { "first_name": "firstName", "last_name": "lastName" },
      "select": ["firstName", "email"]
    }
    ```

    **Example response:**

    ```json theme={null}
    {
      "csv": "firstName,email\nAlice,alice@example.com\nBob,bob@example.com",
      "rows": 2
    }
    ```
  </Accordion>

  <Accordion title="merge: Merge multiple CSVs">
    <ParamField body="csvs" type="string[]" required>
      Array of CSV strings to merge.
    </ParamField>

    <ParamField body="delimiter" type="string" default=",">
      Field delimiter.
    </ParamField>

    <ParamField body="encoding" type="enum" default="utf8">
      Output encoding for the `csv` field: `utf8` (default) or `base64` (for email attachments, SFTP uploads, or knowledge-base embedding). The response includes an `encoding` tag.
    </ParamField>

    **Example request:**

    ```json theme={null}
    {
      "csvs": [
        "name,role\nAlice,Admin",
        "name,role\nBob,User\nCarol,Editor"
      ]
    }
    ```

    **Example response:**

    ```json theme={null}
    {
      "csv": "name,role\nAlice,Admin\nBob,User\nCarol,Editor",
      "rows": 3
    }
    ```
  </Accordion>

  <Accordion title="info: Get CSV statistics">
    <ParamField body="csv" type="string" required>
      CSV string.
    </ParamField>

    <ParamField body="delimiter" type="string" default=",">
      Field delimiter.
    </ParamField>

    <ParamField body="sampleSize" type="number" default="3">
      Number of sample rows to include.
    </ParamField>

    **Example request:**

    ```json theme={null}
    {
      "csv": "name,age,city\nAlice,30,Portland\nBob,25,Seattle\nCarol,35,Portland\nDave,28,Denver",
      "sampleSize": 2
    }
    ```

    **Example response:**

    ```json theme={null}
    {
      "rowCount": 4,
      "columnCount": 3,
      "columns": ["name", "age", "city"],
      "delimiter": ",",
      "sample": [
        { "name": "Alice", "age": 30, "city": "Portland" },
        { "name": "Bob", "age": 25, "city": "Seattle" }
      ]
    }
    ```
  </Accordion>

  <Accordion title="add-column: Add a new column">
    <ParamField body="csv" type="string" required>
      CSV string.
    </ParamField>

    <ParamField body="columnName" type="string" required>
      New column name.
    </ParamField>

    <ParamField body="value" type="string | number | boolean" required>
      Fixed value or column reference (e.g., `$existingColumn`).
    </ParamField>

    <ParamField body="delimiter" type="string" default=",">
      Field delimiter.
    </ParamField>

    <ParamField body="encoding" type="enum" default="utf8">
      Output encoding for the `csv` field: `utf8` (default) or `base64` (for email attachments, SFTP uploads, or knowledge-base embedding). The response includes an `encoding` tag.
    </ParamField>

    **Example request:**

    ```json theme={null}
    {
      "csv": "name,age\nAlice,30\nBob,25",
      "columnName": "status",
      "value": "active"
    }
    ```

    **Example response:**

    ```json theme={null}
    {
      "csv": "name,age,status\nAlice,30,active\nBob,25,active",
      "rows": 2
    }
    ```
  </Accordion>

  <Accordion title="slice: Get a range of rows">
    <ParamField body="csv" type="string" required>
      CSV string.
    </ParamField>

    <ParamField body="start" type="number" default="0">
      Start index.
    </ParamField>

    <ParamField body="end" type="number">
      End index (exclusive).
    </ParamField>

    <ParamField body="delimiter" type="string" default=",">
      Field delimiter.
    </ParamField>

    <ParamField body="encoding" type="enum" default="utf8">
      Output encoding for the `csv` field: `utf8` (default) or `base64` (for email attachments, SFTP uploads, or knowledge-base embedding). The response includes an `encoding` tag.
    </ParamField>

    **Example request:**

    ```json theme={null}
    {
      "csv": "name,age\nAlice,30\nBob,25\nCarol,35\nDave,28",
      "start": 1,
      "end": 3
    }
    ```

    **Example response:**

    ```json theme={null}
    {
      "csv": "name,age\nBob,25\nCarol,35",
      "rows": 2
    }
    ```
  </Accordion>
</AccordionGroup>
