{
  "title": "CSV cell expansion",
  "human_url": "https://happytails.ai/en/data-tools/csv-cell-expansion/",
  "agent_url": "https://happytails.ai/agents/en/data-tools/csv-cell-expansion/",
  "language": "en",
  "markdown_url": "https://happytails.ai/en/data-tools/csv-cell-expansion.md",
  "content": "CSV cell expansion\nTurn a list inside one CSV cell into separate rows. Keep the parent fields and a source-record number for each result.\nHow can we improve this tool?\nReport a problem or share an idea.\nPlease leave out private information. Your message and the tool name go to our team via PostHog.\nHow to use CSV cell expansion\nPaste CSV and select the list column by its exact name.\nChoose separated text or JSON arrays and decide how to handle empty lists.\nReview the expanded rows and source-record numbers, then download the result.\nUseful next steps\nCSV row filter\nCSV unpivot\nDataset value mapper\nCSV to JSON\nWhat to expect\nTurn a list inside one CSV cell into separate rows. Keep the parent fields and a source-record number for each result. Choose the column containing lists and enter its literal separator, such as |. Each item becomes a new row, while every other field is copied from the parent record. A new source-record column identifies the original record, starting at 1 after the header. Separated text preserves spaces and empty tokens. If an item contains the list separator, choose JSON array format instead. JSON lists must contain strings, such as [\"red, blue\",\"green\"]. An empty cell or [] can retain one empty row or be dropped. A quoted multiline CSV record still has one source-record number. Review the expanded table and record count. The full result is downloadable as CSV with a JSON report. Oversized expansions fail with an error instead of returning a partial file. Formula protection prefixes potentially executable output strings with an apostrophe; original-string export is available for trusted machine processing.\nTry a small example\nid,tags\n001,red|blue\n002,",
  "content_format": "text/plain",
  "visibility": "public",
  "links": [
    {
      "name": "CSV row filter",
      "url": "https://happytails.ai/en/data-tools/csv-row-filter/"
    },
    {
      "name": "CSV unpivot",
      "url": "https://happytails.ai/en/data-tools/csv-unpivot/"
    },
    {
      "name": "Dataset value mapper",
      "url": "https://happytails.ai/en/data-tools/dataset-value-mapper/"
    },
    {
      "name": "CSV to JSON",
      "url": "https://happytails.ai/en/data-tools/csv-to-json/"
    }
  ],
  "tool": {
    "id": "csv-cell-expansion",
    "category": "data-tools",
    "built": true,
    "requirements": "Choose the column containing lists and enter its literal separator, such as |. Each item becomes a new row, while every other field is copied from the parent record. A new source-record column identifies the original record, starting at 1 after the header. Separated text preserves spaces and empty tokens. If an item contains the list separator, choose JSON array format instead. JSON lists must contain strings, such as [\"red, blue\",\"green\"]. An empty cell or [] can retain one empty row or be dropped. A quoted multiline CSV record still has one source-record number. Review the expanded table and record count. The full result is downloadable as CSV with a JSON report. Oversized expansions fail with an error instead of returning a partial file. Formula protection prefixes potentially executable output strings with an apostrophe; original-string export is available for trusted machine processing.",
    "implementation": {
      "fields": [
        {
          "key": "delimiter",
          "label": "Input CSV separator",
          "value": ",",
          "type": "select",
          "values": [
            ",",
            ";",
            "\t"
          ]
        },
        {
          "key": "column",
          "label": "List column",
          "value": "tags",
          "type": "text"
        },
        {
          "key": "format",
          "label": "List format",
          "value": "Separated text",
          "type": "select",
          "values": [
            "Separated text",
            "JSON array"
          ]
        },
        {
          "key": "itemSeparator",
          "label": "List separator",
          "value": "|",
          "type": "text",
          "help": "A literal separator, such as |. Spaces are preserved. For items containing the separator, use JSON array format.",
          "showWhen": {
            "format": [
              "Separated text"
            ]
          }
        },
        {
          "key": "empty",
          "label": "Empty lists",
          "value": "Keep empty row",
          "type": "select",
          "values": [
            "Keep empty row",
            "Drop row"
          ]
        },
        {
          "key": "sourceColumn",
          "label": "Added source-record column",
          "value": "_source_row",
          "type": "text"
        },
        {
          "key": "exportMode",
          "label": "Spreadsheet formula handling",
          "value": "Protect formulas",
          "type": "select",
          "values": [
            "Protect formulas",
            "Preserve original cells"
          ]
        }
      ],
      "live": true,
      "presentation": "metrics",
      "note": "Expand one list column while copying every other parent field. JSON lists accept arrays of strings only. Source-record numbers start at 1 after the header; a quoted multiline record counts once. Use a header row with unique column names. Up to 1,000,000 input characters, 10,000 data records, 100 columns and 100,000 cells. Strings and spaces are preserved. Output CSV uses commas and quotes every cell. Protect formulas prefixes risky output cells with an apostrophe; choose Preserve original cells only for trusted machine processing. Runs on your device.",
      "experience": {
        "automatic": true,
        "single": false,
        "inputMaxLength": 1000000,
        "inputMode": "text",
        "label": "CSV",
        "placeholder": "name,score\nAda,98\nSam,92",
        "help": "Include a header row. Quote cells that contain commas or new lines. Results update as you type. Up to 1,000,000 characters.",
        "action": null
      },
      "mode": "automatic",
      "interactive": false
    },
    "execution": "Browser interface",
    "api": null,
    "browser_agent": {
      "supported": true,
      "name": "run_current_tool",
      "discovery": "WebMCP on the human page in a supporting browser",
      "verification": "See audit/API-AUDIT.md; availability is not verification"
    }
  },
  "markdown": "# CSV cell expansion\n\n- Human page: https://happytails.ai/en/data-tools/csv-cell-expansion/\n- Markdown: https://happytails.ai/en/data-tools/csv-cell-expansion.md\n- Structured JSON: https://happytails.ai/agents/en/data-tools/csv-cell-expansion/index.json\n- Visibility: public\n\n## Tool capabilities\n\n| Property | Value |\n| --- | --- |\n| Tool ID | `csv-cell-expansion` |\n| Category | data-tools |\n| Implementation | Registered implementation. Registration alone is not a production-quality guarantee. |\n| Browser execution | Automatic updates after valid input or file selection. |\n| Browser processing | Browser; see tool notes for network behavior. |\n| HTTP API | Not callable through HTTP. |\n| Browser-agent interface | run_current_tool |\n\n### Implementation notes\n\nExpand one list column while copying every other parent field. JSON lists accept arrays of strings only. Source-record numbers start at 1 after the header; a quoted multiline record counts once. Use a header row with unique column names. Up to 1,000,000 input characters, 10,000 data records, 100 columns and 100,000 cells. Strings and spaces are preserved. Output CSV uses commas and quotes every cell. Protect formulas prefixes risky output cells with an apostrophe; choose Preserve original cells only for trusted machine processing. Runs on your device.\n\n### Inputs and settings\n\nText input: CSV.\n\nExample or placeholder shown in the interface (not a validated fixture):\n\n```text\nname,score\nAda,98\nSam,92\n```\n\nInclude a header row. Quote cells that contain commas or new lines. Results update as you type. Up to 1,000,000 characters.\n\n| Setting | Meaning | Control type | Default | Constraints |\n| --- | --- | --- | --- | --- |\n| `delimiter` | Input CSV separator | select | \",\" | Allowed: ,, ;, \t |\n| `column` | List column | text | \"tags\" |  |\n| `format` | List format | select | \"Separated text\" | Allowed: Separated text, JSON array |\n| `itemSeparator` | List separator | text | \"\\|\" |  |\n| `empty` | Empty lists | select | \"Keep empty row\" | Allowed: Keep empty row, Drop row |\n| `sourceColumn` | Added source-record column | text | \"_source_row\" |  |\n| `exportMode` | Spreadsheet formula handling | select | \"Protect formulas\" | Allowed: Protect formulas, Preserve original cells |\n\n### Browser-agent workflow\n\n1. Open the human page in a browser that supports WebMCP.\n2. Discover the interface exposed by that page; use its actual schema.\n3. Select files on the page first when the tool requires files.\n4. Call `run_current_tool` with valid input and settings.\n5. Inspect the returned result or error and the displayed output. Retrieve files from the displayed download links.\n\nCalls do not automatically copy or download results. Browser permissions still apply. Interface availability alone is not proof of successful execution.\n\n### Planning specification\n\nChoose the column containing lists and enter its literal separator, such as |. Each item becomes a new row, while every other field is copied from the parent record. A new source-record column identifies the original record, starting at 1 after the header. Separated text preserves spaces and empty tokens. If an item contains the list separator, choose JSON array format instead. JSON lists must contain strings, such as [\"red, blue\",\"green\"]. An empty cell or [] can retain one empty row or be dropped. A quoted multiline CSV record still has one source-record number. Review the expanded table and record count. The full result is downloadable as CSV with a JSON report. Oversized expansions fail with an error instead of returning a partial file. Formula protection prefixes potentially executable output strings with an apostrophe; original-string export is available for trusted machine processing.\n\nThis describes intended requirements. Use the implementation notes, interface schema and observed output to determine current support.\n\n### Complete machine-readable capability record\n\n```json\n{\n  \"id\": \"csv-cell-expansion\",\n  \"category\": \"data-tools\",\n  \"built\": true,\n  \"requirements\": \"Choose the column containing lists and enter its literal separator, such as |. Each item becomes a new row, while every other field is copied from the parent record. A new source-record column identifies the original record, starting at 1 after the header. Separated text preserves spaces and empty tokens. If an item contains the list separator, choose JSON array format instead. JSON lists must contain strings, such as [\\\"red, blue\\\",\\\"green\\\"]. An empty cell or [] can retain one empty row or be dropped. A quoted multiline CSV record still has one source-record number. Review the expanded table and record count. The full result is downloadable as CSV with a JSON report. Oversized expansions fail with an error instead of returning a partial file. Formula protection prefixes potentially executable output strings with an apostrophe; original-string export is available for trusted machine processing.\",\n  \"implementation\": {\n    \"fields\": [\n      {\n        \"key\": \"delimiter\",\n        \"label\": \"Input CSV separator\",\n        \"value\": \",\",\n        \"type\": \"select\",\n        \"values\": [\n          \",\",\n          \";\",\n          \"\\t\"\n        ]\n      },\n      {\n        \"key\": \"column\",\n        \"label\": \"List column\",\n        \"value\": \"tags\",\n        \"type\": \"text\"\n      },\n      {\n        \"key\": \"format\",\n        \"label\": \"List format\",\n        \"value\": \"Separated text\",\n        \"type\": \"select\",\n        \"values\": [\n          \"Separated text\",\n          \"JSON array\"\n        ]\n      },\n      {\n        \"key\": \"itemSeparator\",\n        \"label\": \"List separator\",\n        \"value\": \"|\",\n        \"type\": \"text\",\n        \"help\": \"A literal separator, such as |. Spaces are preserved. For items containing the separator, use JSON array format.\",\n        \"showWhen\": {\n          \"format\": [\n            \"Separated text\"\n          ]\n        }\n      },\n      {\n        \"key\": \"empty\",\n        \"label\": \"Empty lists\",\n        \"value\": \"Keep empty row\",\n        \"type\": \"select\",\n        \"values\": [\n          \"Keep empty row\",\n          \"Drop row\"\n        ]\n      },\n      {\n        \"key\": \"sourceColumn\",\n        \"label\": \"Added source-record column\",\n        \"value\": \"_source_row\",\n        \"type\": \"text\"\n      },\n      {\n        \"key\": \"exportMode\",\n        \"label\": \"Spreadsheet formula handling\",\n        \"value\": \"Protect formulas\",\n        \"type\": \"select\",\n        \"values\": [\n          \"Protect formulas\",\n          \"Preserve original cells\"\n        ]\n      }\n    ],\n    \"live\": true,\n    \"presentation\": \"metrics\",\n    \"note\": \"Expand one list column while copying every other parent field. JSON lists accept arrays of strings only. Source-record numbers start at 1 after the header; a quoted multiline record counts once. Use a header row with unique column names. Up to 1,000,000 input characters, 10,000 data records, 100 columns and 100,000 cells. Strings and spaces are preserved. Output CSV uses commas and quotes every cell. Protect formulas prefixes risky output cells with an apostrophe; choose Preserve original cells only for trusted machine processing. Runs on your device.\",\n    \"experience\": {\n      \"automatic\": true,\n      \"single\": false,\n      \"inputMaxLength\": 1000000,\n      \"inputMode\": \"text\",\n      \"label\": \"CSV\",\n      \"placeholder\": \"name,score\\nAda,98\\nSam,92\",\n      \"help\": \"Include a header row. Quote cells that contain commas or new lines. Results update as you type. Up to 1,000,000 characters.\",\n      \"action\": null\n    },\n    \"mode\": \"automatic\",\n    \"interactive\": false\n  },\n  \"execution\": \"Browser interface\",\n  \"api\": null,\n  \"browser_agent\": {\n    \"supported\": true,\n    \"name\": \"run_current_tool\",\n    \"discovery\": \"WebMCP on the human page in a supporting browser\",\n    \"verification\": \"See audit/API-AUDIT.md; availability is not verification\"\n  }\n}\n```\n\n## Page guide\n\nTurn a list inside one CSV cell into separate rows. Keep the parent fields and a source-record number for each result.\n\nHow can we improve this tool?\n\nReport a problem or share an idea.\n\nPlease leave out private information. Your message and the tool name go to our team via PostHog.\n\n### How to use CSV cell expansion\n\n1. Paste CSV and select the list column by its exact name.\n2. Choose separated text or JSON arrays and decide how to handle empty lists.\n3. Review the expanded rows and source-record numbers, then download the result.\n\n## Useful next steps\n\n- [CSV row filter](https://happytails.ai/en/data-tools/csv-row-filter/) ([Markdown](https://happytails.ai/en/data-tools/csv-row-filter.md))\n\n- [CSV unpivot](https://happytails.ai/en/data-tools/csv-unpivot/) ([Markdown](https://happytails.ai/en/data-tools/csv-unpivot.md))\n\n- [Dataset value mapper](https://happytails.ai/en/data-tools/dataset-value-mapper/) ([Markdown](https://happytails.ai/en/data-tools/dataset-value-mapper.md))\n\n- [CSV to JSON](https://happytails.ai/en/data-tools/csv-to-json/) ([Markdown](https://happytails.ai/en/data-tools/csv-to-json.md))\n\n## What to expect\n\nTurn a list inside one CSV cell into separate rows. Keep the parent fields and a source-record number for each result. Choose the column containing lists and enter its literal separator, such as |. Each item becomes a new row, while every other field is copied from the parent record. A new source-record column identifies the original record, starting at 1 after the header. Separated text preserves spaces and empty tokens. If an item contains the list separator, choose JSON array format instead. JSON lists must contain strings, such as \\[\"red, blue\",\"green\"\\]. An empty cell or \\[\\] can retain one empty row or be dropped. A quoted multiline CSV record still has one source-record number. Review the expanded table and record count. The full result is downloadable as CSV with a JSON report. Oversized expansions fail with an error instead of returning a partial file. Formula protection prefixes potentially executable output strings with an apostrophe; original-string export is available for trusted machine processing.\n\n### Try a small example\n\n```\nid,tags\n001,red|blue\n002,\n```\n"
}