{
  "slug": "csv-cleaner",
  "name": "gizza-ai/csv-cleaner",
  "version": "0.1.0",
  "title": "CSV Cleaner — Trim, Dedupe & Fix Messy CSV Online",
  "description": "Clean a messy CSV in your browser: trim whitespace, remove duplicate rows, drop empty rows, fill blanks, and normalize delimiters. No upload, free.",
  "tags": [
    "csv cleaner",
    "clean csv",
    "trim whitespace csv",
    "remove duplicate rows",
    "fix messy csv"
  ],
  "category": "data",
  "urls": {
    "page": "https://gizza.ai/tools/csv-cleaner/",
    "markdown": "https://gizza.ai/tools/csv-cleaner/index.md",
    "descriptor": "https://gizza.ai/tools/csv-cleaner/tool.json",
    "deep_link_example": "https://gizza.ai/tools/csv-cleaner/?data=name%20%2C%20age%0A%20Alice%20%2C30%0ABob%2C25%0A%2C%2C%0ABob%2C25&header=true&delimiter=%2C&output_delimiter=same&trim=true&dedupe=true&drop_empty_rows=true&empty_cells=keep&fill_value=N%2FA&line_ending=lf"
  },
  "cli": "gizza tool csv-cleaner \"name , age\n Alice ,30\nBob,25\n,,\nBob,25\"",
  "tool": {
    "description": "Clean a CSV in one pass: trim leading/trailing whitespace from every cell, remove duplicate rows (first kept), drop fully-empty rows, optionally fill empty cells with a value, and normalize the delimiter and line endings. `header`=true keeps the first row and exempts it from dedup/drop/fill. Each cleaning step is an independent toggle. Delimiters accept a char or comma/tab/semicolon/pipe.",
    "parameters": {
      "additionalProperties": false,
      "properties": {
        "data": {
          "description": "The CSV text to clean.",
          "type": "string"
        },
        "dedupe": {
          "default": true,
          "description": "Remove rows identical to an earlier row (first kept). Default true.",
          "type": "boolean"
        },
        "delimiter": {
          "default": ",",
          "description": "Input field separator: a single char or 'comma'/'tab'/'semicolon'/'pipe'. Default ','.",
          "type": "string"
        },
        "drop_empty_rows": {
          "default": true,
          "description": "Drop rows whose every cell is empty or whitespace-only. Default true.",
          "type": "boolean"
        },
        "empty_cells": {
          "default": "keep",
          "description": "Empty cells: 'keep' leaves them, 'fill' replaces them with fill_value. Default 'keep'.",
          "enum": [
            "keep",
            "fill"
          ],
          "type": "string"
        },
        "fill_value": {
          "default": "",
          "description": "Value written into empty cells when empty_cells='fill' (e.g. 'N/A' or '0'). Default empty.",
          "type": "string"
        },
        "header": {
          "default": true,
          "description": "Treat the first row as a header: keep it and exempt it from dedup, empty-row drop, and cell fill. Default true.",
          "type": "boolean"
        },
        "line_ending": {
          "default": "lf",
          "description": "Line ending for the output: 'lf' (\\n) or 'crlf' (\\r\\n, Windows/Excel). Default 'lf'.",
          "enum": [
            "lf",
            "crlf"
          ],
          "type": "string"
        },
        "output_delimiter": {
          "default": "same",
          "description": "Delimiter for the cleaned output. 'same' keeps the input delimiter. Default 'same'.",
          "enum": [
            "same",
            "comma",
            "tab",
            "semicolon",
            "pipe"
          ],
          "type": "string"
        },
        "trim": {
          "default": true,
          "description": "Strip leading/trailing whitespace from every cell. Default true.",
          "type": "boolean"
        }
      },
      "required": [
        "data"
      ],
      "type": "object"
    }
  }
}