{
  "slug": "csv-find-incomplete-rows",
  "name": "gizza-ai/csv-find-incomplete-rows",
  "version": "0.1.0",
  "title": "Find Incomplete CSV Rows — Flag rows with wrong field count or blank cells — gizza.ai",
  "description": "Scan a CSV for malformed rows: too few or too many fields, or blank cells in required columns. Runs in your browser. Free, private, no upload.",
  "tags": [
    "csv validation",
    "incomplete csv rows",
    "malformed csv",
    "csv field count",
    "csv missing values"
  ],
  "category": "data",
  "urls": {
    "page": "https://gizza.ai/tools/csv-find-incomplete-rows/",
    "markdown": "https://gizza.ai/tools/csv-find-incomplete-rows/index.md",
    "descriptor": "https://gizza.ai/tools/csv-find-incomplete-rows/tool.json",
    "deep_link_example": "https://gizza.ai/tools/csv-find-incomplete-rows/?data=name%2Cemail%2Cphone%0AAda%2Cada%40x.com%2C123%0ABo%2C%2C%0ACy%2Ccy%40x.com%2C456&header=true&delimiter=%2C&required=email%2Cphone"
  },
  "cli": "gizza tool csv-find-incomplete-rows \"name,email,phone\nAda,ada@x.com,123\nBo,,\nCy,cy@x.com,456\"",
  "tool": {
    "description": "Scan a CSV and flag incomplete or malformed rows: rows with too few or too many fields (relative to the header/first-row width), and rows with a blank cell in a column you mark as required. Returns the expected field count, the column names, and every flagged row with its line number, field count, issue types, and blank required columns. delimiter is a single char or comma/tab/semicolon/pipe; required is a comma-separated list of column names or 1-based indices. Runs locally.",
    "parameters": {
      "additionalProperties": false,
      "properties": {
        "data": {
          "description": "The CSV text to scan.",
          "type": "string"
        },
        "delimiter": {
          "default": ",",
          "description": "Field separator: a single char or 'comma'/'tab'/'semicolon'/'pipe'. Default ','.",
          "type": "string"
        },
        "header": {
          "default": true,
          "description": "Treat the first row as a header naming the columns (default true).",
          "type": "boolean"
        },
        "required": {
          "description": "Optional comma-separated list of column names or 1-based indices that must be non-blank on every row (e.g. \"email,phone\" or \"1,3\"). Blank cells in these columns are flagged.",
          "type": "string"
        }
      },
      "required": [
        "data"
      ],
      "type": "object"
    }
  }
}