{
  "title": "CSV fuzzy match",
  "human_url": "https://happytails.ai/en/data-tools/csv-fuzzy-match/",
  "agent_url": "https://happytails.ai/agents/en/data-tools/csv-fuzzy-match/",
  "language": "en",
  "markdown_url": "https://happytails.ai/en/data-tools/csv-fuzzy-match.md",
  "content": "CSV fuzzy match\nFind near-matching text records in two CSV files and review scored suggestions.\nHow can we improve this tool?\nReport a problem or share an idea.\nPlease leave out private information. Your message and the tool name go to our team via PostHog.\nHow to use CSV fuzzy match\nPaste both CSV tables and select their text match columns.\nChoose normalization, minimum similarity and suggestions per source row.\nReview the suggested pairs before making any changes to the source data.\nUseful next steps\nCSV reconciliation report\nDataset value mapper\nPrepare the source\nPaste both CSV tables and select their text match columns.\nChoose the matching rules\nChoose normalization, minimum similarity and suggestions per source row.\nReview and keep the result\nReview the suggested pairs before making any changes to the source data. Uses Unicode code-point Levenshtein distance. Similarity is 100 times one minus distance divided by the longer normalized length. Suggestions never automatically merge records; a right-side record may match several source records.",
  "content_format": "text/plain",
  "visibility": "public",
  "links": [
    {
      "name": "CSV reconciliation report",
      "url": "https://happytails.ai/en/data-tools/csv-reconciliation-report/"
    },
    {
      "name": "Dataset value mapper",
      "url": "https://happytails.ai/en/data-tools/dataset-value-mapper/"
    }
  ],
  "tool": {
    "id": "csv-fuzzy-match",
    "category": "data-tools",
    "built": true,
    "requirements": "Uses Unicode code-point Levenshtein distance. Similarity is 100 times one minus distance divided by the longer normalized length. Suggestions never automatically merge records; a right-side record may match several source records. Up to 1,000,000 characters, 10,000 data records, 100 columns and 100,000 cells across the sources. Files for multi-source tools are limited to 4,000,000 bytes total. Reports retain at most 500 diagnostic findings and state any omitted count. CSV and JSON outputs are limited to 4,000,000 characters. Fuzzy matching additionally limits selected cells to 256 code points, comparisons to 25,000 pairs and estimated edit-distance work to 5,000,000 cells. Output is budgeted incrementally before retaining each row; expanded decimal output counts toward the same 4,000,000-character limit even when input uses short exponent notation.",
    "implementation": {
      "fields": [
        {
          "key": "separator",
          "label": "Input CSV separator",
          "value": ",",
          "type": "select",
          "values": [
            ",",
            ";",
            "\t"
          ]
        },
        {
          "key": "comparison",
          "label": "Comparison CSV",
          "value": "id,amount\nA,10.00\nB,3.50\n",
          "type": "textarea",
          "help": "Paste the second table, including its header row. Both tables use the selected separator."
        },
        {
          "key": "leftField",
          "label": "Left match column",
          "value": "name",
          "type": "text"
        },
        {
          "key": "rightField",
          "label": "Right match column",
          "value": "name",
          "type": "text"
        },
        {
          "key": "normalization",
          "label": "Text comparison",
          "value": "Trim and lowercase",
          "type": "select",
          "values": [
            "Exact characters",
            "Trim and lowercase",
            "NFKC, trim and lowercase"
          ]
        },
        {
          "key": "minimum",
          "label": "Minimum similarity (%)",
          "value": 80,
          "type": "number",
          "min": 0,
          "max": 100
        },
        {
          "key": "maximum",
          "label": "Suggestions per left record",
          "value": 3,
          "type": "number",
          "min": 1,
          "max": 10,
          "step": 1
        },
        {
          "key": "outputSafety",
          "label": "CSV output cells",
          "value": "Protect spreadsheet cells",
          "type": "select",
          "values": [
            "Protect spreadsheet cells",
            "Preserve original cells"
          ]
        }
      ],
      "live": false,
      "presentation": "metrics",
      "note": "Runs locally on your device. CSV requires unique nonempty headers. Up to 1,000,000 characters, 10,000 data records and 100,000 cells across inputs, with 100 columns. Quoted multiline cells are supported. Each JSON settings field is limited to 100,000 characters. Output files are bounded to 4,000,000 characters. Diagnostic reports contain at most 500 findings and disclose the omitted count. Suggest near matches using Unicode code-point Levenshtein distance. Up to 25,000 candidate pairs, 256 code points per selected cell and 5,000,000 estimated edit-distance cells. Empty fields are skipped. Suggestions require human review and never merge records. Ties keep right-source order. Runs in cancellable chunks. Protect spreadsheet cells prefixes formula-like values, including negative numbers, with an apostrophe. Choose Preserve original cells only for a trusted import workflow.",
      "experience": {
        "automatic": false,
        "single": false,
        "inputMaxLength": 1000000,
        "inputMode": "text",
        "label": "Left CSV",
        "placeholder": "name\nkitten",
        "help": "Paste CSV data with unique column headers. Quoted multiline cells are supported. Up to 1,000,000 characters. Review the settings before running.",
        "action": null
      },
      "mode": "explicit",
      "interactive": false
    },
    "execution": "Browser interface",
    "api": null,
    "browser_agent": {
      "supported": true,
      "name": "run_current_tool",
      "discovery": "WebMCP on the human page in a supporting browser",
      "verification": "See audit/API-AUDIT.md; availability is not verification"
    }
  },
  "markdown": "# CSV fuzzy match\n\n- Human page: https://happytails.ai/en/data-tools/csv-fuzzy-match/\n- Markdown: https://happytails.ai/en/data-tools/csv-fuzzy-match.md\n- Structured JSON: https://happytails.ai/agents/en/data-tools/csv-fuzzy-match/index.json\n- Visibility: public\n\n## Tool capabilities\n\n| Property | Value |\n| --- | --- |\n| Tool ID | `csv-fuzzy-match` |\n| Category | data-tools |\n| Implementation | Registered implementation. Registration alone is not a production-quality guarantee. |\n| Browser execution | Use the visible action or interactive controls. |\n| Browser processing | Browser; see tool notes for network behavior. |\n| HTTP API | Not callable through HTTP. |\n| Browser-agent interface | run_current_tool |\n\n### Implementation notes\n\nRuns locally on your device. CSV requires unique nonempty headers. Up to 1,000,000 characters, 10,000 data records and 100,000 cells across inputs, with 100 columns. Quoted multiline cells are supported. Each JSON settings field is limited to 100,000 characters. Output files are bounded to 4,000,000 characters. Diagnostic reports contain at most 500 findings and disclose the omitted count. Suggest near matches using Unicode code-point Levenshtein distance. Up to 25,000 candidate pairs, 256 code points per selected cell and 5,000,000 estimated edit-distance cells. Empty fields are skipped. Suggestions require human review and never merge records. Ties keep right-source order. Runs in cancellable chunks. Protect spreadsheet cells prefixes formula-like values, including negative numbers, with an apostrophe. Choose Preserve original cells only for a trusted import workflow.\n\n### Inputs and settings\n\nText input: Left CSV.\n\nExample or placeholder shown in the interface (not a validated fixture):\n\n```text\nname\nkitten\n```\n\nPaste CSV data with unique column headers. Quoted multiline cells are supported. Up to 1,000,000 characters. Review the settings before running.\n\n| Setting | Meaning | Control type | Default | Constraints |\n| --- | --- | --- | --- | --- |\n| `separator` | Input CSV separator | select | \",\" | Allowed: ,, ;, \t |\n| `comparison` | Comparison CSV | textarea | \"id,amount\\nA,10.00\\nB,3.50\\n\" |  |\n| `leftField` | Left match column | text | \"name\" |  |\n| `rightField` | Right match column | text | \"name\" |  |\n| `normalization` | Text comparison | select | \"Trim and lowercase\" | Allowed: Exact characters, Trim and lowercase, NFKC, trim and lowercase |\n| `minimum` | Minimum similarity (%) | number | 80 | min=0 max=100 |\n| `maximum` | Suggestions per left record | number | 3 | min=1 max=10 step=1 |\n| `outputSafety` | CSV output cells | select | \"Protect spreadsheet cells\" | Allowed: Protect spreadsheet cells, Preserve original cells |\n\n### Browser-agent workflow\n\n1. Open the human page in a browser that supports WebMCP.\n2. Discover the interface exposed by that page; use its actual schema.\n3. Select files on the page first when the tool requires files.\n4. Call `run_current_tool` with valid input and settings.\n5. Inspect the returned result or error and the displayed output. Retrieve files from the displayed download links.\n\nCalls do not automatically copy or download results. Browser permissions still apply. Interface availability alone is not proof of successful execution.\n\n### Planning specification\n\nUses Unicode code-point Levenshtein distance. Similarity is 100 times one minus distance divided by the longer normalized length. Suggestions never automatically merge records; a right-side record may match several source records. Up to 1,000,000 characters, 10,000 data records, 100 columns and 100,000 cells across the sources. Files for multi-source tools are limited to 4,000,000 bytes total. Reports retain at most 500 diagnostic findings and state any omitted count. CSV and JSON outputs are limited to 4,000,000 characters. Fuzzy matching additionally limits selected cells to 256 code points, comparisons to 25,000 pairs and estimated edit-distance work to 5,000,000 cells. Output is budgeted incrementally before retaining each row; expanded decimal output counts toward the same 4,000,000-character limit even when input uses short exponent notation.\n\nThis describes intended requirements. Use the implementation notes, interface schema and observed output to determine current support.\n\n### Complete machine-readable capability record\n\n```json\n{\n  \"id\": \"csv-fuzzy-match\",\n  \"category\": \"data-tools\",\n  \"built\": true,\n  \"requirements\": \"Uses Unicode code-point Levenshtein distance. Similarity is 100 times one minus distance divided by the longer normalized length. Suggestions never automatically merge records; a right-side record may match several source records. Up to 1,000,000 characters, 10,000 data records, 100 columns and 100,000 cells across the sources. Files for multi-source tools are limited to 4,000,000 bytes total. Reports retain at most 500 diagnostic findings and state any omitted count. CSV and JSON outputs are limited to 4,000,000 characters. Fuzzy matching additionally limits selected cells to 256 code points, comparisons to 25,000 pairs and estimated edit-distance work to 5,000,000 cells. Output is budgeted incrementally before retaining each row; expanded decimal output counts toward the same 4,000,000-character limit even when input uses short exponent notation.\",\n  \"implementation\": {\n    \"fields\": [\n      {\n        \"key\": \"separator\",\n        \"label\": \"Input CSV separator\",\n        \"value\": \",\",\n        \"type\": \"select\",\n        \"values\": [\n          \",\",\n          \";\",\n          \"\\t\"\n        ]\n      },\n      {\n        \"key\": \"comparison\",\n        \"label\": \"Comparison CSV\",\n        \"value\": \"id,amount\\nA,10.00\\nB,3.50\\n\",\n        \"type\": \"textarea\",\n        \"help\": \"Paste the second table, including its header row. Both tables use the selected separator.\"\n      },\n      {\n        \"key\": \"leftField\",\n        \"label\": \"Left match column\",\n        \"value\": \"name\",\n        \"type\": \"text\"\n      },\n      {\n        \"key\": \"rightField\",\n        \"label\": \"Right match column\",\n        \"value\": \"name\",\n        \"type\": \"text\"\n      },\n      {\n        \"key\": \"normalization\",\n        \"label\": \"Text comparison\",\n        \"value\": \"Trim and lowercase\",\n        \"type\": \"select\",\n        \"values\": [\n          \"Exact characters\",\n          \"Trim and lowercase\",\n          \"NFKC, trim and lowercase\"\n        ]\n      },\n      {\n        \"key\": \"minimum\",\n        \"label\": \"Minimum similarity (%)\",\n        \"value\": 80,\n        \"type\": \"number\",\n        \"min\": 0,\n        \"max\": 100\n      },\n      {\n        \"key\": \"maximum\",\n        \"label\": \"Suggestions per left record\",\n        \"value\": 3,\n        \"type\": \"number\",\n        \"min\": 1,\n        \"max\": 10,\n        \"step\": 1\n      },\n      {\n        \"key\": \"outputSafety\",\n        \"label\": \"CSV output cells\",\n        \"value\": \"Protect spreadsheet cells\",\n        \"type\": \"select\",\n        \"values\": [\n          \"Protect spreadsheet cells\",\n          \"Preserve original cells\"\n        ]\n      }\n    ],\n    \"live\": false,\n    \"presentation\": \"metrics\",\n    \"note\": \"Runs locally on your device. CSV requires unique nonempty headers. Up to 1,000,000 characters, 10,000 data records and 100,000 cells across inputs, with 100 columns. Quoted multiline cells are supported. Each JSON settings field is limited to 100,000 characters. Output files are bounded to 4,000,000 characters. Diagnostic reports contain at most 500 findings and disclose the omitted count. Suggest near matches using Unicode code-point Levenshtein distance. Up to 25,000 candidate pairs, 256 code points per selected cell and 5,000,000 estimated edit-distance cells. Empty fields are skipped. Suggestions require human review and never merge records. Ties keep right-source order. Runs in cancellable chunks. Protect spreadsheet cells prefixes formula-like values, including negative numbers, with an apostrophe. Choose Preserve original cells only for a trusted import workflow.\",\n    \"experience\": {\n      \"automatic\": false,\n      \"single\": false,\n      \"inputMaxLength\": 1000000,\n      \"inputMode\": \"text\",\n      \"label\": \"Left CSV\",\n      \"placeholder\": \"name\\nkitten\",\n      \"help\": \"Paste CSV data with unique column headers. Quoted multiline cells are supported. Up to 1,000,000 characters. Review the settings before running.\",\n      \"action\": null\n    },\n    \"mode\": \"explicit\",\n    \"interactive\": false\n  },\n  \"execution\": \"Browser interface\",\n  \"api\": null,\n  \"browser_agent\": {\n    \"supported\": true,\n    \"name\": \"run_current_tool\",\n    \"discovery\": \"WebMCP on the human page in a supporting browser\",\n    \"verification\": \"See audit/API-AUDIT.md; availability is not verification\"\n  }\n}\n```\n\n## Page guide\n\nFind near-matching text records in two CSV files and review scored suggestions.\n\nHow can we improve this tool?\n\nReport a problem or share an idea.\n\nPlease leave out private information. Your message and the tool name go to our team via PostHog.\n\n### How to use CSV fuzzy match\n\n1. Paste both CSV tables and select their text match columns.\n2. Choose normalization, minimum similarity and suggestions per source row.\n3. Review the suggested pairs before making any changes to the source data.\n\n## Useful next steps\n\n- [CSV reconciliation report](https://happytails.ai/en/data-tools/csv-reconciliation-report/) ([Markdown](https://happytails.ai/en/data-tools/csv-reconciliation-report.md))\n\n- [Dataset value mapper](https://happytails.ai/en/data-tools/dataset-value-mapper/) ([Markdown](https://happytails.ai/en/data-tools/dataset-value-mapper.md))\n\n## Prepare the source\n\nPaste both CSV tables and select their text match columns.\n\n### Choose the matching rules\n\nChoose normalization, minimum similarity and suggestions per source row.\n\n### Review and keep the result\n\nReview the suggested pairs before making any changes to the source data. Uses Unicode code-point Levenshtein distance. Similarity is 100 times one minus distance divided by the longer normalized length. Suggestions never automatically merge records; a right-side record may match several source records.\n"
}