{
  "slug": "csv-column-mapping-suggest",
  "name": "gizza-ai/csv-column-mapping-suggest",
  "version": "0.1.0",
  "title": "CSV Column Mapping Suggest — Match Differently Named Headers — gizza.ai",
  "description": "Suggest source-to-target CSV column mappings using fuzzy header similarity and sampled value overlap. Outputs confidence scores, reasons, and unmapped columns.",
  "tags": [
    "csv column mapping",
    "csv header match",
    "csv schema mapping",
    "csv align columns",
    "csv join prep",
    "csv fuzzy match"
  ],
  "category": "data",
  "urls": {
    "page": "https://gizza.ai/tools/csv-column-mapping-suggest/",
    "markdown": "https://gizza.ai/tools/csv-column-mapping-suggest/index.md",
    "descriptor": "https://gizza.ai/tools/csv-column-mapping-suggest/tool.json",
    "deep_link_example": "https://gizza.ai/tools/csv-column-mapping-suggest/?source=First%20Name%2CEmail%20Address%2CZip%20Code%0AAda%2Ca%40example.com%2C02139%0ABo%2Cb%40example.com%2C94107&target=email%2Cpostal_code%2Cfirst_name%0Aa%40example.com%2C02139%2CAda%0Ab%40example.com%2C94107%2CBo&delimiter=comma&header=true&sample_rows=50&header_weight=0.6&threshold=0.3&format=table"
  },
  "cli": "gizza tool csv-column-mapping-suggest \"First Name,Email Address,Zip Code\nAda,a@example.com,02139\nBo,b@example.com,94107\" 'target=email,postal_code,first_name\na@example.com,02139,Ada\nb@example.com,94107,Bo'",
  "tool": {
    "description": "Suggest a one-to-one mapping between two CSV files with differently named columns. The tool parses source and target CSV text, compares normalized header tokens and sampled value overlap, then ranks source→target suggestions with confidence scores and reasons. delimiter is comma/tab/semicolon/pipe; header toggles whether the first row is a header; sample_rows controls value-overlap rows (0 = header-only); header_weight balances header similarity vs value overlap; threshold filters weak suggestions; format is table, json, or csv. Runs locally and does not upload the CSV data.",
    "parameters": {
      "additionalProperties": false,
      "properties": {
        "delimiter": {
          "default": "comma",
          "description": "CSV delimiter used by both inputs: comma (default), tab, semicolon, or pipe.",
          "enum": [
            "comma",
            "tab",
            "semicolon",
            "pipe"
          ],
          "type": "string"
        },
        "format": {
          "default": "table",
          "description": "Output format: table (Markdown-style report), json (machine-readable suggestions), or csv (flat mapping rows). Default table.",
          "enum": [
            "table",
            "json",
            "csv"
          ],
          "type": "string"
        },
        "header": {
          "default": true,
          "description": "Whether the first row contains column names. When false, columns are named column_1, column_2, and so on.",
          "type": "boolean"
        },
        "header_weight": {
          "default": 0.6,
          "description": "Weight given to header-name similarity from 0.0 to 1.0; the remaining weight goes to value overlap. Default 0.6.",
          "maximum": 1,
          "minimum": 0,
          "type": "number"
        },
        "sample_rows": {
          "default": 50,
          "description": "How many data rows to sample for value-overlap scoring. Use 0 for header-only matching. Default 50, max 500.",
          "maximum": 500,
          "minimum": 0,
          "type": "integer"
        },
        "source": {
          "description": "Source CSV text whose columns need to be mapped. Include the header row unless header=false.",
          "type": "string"
        },
        "target": {
          "description": "Target CSV text or schema CSV to map into. Include the desired target header row unless header=false.",
          "type": "string"
        },
        "threshold": {
          "default": 0.3,
          "description": "Minimum combined score required to suggest a mapping. Raise it for stricter suggestions or lower it to surface weak matches. Default 0.3.",
          "maximum": 1,
          "minimum": 0,
          "type": "number"
        }
      },
      "required": [
        "source",
        "target"
      ],
      "type": "object"
    }
  }
}