A year in numbers
Spending year review
Turn the expenses you choose from one account into a short year review you can share without forwarding merchant details. Mark refunds, leave out transfers, and copy just the totals. No bank login, signup or upload.
By AnyStatement
Published , 5 min read
Keep the totals. Leave the merchants out.
Your file and the values you enter are processed in this browser tab. They are not uploaded or sent to analytics. We do not save them between visits. Downloads you choose to save remain on your device.
One UTF-8 CSV, one account, one currency. Up to 5 MB and 10,000 data rows. The example is fictional, including its declaration that the remaining months were quiet.
UTF-8 .csv or .txt, up to 5 MB. File contents never leave this tool.
A year review starts with a few decisions
Use your bank's own CSV export if it covers the year. Map the posted date, description and amount columns, then check the date order, number separators and amount signs. Keep one account and one currency per review. Mixed mapped account or currency labels block calculation rather than being added together.
Every row starts undecided. Mark purchases as expenses and related credits as expense refunds. Exclude transfers and card payments you don't want counted as purchases; exclude income, pending activity and other out-of-scope rows separately. A debit is not automatically spending, and a credit is not automatically a refund. The guide to avoiding double-counted card payments walks through that distinction.
For repeated descriptions, add a literal “contains” or “equals” rule. Matching ignores case and surrounding spaces. It doesn't infer a merchant or transaction purpose. If several rules match, the row stays unresolved until you choose an override. The original description remains visible in the row review.
Charges minus refunds, not your whole financial life
Selected charges are the absolute value of expense debits. Selected refunds are expense credits. Net selected expense is charges minus refunds, grouped by the month of the posted date. A refund posted this year stays in this year, even if you made the purchase last year. Refunds can exceed charges in a month or across the selected year; the result is then a net credit adjustment.
The fictional example has January expenses of USD 1,200.00, February expenses of USD 1,000.00 and March expenses of USD 800.00, plus a March refund of USD 100.00. Charges total USD 3,000.00, refunds total USD 100.00 and net selected expense is USD 2,900.00. A separate USD 3,000.00 card payment is explicitly excluded. It isn't added to the purchases.
The example declares complete 2025 coverage, with no other activity. Dividing USD 2,900.00 by 12 gives a monthly average of USD 241.67, rounded once to two decimal places. The calculation retains exact minor units and rejects excess input precision instead of rounding individual rows to fit.
This is a review of selected transactions in one account. It is not total household spending, a savings rate, a tax summary or a financial-health assessment. Purchases on other accounts, cash spending you did not record, and rows you exclude are outside it. The tool does not reconcile balances or establish document authenticity.
A missing month is not a quiet month
Only declare a complete year if you supplied the account's posted activity from January 1 through December 31. That declaration comes from you; finding a January row and a December row would not prove coverage. With complete coverage declared, months without activity show zero. Without it, the page says “partial-period review,” empty months stay unknown and the annual average is unavailable. There is no extrapolation.
Confirm that included rows are posted, not pending. The OFX Banking Specification 2.3, dated October 16, 2020, distinguishes posted and pending transactions in section 11.4.1, and posted and initiated dates in section 11.4.4. Those distinctions are a reason to check your source columns, not a claim that every bank CSV follows OFX.
One UTF-8 CSV or text input can contain up to 5 MB and 10,000 data rows, with at most 100 literal rules. Choose zero to six decimal places and an explicit date format. Ambiguous dates or amounts, blank records, repeated headers, subtotal candidates and malformed rows remain visible and block calculation until you correct a working copy. Out-of-year rows stay visible with an exclusion count. Suspected duplicates are flagged and retained, because identical rows can be real separate purchases.
Use the statement coverage checker to organize statement periods or the duplicate finder to review overlapping exports before preparing the year review. Neither makes the one-account result a complete household picture.
Share the summary, not the statement
“Copy summary” and the text download contain only the year, currency, selected row count, selected charges, refunds, net, monthly average when available, exclusion counts and scope warnings. They do not include descriptions, category names, filenames, account labels, exact transaction dates or references. The preview shows exactly what you will copy. Totals are still sensitive, and removing names does not make a result anonymous.
The detailed CSV is a separate opt-in download. It contains original cells, descriptions, account labels, source lines, decisions and calculation assumptions, so treat it like the source file. The protected copy prefixes formula-like text with an apostrophe and reports how many cells changed; parsed negative amounts remain numeric. A separately warned faithful copy keeps source text unchanged for machine processing, not spreadsheet opening.
OWASP's CSV injection guidance warns that spreadsheet software may remove protection when saving and reopening a CSV. No export is promised safe for every downstream application. CSV quoting follows the shared parser and writer's RFC 4180 conventions (October 2005), which do not define financial meaning or prevent formulas by themselves.
Your file stays in this tab
Your file and the values you enter are processed in this browser tab. They are not uploaded or sent to analytics. We do not save them between visits. Downloads you choose to save remain on your device.
Use Clear or reload to remove the active input. Back navigation may restore uncleared input. Clear does not erase your original file, saved downloads or a summary you already copied, and it is not secure memory erasure.
The linked RFC, OFX specification and OWASP guidance were opened on October 17, 2026. OWASP showed no update date. The fictional totals were recomputed with decimal arithmetic. This tool checks selected-row arithmetic and your explicit decisions; it does not test a bank connection, certify your coverage declaration or authenticate a statement.
When some months are only available as PDFs
Check for a native bank CSV first. If older months are available only as PDFs, AnyStatement can convert statements into reviewable transaction data with links back to source PDF lines. That is a separate upload workflow, not part of this browser-local review, and you don't need it when you already have a usable CSV.