{
  "slug": "markdown-table-extractor",
  "name": "gizza-ai/markdown-table-extractor",
  "version": "0.1.0",
  "title": "Markdown Table Extractor — Every Table in a Document to CSV or JSON — gizza.ai",
  "description": "Paste a Markdown document and pull every GitHub-flavored table out of it as CSV, JSON or JSON Lines. Pick one table or export them all. Runs in your browser.",
  "tags": [
    "markdown table extractor",
    "markdown table to csv",
    "markdown table to json",
    "extract tables from markdown",
    "gfm table converter",
    "markdown to jsonl",
    "readme table export",
    "markdown table parser"
  ],
  "category": "documents",
  "urls": {
    "page": "https://gizza.ai/tools/markdown-table-extractor/",
    "markdown": "https://gizza.ai/tools/markdown-table-extractor/index.md",
    "descriptor": "https://gizza.ai/tools/markdown-table-extractor/tool.json",
    "deep_link_example": "https://gizza.ai/tools/markdown-table-extractor/?markdown=%23%23%20Downloads%0A%0A%7C%20file%20%7C%20size%20%7C%0A%7C%20---%20%7C%20---%3A%20%7C%0A%7C%20app-linux.tar.gz%20%7C%2012%20MB%20%7C%0A%7C%20app-macos.zip%20%7C%2014%20MB%20%7C&format=csv&table=all%2C%20or%202%2C%20or%200%2C2-3&header=true&delimiter=%2C%20or%20tab%20%2F%20semicolon%20%2F%20pipe%20%2F%20space&quote=minimal&newline=lf&trim=true&strip_formatting=true&json_indent=2&labels=true"
  },
  "cli": "gizza tool markdown-table-extractor \"## Downloads\n\n| file | size |\n| --- | ---: |\n| app-linux.tar.gz | 12 MB |\n| app-macos.zip | 14 MB |\"",
  "tool": {
    "description": "Find every GitHub-flavored Markdown table in a document and export the ones you pick as CSV, JSON, JSON Lines, or an inventory listing. A table is a pipe-bearing header row followed by a `|---|` separator row with the same cell count; pipe lines inside ``` or ~~~ code fences are ignored, and each table records the nearest preceding heading and its source line. table='all' (default) exports every table in document order, or pass an index ('2') or a list/range ('0,2-3'); format='list' first shows what the document contains. format='csv' (default) writes one delimited block per table, blank-line separated and prefixed with a `# Table n` comment when several are exported (labels=false turns that off); 'json' gives an array of row objects for one table or of table envelopes for several; 'jsonl' gives one JSON value per data row. header=true (default) keys rows by the header row; false drops it and emits arrays. delimiter/quote/newline control the CSV (single char or comma/tab/semicolon/pipe/space; minimal or all; lf or crlf), trim strips cell padding, strip_formatting renders bold/code/links/<br> as plain text, and json_indent sets the JSON indent (0 minifies). Rows shorter than the header are padded and extra cells are dropped, exactly as Markdown renders them. Input is capped at 1000000 bytes. Runs locally.",
    "parameters": {
      "additionalProperties": false,
      "properties": {
        "delimiter": {
          "default": ",",
          "description": "CSV field separator: a single character or 'comma'/'tab'/'semicolon'/'pipe'/'space'. Use 'tab' for TSV. Default ','. Ignored for json, jsonl and list.",
          "type": "string"
        },
        "format": {
          "default": "csv",
          "description": "Output format. 'csv' (default) emits one delimited block per table; 'json' emits an array of rows for a single table, or an array of {index, heading, line, columns, rows} envelopes for several; 'jsonl' emits one JSON value per data row (rows are wrapped as {\"table\":n,\"row\":…} when several tables are exported); 'list' emits an inventory of the tables found (index, heading, source line, columns, alignments, row count) without any cell data.",
          "enum": [
            "csv",
            "json",
            "jsonl",
            "list"
          ],
          "type": "string"
        },
        "header": {
          "default": true,
          "description": "Treat each table's first row as a header (default true). CSV keeps it as the first line; JSON/JSONL key each row object by it. Set false to drop it: CSV emits data rows only and JSON/JSONL emit arrays of values instead of objects.",
          "type": "boolean"
        },
        "json_indent": {
          "default": 2,
          "description": "Indent width in spaces for json and list output; 0 minifies to a single line. Default 2. Ignored for csv (and for jsonl, where each line is always compact).",
          "maximum": 8,
          "minimum": 0,
          "type": "integer"
        },
        "labels": {
          "default": true,
          "description": "When several tables are exported as CSV, prefix each block with a `# Table n: heading` comment line (default true). Set false for plain blocks separated only by a blank line. Has no effect on a single table or on the other formats.",
          "type": "boolean"
        },
        "markdown": {
          "description": "The Markdown document to scan. It can be a whole README or page of prose — every GitHub-flavored pipe table in it is found (a header row plus a `|---|` separator row directly under it). Pipe lines inside ``` or ~~~ code fences are ignored. Max 1000000 bytes.",
          "type": "string"
        },
        "newline": {
          "default": "lf",
          "description": "Line ending between output rows: 'lf' (default, `\\n`, Unix/macOS) or 'crlf' (`\\r\\n`, Windows/Excel).",
          "enum": [
            "lf",
            "crlf"
          ],
          "type": "string"
        },
        "quote": {
          "default": "minimal",
          "description": "CSV quoting: 'minimal' (default) quotes a field only when it contains the delimiter, a double quote, or a newline; 'all' wraps every field in double quotes.",
          "enum": [
            "minimal",
            "all"
          ],
          "type": "string"
        },
        "strip_formatting": {
          "default": false,
          "description": "Render inline Markdown inside cells as plain text: `**bold**` → bold, `` `code` `` → code, `[text](url)` → text, `<br>` → a space, and `\\|`-style escapes resolved. Default false, which keeps every cell exactly as written.",
          "type": "boolean"
        },
        "table": {
          "default": "all",
          "description": "Which tables to export: 'all' (default, in document order), a single 0-based index like '2', or a comma-separated list/range like '0,2-3'. Use format='list' first to see what is in the document. An index past the last table is an error naming the valid range.",
          "type": "string"
        },
        "trim": {
          "default": true,
          "description": "Trim the whitespace padding Markdown authors use to align columns (default true). Set false to keep each cell exactly as written, spaces included.",
          "type": "boolean"
        }
      },
      "required": [
        "markdown"
      ],
      "type": "object"
    }
  }
}