Bracketed negatives as real negative numbers, comparative year columns kept apart, and a P&L, balance sheet and cash flow on three sheets rather than one. Read on your device, never uploaded.
Quick answer:
Open the PDF table extractor, put in the page range the statement occupies, set Extraction to Financial and press Extract tables. A figure printed (1,250) becomes -1250 so the column sums correctly, the Notes column and both comparative year columns come through separately, and Merge matching tables puts each statement on its own named sheet. Figures are never scaled: a report headed in thousands gives you exactly the digits printed. Everything runs in your browser.
Are bracketed negatives handled?
Yes. (1,250) becomes -1250, the accounting convention every spreadsheet expects. Left as text the column refuses to sum; read naively the minus is lost and costs are added to income.
Do comparative year columns stay separate?
Yes. This year, last year and the Notes column between them all come through. Label them with their years straight away — the two figure columns look identical to anything guessing from content.
Does it multiply a “in thousands” heading back up?
No, deliberately. The multiplier lives in a heading or footnote and sometimes changes between sections, so you get exactly the digits printed. Record the unit in a cell of your own.
Can each statement get its own sheet?
Yes — Merge matching tables groups the pages first, so a profit and loss, a balance sheet and a cash flow become three named sheets rather than one grid.
Does the indentation survive?
No, and it matters: subtotals sit among the detail rows looking identical, so a naive SUM down the column double-counts every one. Add a level column, or sum only the rows you mean.
Runs in your browser. No account, no upload, no page limit.
Three steps
Extract the pages you need. Annual reports are long, so put a page range in — 34-37 — rather than reading a hundred pages of narrative to get at the income statement.
Set Extraction to Financial so bracketed figures become negatives and the comparative columns become numbers you can chart.
Choose how the pages become sheets. A profit and loss account, a balance sheet and a cash flow statement are three tables, not one.
What a financial statement does that a transaction list does not
Everything awkward about these documents comes from the same source: they are presentation, laid out for a reader, not a data export. Six specific consequences, each with a practical answer.
Bracketed negatives
Accounts print a negative as (1,250), not -1250. Left as text, a whole column refuses to sum; converted naively, the minus sign is lost and your costs are added to your income. In Financial extraction the brackets become a real negative number and the cell is formatted as money, so a P&L sums correctly the moment it lands.
Comparative year columns
Almost every statement shows this year beside last year, often with a Notes column between the labels and the figures: Revenue | 4 | 12,480 | 11,905. All four are real columns and all four come through — but the two figure columns look identical to any tool that guesses from content alone, so the headings are what tell them apart. Keep the header row, and label the columns with their years the moment the table is in your sheet; nothing downstream can recover which is which afterwards.
"£000" — and why nothing here multiplies it back
A statement headed in thousands prints 12,480 to mean 12,480,000. The extraction never scales a figure. That is deliberate: the multiplier lives in a heading or a footnote, sometimes changes between sections of the same document, and silently multiplying a column by a thousand because of a word somewhere on the page would be the single worst mistake a converter could make here. You get exactly the digits that were printed. Record the unit in a cell of your own and apply it knowingly.
Indentation is a hierarchy, and a spreadsheet loses it
On the page, indentation tells you that three lines are components of the subtotal under them. In a grid that indentation is gone: every label is just a label in column A, and the subtotal rows sit among the detail rows looking exactly like them. Nothing here reconstructs the tree, and it is worth knowing before you sum a column top to bottom — a naive SUM double-counts every subtotal. Add a level column of your own, or sum only the rows you mean.
Ruled tables — which is good news
Published accounts are usually ruled, and a ruled table states its own geometry. Where borders are present the extractor reads them as vector paths straight out of the page rather than inferring columns from spacing, so a heading above the table cannot bridge its columns, an empty cell stays empty instead of shifting everything after it, and a wrapped label stays one cell. Borders drawn as very thin filled rectangles rather than strokes are picked up too, which plenty of report producers use.
The footnote column that is not a column
Note references — a bare 4 or 12 beside a line — sit in their own narrow column and extract as one. They are not figures and should not be summed; in a numeric column they would be nonsense, so keep them as the labels they are.
Three statements, three sheets
An income statement, a balance sheet and a cash flow statement have different columns and different meanings, and putting them in one sheet means a column stops meaning the same thing halfway down. Choose Merge matching tables: the pages are grouped into tables first, so a statement spanning two pages becomes one sheet while the next statement gets its own — and each sheet is named after whatever the document calls that table, rather than Sheet1, Sheet2.
Nothing is invented: a table with no heading above it is called Table 1. And a wrong merge is the failure guarded against hardest, because two statements in one sheet is a silent error while a wrong split is obvious in the preview. Over ten multi-page fixtures the shipped rule got 10 of 10 right with nothing wrongly merged and nothing wrongly split, where matching on headings alone managed 8 of 10 with 2 wrong merges.
One stated limitation: a column that is empty on one page of a multi-page table is dropped from that page by the extraction, so that page has fewer columns and is read as a separate table. Merging it anyway would shift every cell across, which is worse than an extra sheet.
When you want it to still look like the report
Set Output to Preserve appearance and the fonts, text colours, background shading, borders, alignment, column widths and merged cells are read off the page and painted onto the spreadsheet, while the cells hold exactly the same values the structured mode gives. For a set of accounts circulated to people who are going to read them, that is often what is wanted — a recognisable document rather than a bare grid.
Two honest limits. A merge is only restored where the text itself spans more than one column, such as a section heading across the top; two empty cells that were merged in the original leave no trace in the file, and inventing a merge would move your data. And fonts are matched rather than embedded, so a typeface your machine does not have is substituted, exactly as with any workbook.
For sorting, charting or feeding into a model, use Structured data — the default, and the cleaner grid. The values are identical either way, so the choice is only about how it looks.
Why the balance check does not run on a set of accounts
Because there is no running balance to follow. The reconciliation on this site checks opening − debits + credits = closing down a column of balances, which is a bank statement's structure, not a balance sheet's. On a financial report it declines and names what is missing rather than producing a verdict — in our test set every financial report, price list and generic table declined, and across 13 non-statement documents there were 0 false alarms.
That is a deliberate limit rather than an oversight. Checking that assets equal liabilities plus equity, or that a cash flow ties to the movement in cash, means knowing which row is which — and a converter that has inferred those rows from a PDF layout is exactly the thing that should not be asserting the accounts are wrong. What you get instead is a clean, typed, sum-ready table, which is the input to that judgement rather than a substitute for it.
The narrower check does stay on: a cell that cannot be what its column is — a letter O inside a figure, for instance — is marked ⚠ before you download. On deliberately corrupted figures it flagged 6 of 6 with no false alarms, and raised nothing on 6 correctly extracted typed pages.
Check whether a machine-readable version exists first
This will save some people the conversion entirely, so it belongs near the top rather than buried. Filed company accounts in many jurisdictions exist as tagged data as well as a printed PDF — iXBRL in the United Kingdom and much of Europe, XBRL in filings to the United States regulator. Where a tagged filing exists, every figure carries a label from a published taxonomy, so there is no inference at all and nothing for a converter to get wrong.
So before extracting a hundred-page report, check the registry it was filed with. The catch is that the tagged version covers the statutory statements and not necessarily the analysis, the segment breakdowns or the management commentary — which is very often the material somebody actually wants in a spreadsheet, and is exactly what only exists as a printed table. That is where this route earns its place.
An investor deck, a board pack, a management account or a bank's own summary has no tagged equivalent at all. Neither does a historical report from before tagging was mandatory, which is most of what sits in an archive.
What the table is for: ratios, common-size and variance
Nobody extracts a balance sheet to look at it again. The point is arithmetic the PDF cannot do, and three columns added beside the extracted figures cover most of it:
Variance. This year minus last year, and the same as a percentage. Two columns that turn a pair of comparatives into a story, and the first thing any reviewer asks for.
Common-size. Every line as a percentage of revenue on a profit and loss account, or of total assets on a balance sheet. It is what makes two companies of different sizes — or one company across five years — comparable at a glance.
Ratios. Gross and operating margin, current ratio, gearing, interest cover, inventory and receivable days. Each is a division between two rows you now have as numbers rather than as printed text.
All of them depend on the figures being genuine numeric cells, which is what Financial extraction is for — a column that arrived as text gives a margin of zero or an error rather than a wrong answer, which is at least loud. And all of them depend on the subtotal problem above: divide by a total row you have accidentally double-counted and the ratio is quietly wrong instead.
Where you are comparing several years, extract each year's report into its own sheet and keep the row labels identical across them before you start. Reports do re-word their line descriptions between years, and a lookup that silently fails to match returns nothing rather than complaining.
Extracting from a long annual report
Use the page range. Reading four pages instead of 140 is faster and gives you nothing to sift through afterwards.
Take one statement at a time if the pages are dense. ✂ Choose table lets you drag a box round exactly the block you want, which beats extracting a page of narrative around it.
Check the preview page by page rather than the first page only. Correct any cell by double-clicking it; the correction goes into the download and the underlying extraction is left alone, so changing format or sheet settings afterwards keeps your edits.
Download as .xlsx rather than CSV when there is more than one table — CSV has no concept of sheets, so everything ends up in one file in one grid.
An older report may be a scan. Tick OCR; the recognition runs in your browser. Ruling lines are not recovered from an image, so a scanned ruled table is read by spacing like any other.
If the report is password-protected, type the password when asked — it is used on your device and nowhere else — or remove it from the file first.
Where to go next
PDF table extractor — published accounts are usually ruled, and the ruled case is the exact one — this explains why, and what it still cannot recover.
Bank statement to Excel — where a running balance does exist, so the arithmetic can be checked against itself.
Scanned PDF to Excel — for archived reports that predate the ones you can download, which are usually scans.
Frequently Asked Questions
Open the PDF table extractor, enter the page range the statement is on, set Extraction to Financial and press Extract tables. Bracketed negatives become real negative numbers, comparative year columns come through as numbers, and each statement gets its own sheet. Everything runs in your browser.
A figure printed (1,250) becomes -1250, which is the accounting convention every spreadsheet expects. Left as text a whole column refuses to sum; read naively the minus sign is lost and costs are added to income instead of subtracted. Currency symbols are stripped and the cell is given a money format, and a percentage such as 20% becomes 0.2.
No, and that is deliberate. The multiplier lives in a heading or a footnote, it sometimes changes between sections of the same document, and silently multiplying a column by a thousand because of a word somewhere on the page would be the worst mistake a converter could make. You get exactly the digits that were printed. Record the unit in a cell of your own and apply it knowingly.
Yes. This year, last year and a Notes column between the labels and the figures are all real columns and all come through. The two figure columns look identical to anything guessing from content, so the header row is what tells them apart — label them with their years as soon as the table is in your sheet, because nothing downstream can recover which is which.
No, and it is worth knowing before you sum a column. On the page, indentation shows that several lines are components of the subtotal under them; in a grid every label is just a label in column A, and subtotals sit among the detail rows looking identical. A naive SUM down the column double-counts every subtotal. Add a level column of your own, or sum only the rows you mean.
Yes — choose Merge matching tables. The pages are grouped into tables first, so a statement spanning two pages becomes one sheet while the next statement gets its own, and each sheet is named after whatever the document calls that table rather than Sheet1. Over ten multi-page fixtures the rule got 10 of 10 right with nothing wrongly merged and nothing wrongly split.
Yes — set Output to Preserve appearance and the fonts, colours, background shading, borders, alignment, column widths and merged cells are painted onto the spreadsheet, with the same values the structured mode gives. Two limits: a merge is only restored where text genuinely spans more than one column, and fonts are matched rather than embedded, so a typeface you do not have is substituted.
No. The reconciliation here follows a running balance down a column, which is a bank statement's structure and not a balance sheet's, so on a set of accounts it declines and names what is missing — in our test set 11 of 13 non-statement documents declined with 0 false alarms. Checking that assets equal liabilities plus equity means knowing which row is which, and a converter that inferred those rows from a layout should not be asserting your accounts are wrong. Cells that cannot be what their column is are still marked.
Because a ruled table states its own geometry. Where borders are present they are read as vector paths straight out of the page instead of columns being inferred from spacing, so a heading above the table cannot bridge its columns, an empty cell stays empty rather than shifting everything after it, and a wrapped label stays one cell. Borders drawn as very thin filled rectangles rather than strokes are picked up as well.
Yes, and use a page range rather than reading the whole document — entering 34-37 is faster than extracting a hundred and forty pages of narrative to reach the income statement. Take one statement at a time if the pages are dense, and use Choose table to drag a box round the block you want.
Yes. Two things to watch that are specific to a balance sheet: the indentation showing which lines are components of a subtotal is lost in a grid, so a SUM down the column double-counts every subtotal; and a Notes column of bare reference numbers sits between the labels and the figures and must not be summed. Both are visible in the preview before you download.
Yes, and do it deliberately. Extract each year's report into its own sheet and make the row labels identical across them before you start, because reports do re-word their line descriptions between years and a lookup that fails to match returns nothing rather than complaining. Within one report, this year and last year are separate columns and both come through — label them with their years immediately, since nothing downstream can recover which is which.
No, and deliberately. The multiplier lives in a heading or a footnote, it sometimes changes between sections of the same document, and silently multiplying a column by a thousand because of a word somewhere on the page would be the worst mistake a converter could make here. You get exactly the digits that were printed; record the unit in a cell of your own.
Yes, but check first whether a machine-readable version exists — filed accounts in many jurisdictions are published as tagged data (iXBRL in the UK and much of Europe, XBRL in US filings) as well as a printed PDF, and where that exists every figure carries a label from a published taxonomy with nothing to infer. The tagged version usually covers the statutory statements only, so segment breakdowns, analysis and management commentary still come from the printed tables.