Skip to content

Tools · Tables

Turn a table photo into a CSV.

Choose a photo, let Tables fill in the cells, then check and save. The draft sits beside your image so you can correct the text and layout before opening the CSV in a spreadsheet.

From image to cells

A recorded result

These prepared examples show the reader’s saved output for two invented tables on 10 September 2026.

This is a demonstration of recorded results. You cannot upload or read your own image on this website.

A synthetic ruled table with three columns, Item, Quantity and Price, and three rows of stationery.
ruled.png, a synthetic image rendered with Pillow

The draft the reader returned

Draft returned for the ruled table
ItemQuantityPrice
Blue folders123.50
Green pens71.25
Notebooks204.00

All 12 cells matched the authored truth, including the space in “Blue folders”. Nothing needed correcting.

The CSV after review

"Item","Quantity","Price"
"Blue folders","12","3.50"
"Green pens","7","1.25"
"Notebooks","20","4.00"

Rows end with CRLF. Spreadsheet software may still reformat dates or leading zeroes on import; import those columns as text when needed.

A synthetic table without ruling lines, with columns Day, Room and Time, and three rows of bookings.
unruled.png, a synthetic image rendered with Pillow

Where the reader was wrong

Draft returned

Draft returned for the unruled table
DayRoomTime
MondayOak10:00
TuesdayElm11:30
FridayAsh09:15
empty cellempty cellempty cell

Every expected cell matched, and the reader added one empty row after the last booking. A person would remove row 5 before ticking the review box. The scorer counts this table as not exact.

Authored truth

Authored truth for the unruled table
DayRoomTime
MondayOak10:00
TuesdayElm11:30
FridayAsh09:15

The intended content of the image, written before the reader ran.

What happens

  1. Choose an image. One still JPEG, PNG or WebP, up to 15 MB and 25 million pixels. Rotate in 90° steps and trim the edges so only the table remains. The preview shows exactly what will be read.
  2. Read it. The reader finds the table structure and the text in each cell on your CPU. It refuses merged or irregular cells rather than flattening them, and shows an error you can retry.
  3. Check every cell. The draft grid sits beside the image. Every cell is an editable field. Cells the reader moved during alignment are marked Check text position, which describes changed placement, not confidence. Add or remove rows and columns if the structure is wrong.
  4. Tick and save. Any edit clears the review checkbox. Once you tick that you have checked every cell, save as CSV. Every cell is quoted, empty cells stay empty, and text that could act as a spreadsheet formula gets a leading apostrophe.

Bank statements as PDFs

Tables also reads a statement you have downloaded from your bank as a PDF. There is no model for this and no crop step. Ordinary code reads the words and where they sit on the page, finds the columns of amounts, copies a blank date down from the row above, and uses the printed running balance to tell money in from money out. The rows appear next to images of the pages, like a table photo.

Where a printed balance does not add up, that row is marked for you to check. When every balance adds up, Tables says so. That checks the amounts, not the dates or descriptions, so every cell still needs checking.

The CSV copies the page rather than interpreting it. The columns are date, the text columns numbered in page order, paid out, paid in and balance. Brought-forward and carried-forward lines stay as rows with only a balance. Amounts are saved without £ or commas, and an overdrawn balance is negative.

The rules name no bank. Before building this I tried them on six of my own statements from two banks, on my computer: every printed balance added up, and I checked a page from each bank by eye. The second bank’s layout only worked after I adjusted the rules on it, and a third bank is untested. I have since used it on a real statement from download to saved CSV: it took about 20 seconds, and a couple of cells needed correcting. A statement can have up to 30 pages and 500 rows. Scanned PDFs are not read.

A year of checked statements is what Regulars reads. The route is written up as the playbook A year of statements.

Which tables to start with

Start with a clear, upright, tightly cropped image of one printed table in English, with no merged cells. Two cropped phone photographs of printed examples were read correctly in the latest check. Handwriting, strong tilt, blur, small type, spanning headings and larger layouts remain unproven. The reader can miss spaces, misread numbers or add empty rows, and a wrong layout can still look rectangular, so every cell needs checking, marked or not.

Limits of the reader and the review

The reader is limited to 180 seconds, and the draft to 100 rows, 20 columns and 2,000 characters per cell. Alignment orders recognised fragments within a cell, joins them with spaces and trims outer whitespace. Text whose centre is above or below the detected table is excluded, so a mistaken table boundary can omit source content.

Rotation and cropping help locate the table; they do not establish that its cells are correct. Cropped images are prepared as PNG in browser memory and the original file is unchanged.

There is no result history. Clearing removes the in-memory grid and image. A CSV you download remains wherever your browser saves it.

Models used

For a PDF statement: none. It is read by ordinary code, using pdfplumber 0.11.7 and pypdfium2 5.13.0.

For an image, Tables uses four specialist models from PaddleOCR, packaged by RapidAI. All four run locally on your computer’s CPU.

SLANet-plus
Finds the table’s rows, columns and cell structure.
PP-OCRv4 mobile text detector
Finds regions of text in the image.
PP-OCRv6 small multilingual text recogniser
Reads the characters in each text region.
PP-OCR mobile v2.0 orientation classifier
Checks the orientation of text before recognition.

The four model files total about 34 MB. RapidTable 3.0.2 and RapidOCR 3.9.2 run them. Setup downloads and verifies the files; normal use downloads nothing.

On one tested computer, an Apple M1 Pro with 32 GB of memory, the reader took about 1.0 to 1.3 seconds for each of seven small invented tables, 3.4 seconds on the first call, and used 500 to 556 MB of memory at its peak. The working copy with its software was 366 MB. Setup time and other computers were not measured. These figures come from the first study.

See the exact model versions, file identities and licence information.

Availability

Not available to download yet. Tables is running in development. There is no public installer or source download at present.

The current checks cover five rendered examples and two cropped phone photographs of printed tables. See the results and known limitations.

I have used Tables on 12 everyday tasks. It returned nine drafts and refused three images: two handwritten sources and one small tilted photo. Two of the nine drafts were unusable. That is one person’s use. How well other people spot and correct the reader’s mistakes has not been tested.