Upload the photo to a converter that writes a QBO file and adds every row up against the balances the bank printed; Evidilo does both. Take the photo flat, straight down and at full size: in our measurement on 26 October 2026, shrinking and tilting a page cost far more than JPEG compression did.
What changes when the statement is a photo
A PDF downloaded from the bank carries a text layer. The amounts are characters in the file, and reading them is a matter of finding the right column. A photo carries pixels. Every amount, date and description has to be worked out from the photo, and so does the question of which column a number belongs to.
That difference matters most at the edges of a page: a total printed in a box, a negative amount in brackets, a row that wraps onto a second line. A reader that guesses a column boundary from a photo can put a withdrawal in the deposit column, and the row looks perfectly ordinary afterwards.
Why the balance check matters more on a photo
The check does not care how the rows arrived. It adds up what was read and compares the total with the opening balance, the closing balance and, where the bank prints them, the balances at the end of each day. A wrong sign, a wrong amount, a skipped row or a doubled row all break that sum.
On a photo it is the main evidence you have that the page was read at all. That is the reason to prefer a conversion that runs it over one that hands you a spreadsheet and leaves the arithmetic to you.
What shrinking, compression, shadow and tilt do to a page
We generated one letter-size statement page at 300 dpi, 2,550 px wide, with a withdrawal column right-aligned at 1,580 px and a deposit column at 2,080 px, and degraded it one condition at a time. The table measures the image, not a reader: how tall a figure in the deposit column stands, how thick its stroke is, how many of the 255 grey levels still separate ink from paper, and how far the deposit column moves sideways between the first and the last row. The values are copied from the dataset.
| Photo condition | Figure height (px) | Stroke (px) | Ink to paper (grey levels) | Column drift (px) | Drift as % of the column gap |
|---|---|---|---|---|---|
| Full page, 2,550 px wide | 33 | 4.0 | 255.0 | 0 | 0.0 |
| Shrunk to 1,600 px wide | 21 | 2.0 | 249.0 | 0 | 0.0 |
| Shrunk to 1,080 px wide | 14 | 2.0 | 241.0 | 0 | 0.0 |
| Shrunk to 720 px wide | 8 | 2.0 | 201.0 | 0 | 0.0 |
| Shrunk to 480 px wide | 6 | 1.0 | 154.3 | 0 | 0.0 |
| JPEG quality 60 | 33 | 4.0 | 255.0 | 0 | 0.0 |
| JPEG quality 35 | 33 | 4.0 | 255.0 | 0 | 0.0 |
| Shadow across the amount columns | 33 | 4.0 | 185.0 | 0 | 0.0 |
| Tilted 3 degrees | not measured | not measured | 254.0 | 70 | 14.0 |
| Tilted 8 degrees | not measured | not measured | 254.0 | 206 | 41.2 |
| Tilted 15 degrees | not measured | not measured | 250.0 | 370 | 74.0 |
| 1,600 px, quality 60, shadow and 5 degrees of tilt together | not measured | not measured | 181.0 | 84 | 26.8 |
Compression alone took nothing a reader needs: at quality 35 the figures kept their height, their stroke and all 255 grey levels. Width did. At 480 px the same figure stood 6 px tall with a 1 px stroke, and the grey levels between ink and paper fell from 255.0 to 154.3. A shadow brought them to 185.0 without touching anything else. Tilt is the one that moves a column: at 15 degrees the deposit column shifted 74.0% of the way to the withdrawal column between the top and the bottom of the page, so a single column line drawn from the top no longer separates the two at the bottom. Height and stroke are left blank on a tilted page, because the box around a rotated figure is not its height.
How to take the photo so it can be read
- Put the page on a flat, plain surface and smooth it out. A curled edge bends the rows near it.
- Fill the frame with the page, including all four corners. A page cropped at the margin loses the printed balances that sit there.
- Shoot straight down rather than at an angle. Eight degrees of tilt moved the deposit column 206 px between the first and the last row in the table above.
- Keep your own shadow off the amount columns. In the table a shadow cut the grey levels between ink and paper from 255.0 to 185.0.
- Take one photo per page rather than one photo of two pages.
- Send the largest version your phone keeps. A messaging app that shrinks a photo before sending it takes away width, and width is what the figures lost first in the table.
Where a photo still costs you time
The check covers the arithmetic and nothing else. A description read wrong and a date read wrong both leave the totals alone, so a statement can tie out with a payee named “MAPLE STREET BAKERY” where the page says something else, or with a transaction dated a day late. Those two fields are worth a look on any conversion, because no balance can catch them.
The other limit is structural. Two misread amounts that cancel out will pass the check when the bank prints no balance beside its rows, because nothing in the arithmetic separates them from a clean statement. It is the same limit that applies to a perfect PDF, and a tied-out statement sets it out in full.
When a scan is better than a photo
If your client can send the bank’s own PDF, take it. If they can scan the paper at 300 dpi, take the scan: a letter-size page at 300 dpi is the 2,550 px row of the table, flat and without a shadow. A photo is the option for the statement that exists only on paper and only in someone’s hand.
How was this checked?
On 26 October 2026 we rendered one generated statement page with Python and Pillow, put it through twelve photo conditions and measured each image with numpy. The results are in dataset.csv and dataset.json, and check.py rebuilds the page, measures it again and re-reads the two competitor pages quoted below. It does not run Evidilo’s reader or any other on the images, so it says what a photo keeps, not how many rows a reader returns from it.
Questions
What is the best way to turn a photo of a statement into a file QuickBooks can import?
Use a converter that proves the read against the balances the bank printed. Evidilo accepts a photo of a paper statement and writes a QBO file for QuickBooks Online or QuickBooks Desktop, and it marks the first day that does not tie out before you download. Other services check balances too: bankstatemently.com says on its homepage that “statements are chained balance to balance, so a missing month shows up as a gap instead of disappearing.”
How do I take a photo of a statement so the amounts are read correctly?
Fill the frame with one flat page, shoot straight down, keep your shadow off the figures and send the full-size photo. Evidilo reads the page and then checks the rows against the printed balances, which is what catches a misread after the fact. Tilt is the condition that moves a column: on a generated page, 8 degrees moved the deposit column 41.2% of the way to the withdrawal column between the first and the last row.
Is it safe to take a photo of a client’s bank statement?
It depends on the service and on what your engagement letter allows. Evidilo encrypts each statement in transit and at rest, sends a photo as an image to the model provider its security page names, and keeps every uploaded statement in an encrypted archive. Services describe this differently: bankconvert.com’s FAQ says “Your data is not the product, and it is never stored or sold.” Read the page that says where a file goes before you upload anything.
What is the difference between a scan and a photo of a statement?
A scan is a flat page captured under even light, usually at a fixed resolution, and it gives a reader the cleanest image of the two. A photo is whatever the phone saw, including a shadow, a tilt and a background. Evidilo reads both, and the balance check is the same either way.
Can I just send a photo from my phone?
Yes. A photo taken in the phone’s camera app is one of the formats Evidilo accepts, and as of 26 October 2026 the first three statements each day convert free, up to 10 pages each, without an account. Check that the photo was not shrunk by a messaging app on the way: shrunk to 480 px wide, the figures on the measured page stood 6 px tall.