{
  "slug": "csv-fill-down",
  "name": "gizza-ai/csv-fill-down",
  "version": "0.1.0",
  "title": "CSV Fill Down — Forward-Fill Empty Cells Online — gizza.ai",
  "description": "Forward-fill empty CSV cells with the last non-empty value above them, like a spreadsheet fill-down. Fill up too, pick columns. Runs in your browser, free.",
  "tags": [
    "csv fill down",
    "forward fill csv",
    "fill empty cells",
    "spreadsheet fill down",
    "fill blanks csv"
  ],
  "category": "data",
  "urls": {
    "page": "https://gizza.ai/tools/csv-fill-down/",
    "markdown": "https://gizza.ai/tools/csv-fill-down/index.md",
    "descriptor": "https://gizza.ai/tools/csv-fill-down/tool.json",
    "deep_link_example": "https://gizza.ai/tools/csv-fill-down/?data=region%2Crep%0AWest%2CAnn%0A%2C%0A%2CBob%0AEast%2C&columns=region&direction=down&header=true&delimiter=%2C"
  },
  "cli": "gizza tool csv-fill-down \"region,rep\nWest,Ann\n,\n,Bob\nEast,\"",
  "tool": {
    "description": "Forward-fill empty cells in a CSV with the last non-empty value above them, like a spreadsheet fill-down. A cell is empty when it is blank or whitespace-only. Set `direction`=up to back-fill from the next value below instead. `columns` (1-based indices or header names) limits filling to chosen columns; empty fills every column. `header`=true keeps the first row and lets you name columns. `delimiter` is a char or comma/tab/semicolon/pipe. Empties with no value to carry (leading cells on fill-down, trailing on fill-up) stay empty.",
    "parameters": {
      "additionalProperties": false,
      "properties": {
        "columns": {
          "default": "",
          "description": "Optional comma-separated columns to fill (1-based indices, or header names when header=true), e.g. 'region' or '1,3'. Empty = fill every column.",
          "type": "string"
        },
        "data": {
          "description": "The CSV text to fill. Empty (or whitespace-only) cells are filled from the nearest non-empty value in their column.",
          "type": "string"
        },
        "delimiter": {
          "default": ",",
          "description": "Field separator: a single char or 'comma'/'tab'/'semicolon'/'pipe'. Default ','.",
          "type": "string"
        },
        "direction": {
          "default": "down",
          "description": "Fill direction: 'down' carries the last non-empty value above into blanks below it; 'up' carries the next non-empty value below into blanks above it. Default 'down'.",
          "enum": [
            "down",
            "up"
          ],
          "type": "string"
        },
        "header": {
          "default": true,
          "description": "Treat the first row as a header: keep it verbatim (never filled) and allow naming columns. Default true.",
          "type": "boolean"
        }
      },
      "required": [
        "data"
      ],
      "type": "object"
    }
  }
}