Image to Markdown Table Converter
Drop or paste a screenshot of a table and get an editable grid plus Markdown. OCR runs in your browser, so the image is not uploaded.
1. Add your table
Your file stays in this tab. Only the OCR engine files are downloaded, from the jsDelivr CDN.
2. Check and edit the table
Your table appears here
Every cell is editable. Amber cells are ones the OCR was unsure about.
How to convert an image of a table to Markdown in 3 steps
Add the image
Drop a PNG, JPG or WebP file, paste a screenshot with Ctrl+V (⌘V on Mac), or choose a file. On a phone, the file picker offers the camera.
Check the grid
The table is rebuilt from the position of each word. Amber cells are words the OCR was unsure about: compare them with the image and fix them in place.
Copy the Markdown
Copy the pipe table, or open it in the full editor to sort, reformat or convert it to another format. Set "Number of columns" first if the columns were split wrongly.
Example
Product Region Units sold Widget A North America 1,240 Widget B Europe 865 Gadget Pro Asia Pacific 2,310
| Product | Region | Units sold | | ---------- | ------------- | ---------: | | Widget A | North America | 1,240 | | Widget B | Europe | 865 | | Gadget Pro | Asia Pacific | 2,310 |
Options explained
- Language
- The language of the text in the image. It picks the OCR language data, which downloads the first time you use it. Choosing the wrong language mostly hurts accents and non-Latin letters; Chinese and Japanese data is a larger download.English (default) · German · French · Spanish · Italian · Portuguese · Dutch · Russian · Chinese (Simplified) · Japanese
- Number of columns
- Auto finds columns from the empty vertical gaps between text. If it merged two columns or split one, pick the right count and the widest gaps are used as the column boundaries.Auto (default) · 1 to 12
- Layout (OCR only)
- How Tesseract reads the image. "Table: one block of text" suits a cropped table. Try "Sparse text" when cells are scattered or the table has a lot of empty space, and "Automatic page layout" for a whole page with other content around the table.Table: one block of text (default) · Sparse text · Automatic page layout
- Join wrapped lines
- When a cell wraps onto two lines, OCR sees two rows. With this on, a row whose first cell is empty is joined to the row above. Leave it off if your table has genuinely sparse first columns.Off (default) · On
- Right-align number columns
- If at least 80% of the body cells in a column look like numbers, currency or percentages, the Markdown delimiter row gets a right-align colon (---:). Turn it off to leave every column unaligned.On (default) · Off
Convert to and from other formats
Also useful
Convert other formats to Markdown
- CSV to Markdown TableConvert CSV text or .csv files, including quoted cells.
- Excel to Markdown TablePaste cells copied from Excel straight into a Markdown table.
- Google Sheets to Markdown TablePaste a copied range or a public sheet URL.
- TSV to Markdown TableConvert tab-separated text into a Markdown table.
- HTML Table to MarkdownConvert <table> markup into a Markdown table.
- JSON to Markdown TableConvert a JSON array of objects into a table.
- SQL to Markdown TableConvert MySQL, PostgreSQL or SQLite CLI query output.
- Word Table to MarkdownPaste a table copied from Word or Google Docs.
- Web Table to MarkdownCopy a table from any web page and paste it here.
- PDF to Markdown TableExtract a table from a PDF page, with OCR for scans.
- Universal Table to MarkdownPaste anything tabular; the format is detected for you.
Convert Markdown to…
- Markdown Table to CSVExport a Markdown table as RFC 4180 CSV.
- Markdown Table to TSVCopy as tab-separated values that paste cleanly into Excel and Sheets.
- Markdown Table to HTMLExport semantic <table> markup.
- Markdown Table to JSONExport rows as an array of JSON objects.
- Markdown Table to LaTeXExport LaTeX tabular code for papers and Overleaf.
- Markdown Table to SQLGenerate CREATE TABLE and INSERT statements.
- Markdown Table to ExcelDownload a real .xlsx with numbers, bold header and one sheet per table.
- Markdown Table to Google SheetsCopy a table that pastes cleanly into Google Sheets.
- Markdown Table to WordCopy a formatted table into Word or Google Docs, or download .docx.
- Markdown Table to ConfluenceWiki markup, storage format or a rich copy for the Cloud editor.
- Markdown Table to JiraConvert to Jira and Confluence wiki markup.
- Markdown Table to ImageRender the table as a PNG or SVG for slides and posts.
About this tool
Paste or drop a screenshot, a photo or a PNG, JPG or WebP file of a table and this tool turns it into a Markdown table you can edit before you copy it. The text is read with Tesseract.js, an OCR engine running in your browser, and the rows and columns are rebuilt from the position of every word, so both ruled and borderless tables work. Your image is not uploaded: the only download is the OCR engine itself (worker script, WebAssembly core and language data), which comes from the jsDelivr CDN the first time you recognize text. Accuracy depends on the image, so words the engine was unsure about are highlighted for you to check.
- Paste a screenshot with Ctrl+V or drop PNG, JPG and WebP files
- OCR runs in the browser; the image is not uploaded
- Editable grid: fix cells, add or delete rows and columns
- Amber highlight on words the OCR was unsure about
- Works with ruled and borderless tables
- Column count override and wrapped-line joining
- Free, no sign-up, no watermark
Technical details
How an image becomes a Markdown table
The image is cleaned up on a canvas, read by Tesseract.js (the Tesseract OCR engine compiled to WebAssembly), and the table is rebuilt from the position of every recognized word rather than from its reading order.
- Preparation: Small screenshots are enlarged, the contrast is stretched, and images with light text on a dark background are inverted, because OCR engines read dark-on-light text best.
- Rows: Words whose boxes overlap vertically are put on the same row, so a few pixels of baseline drift do not split a row.
- Cells: Neighbouring words with a small gap between them stay together ("New York"); a bigger gap, or a | border character between them, starts a new cell.
- Columns: Columns are the vertical stripes where no text appears. A title that spans the table is ignored when counting them, and the narrowest gaps are merged first when you ask for fewer columns.
- Header: The first row of the grid becomes the header row, since Markdown tables need one.
- Confidence: Tesseract reports a confidence for every word. Cells containing a word below 70% are highlighted, and the same words are outlined on the image.
Tips and best practices
Crop to the table
Remove the page around the table before you drop the image. Less surrounding content means fewer stray words and a better column guess.
Take 2x screenshots
Tiny text is the most common cause of misread characters. Use a Retina or high-DPI screenshot, or zoom the page to 200% before you capture it. Avoid heavily compressed JPEGs.
Use high contrast
Dark text on a plain light background works best. Dark-mode screenshots are inverted automatically; faint grey text, background images and gradients lower the accuracy.
Proof-read the numbers
Zero and the letter O, 1 and l, and 5 and S are classic OCR mix-ups. Check every number against the image before you publish the table, even when nothing is highlighted.
Common problems and fixes
Handwritten tables come out wrong
Cause: Tesseract is trained for printed text. Handwriting is read poorly or not at all.
Fix: Type the table in the Markdown table editor, or photograph printed text instead.
Merged or spanning cells
Cause: Pipe tables in GitHub Flavored Markdown have no colspan or rowspan. A header that spans several columns lands in its first column, or is left out as a caption line.
Fix: Repeat the value in each column or leave the cells blank, or use HTML for the table. See the guide on merged cells in Markdown tables.
Rotated, skewed or curved scans
Cause: Rows are found by horizontal alignment. A slight tilt can make words from neighbouring lines share a row, and a rotated image is not straightened.
Fix: Rotate or straighten the image in a photo editor first, and photograph pages flat and from directly above.
Two header rows (multi-level headers)
Cause: Markdown has one header row. The second header line becomes the first data row.
Fix: Merge the two header lines into one cell text in the grid, for example "2025 Q1", and delete the extra row.
A cell that wraps over several lines becomes several rows
Cause: OCR cannot tell a wrapped line from a new row when there is no ruling.
Fix: Tick "Join wrapped lines", or fix the rows by hand in the grid.
Columns are merged or split in the wrong place
Cause: Columns are found from white space. Columns packed closer than a word space, or long text that overlaps the next column, hide the gap.
Fix: Set "Number of columns", or crop and enlarge the image so the gaps are wider.
Frequently asked questions
Can I convert a screenshot of a table to Markdown?
Yes. Take the screenshot, click the page and press Ctrl+V (⌘V on Mac), or drop the file on the drop area. The tool reads the text with OCR, rebuilds the rows and columns, and shows an editable grid and the Markdown. Check the amber cells, fix anything wrong, then copy the Markdown.
Is my image uploaded anywhere?
No. The image is read by JavaScript and WebAssembly running in your browser tab, and it is never sent to our servers or anyone else. The one network request is for the OCR engine itself: the first time you recognize text, Tesseract.js downloads its worker script, WebAssembly core and the language data from the jsDelivr CDN, so jsDelivr sees a request for those public files but not your image. Tesseract.js keeps the language data in your browser cache by default, so later visits can skip the download.
How accurate is image to Markdown table OCR?
It depends on the image. Printed text in a sharp, high-contrast, 2x screenshot is usually read well, and small, blurry, low-contrast or compressed images are not. The tool does not promise an accuracy figure: it highlights words the engine was unsure about, but a confident misread (a 0 read as O, for example) is not highlighted, so proof-read the numbers.
Can it read handwriting?
No, not reliably. The OCR engine is built for printed text, and handwritten tables usually come out with many wrong or missing words. Type handwritten tables into the editor instead.
Does it work with photos of printed tables?
Often, if the page is flat, evenly lit and photographed from directly above. Shadows, folds, curved pages and tilted shots hurt the result, and the tool does not straighten the photo. Crop the photo to the table before you use it. On a phone, the file picker usually offers the camera.
Which languages does the OCR support?
The language selector has English, German, French, Spanish, Italian, Portuguese, Dutch, Russian, Chinese (Simplified) and Japanese. English is the default. Each language downloads its own data the first time you use it, and the Chinese and Japanese data are larger downloads.
What happens to merged cells and multi-level headers?
Markdown pipe tables cannot merge cells, so a cell that spans columns is placed in its first column, and a second header row becomes the first data row. Fix these in the grid, or switch to an HTML table when the merge matters.
Is it free, and does it work offline?
It is free with no sign-up and no watermark. It needs a connection the first time you recognize text so the OCR engine files can download; after that your browser may reuse its cached copy, but offline use is not guaranteed.
Can I convert a PDF table instead of an image?
Yes. The PDF table to Markdown tool reads the text layer of a PDF directly, with no OCR, and falls back to OCR for scanned pages. You can also drop a PDF on this page.