Neatbo.

HTML table and CSV converter

Extract a selected static HTML table as CSV, or build a safe HTML table from CSV cells.

Browser-local processingInputHTML / CSVOutputCSV / HTMLUp to 1 MiB per file · File limit: 1
  1. 1Add input
  2. 2Adjust settings
  3. 3Get your result

Tool input and files are processed in this browser without being uploaded.

Your input

Inputs are kept temporarily in this tab when switching tools. Refreshing or closing clears them; large results may need to be regenerated.

⌘ / Ctrl + Enter to run

or drag and drop it here

Files stay on this device. Your originals stay unchanged.

.html · .htm · .csv · .txt

Up to 1 MiB per file · File limit: 1

    0 characters · 0 bytes
    Options

    Complete the required options first. You can keep the defaults for the rest.

    Leave blank for one table; with several outer tables, enter the number starting at 1.

    Add an apostrophe before formula-like cells in CSV downloads. JSON reports retain original values.

    Preparing the tool…

    Before you start

    Paste the table markup or open a local HTML export. Choose the table number when there is more than one, review the cells, and download CSV. The reverse direction creates HTML with every cell escaped as text.

    How to use this tool

    1. Select HTML to CSV or CSV to HTML, then paste source or open a local UTF-8 file.
    2. For HTML with several outer tables, enter the required table number. Set whether the first row is a header and choose the CSV spreadsheet-safety setting.
    3. Run the conversion, inspect the data or HTML preview, then copy or download the full result. Resolve unsupported spans or nested tables in the source before retrying.

    Supported inputs and limits

    One UTF-8 input or file, at most 1 MiB, 200,000 cells and 128 nested HTML levels. Selected files take precedence. CSV rows must have consistent widths. The CSV result previews 200 data rows; the download is complete. HTML parser errors are rejected; valid optional end tags are accepted.

    The HTML input is static source, not a webpage URL or script-generated table. Only outer tables are selectable. Multiple tables require an explicit table number, starting at 1. Nested tables, non-unit rowspan/colspan and embedded form/object/SVG/canvas content are rejected.

    Cells use decoded HTML text: script/style/template/noscript text is omitted; br and common paragraph blocks produce line breaks. Outer cell whitespace is trimmed. CSS visibility, form values, link URLs and image alt text are not exported.

    The first-row header option controls preview and generated HTML. Spreadsheet safety is on by default for CSV downloads and prefixes formula-like cells with an apostrophe; turn it off only when exact text is required. CSV to HTML escapes all cell markup and never emits active input code.

    Worked example

    Example input

    <table><tr><th>name</th><th>note</th></tr><tr><td>Ada</td><td>A &amp; B<br>next</td></tr></table>
    Example options
    {"direction": "to-csv", "tableIndex": "", "headerRow": true, "spreadsheetSafe": true}

    Example output

    name,note
    Ada,"A & B
    next"

    When something does not work

    Check the direction, table number and consistent row widths. Remove nested tables, merged cells or embedded objects. For exact CSV text, review the spreadsheet-safety option before downloading.

    Frequently asked questions

    Will it fetch a webpage or run its scripts?

    No. Copy the static table markup or use a local HTML file. Links, scripts and external resources are never requested or executed.

    What happens to merged cells?

    Only rowspan/colspan of 1 are supported. Larger or special spans are rejected rather than silently shifting or losing data.

    Does the generated HTML contain my pasted markup?

    CSV cells are escaped as text. For example, <img> appears as literal text; it does not become an image or executable element.

    Documentation & further reading

    Related tools