Convert a Financial Statement PDF to Excel

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.
📊 Open the PDF table extractor

Runs in your browser. No account, no upload, no page limit.

Three steps

  1. 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.
  2. Set Extraction to Financial so bracketed figures become negatives and the comparative columns become numbers you can chart.
  3. 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:

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

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

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.

Related Tools