{
  "slug": "duplicate-row-finder",
  "name": "gizza-ai/duplicate-row-finder",
  "version": "0.1.0",
  "title": "Duplicate Row Finder — Find Duplicate Rows in CSV Online — gizza.ai",
  "description": "Find and report duplicate rows in a CSV or table: group them, list line numbers, and see which columns drive the duplication. Browser-local, no upload, free.",
  "tags": [
    "find duplicate rows",
    "csv duplicate checker",
    "duplicate finder",
    "duplicate rows report",
    "csv duplicates"
  ],
  "category": "text",
  "urls": {
    "page": "https://gizza.ai/tools/duplicate-row-finder/",
    "markdown": "https://gizza.ai/tools/duplicate-row-finder/index.md",
    "descriptor": "https://gizza.ai/tools/duplicate-row-finder/tool.json",
    "deep_link_example": "https://gizza.ai/tools/duplicate-row-finder/?data=name%2Cemail%0AAlice%2Ca%40x.com%0ABob%2Cb%40y.com%0AAlice%2Ca%40x.com&columns=email&header=true&delimiter=%2C&ignore_case=true&ignore_whitespace=true&output=report"
  },
  "cli": "gizza tool duplicate-row-finder \"name,email\nAlice,a@x.com\nBob,b@y.com\nAlice,a@x.com\"",
  "tool": {
    "description": "Find duplicate rows in a CSV/delimited table and report them (read-only — it does NOT remove or rewrite rows; use csv-dedupe/fuzzy-dedupe for that). A row is a duplicate when it matches an earlier row on the chosen `columns` (1-based indices or header names) or, when blank, on the whole row. `ignore_case`/`ignore_whitespace` catch near-duplicates that differ only by casing or spacing. It groups the matches with their line numbers and profiles which columns drive the duplication. `output` = report (summary), csv (just the duplicate rows), or json (structured).",
    "parameters": {
      "additionalProperties": false,
      "properties": {
        "columns": {
          "default": "",
          "description": "Key columns to match on: comma-separated header names (needs header=true) or 1-based indices (e.g. 'email' or '1,3'). Blank = match the whole row.",
          "type": "string"
        },
        "data": {
          "description": "The table text to scan, e.g. CSV rows. One row per line.",
          "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 (used to name columns and excluded from the row scan). Default true.",
          "type": "boolean"
        },
        "ignore_case": {
          "default": true,
          "description": "Compare case-insensitively so 'Alice' and 'alice' count as the same. Default true.",
          "type": "boolean"
        },
        "ignore_whitespace": {
          "default": true,
          "description": "Trim and collapse whitespace before comparing so 'New  York ' matches 'New York'. Default true.",
          "type": "boolean"
        },
        "output": {
          "default": "report",
          "description": "Result format: report (human-readable summary + which columns drive duplication), csv (only the duplicate rows), or json (structured groups + per-column stats). Default report.",
          "enum": [
            "report",
            "csv",
            "json"
          ],
          "type": "string"
        }
      },
      "required": [
        "data"
      ],
      "type": "object"
    }
  }
}