Result

3 columns ยท 2 body rows

HTML

<table>
  <caption>Product price list</caption>
  <thead>
    <tr>
      <th scope="col">Product</th>
      <th scope="col">Price</th>
      <th scope="col">Notes</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Coffee, dark roast</td>
      <td>12.50</td>
      <td>Freshly roasted</td>
    </tr>
    <tr>
      <td>Tea</td>
      <td>8.00</td>
      <td>Loose leaf &amp; organic</td>
    </tr>
  </tbody>
</table>

Build a table with column headers and a caption

  1. Paste CSV from a file or tab-separated cells copied from a spreadsheet, and choose the matching format.
  2. Enable column headers if the first row contains labels. Add a short caption describing the table.
  3. Review the preview, then copy or download the HTML for your page.

Quoted fields work as you expect

A comma inside a quoted CSV field stays inside that cell. For example, "Coffee, dark roast",12.50 creates two cells. Write a literal quote as two quotes inside a quoted field: "She said ""hello""". Quoted fields can span multiple lines. The parser accepts LF, CRLF, and CR line endings, requires equally sized rows, and reports malformed quoting.

Semantic, escaped output

Headers use <th scope="col"> inside <thead>; data rows use <tbody>. Cell contents and captions are escaped, so pasted HTML displays as text. The isolated preview also blocks scripts and outside resources. Preview styling is for readability; the exported HTML has no inline styles.

Limits

Input is limited to 100,000 characters, 1,000 total rows, 100 columns, and 10,000 cells. Captions allow 300 characters. Every row must have the same number of cells; blank lines count as one empty cell. A final line ending does not add a row. Spreadsheet formulas stay literal text, and this tool does not evaluate them. For complex grouped headers or merged cells, adapt the exported markup manually.