# Import Bank Statement Into Budgeting App Without a Link

- Author: CheapBankConvert (https://cheapbankconvert.com)
- Published: 2026-10-17
- Category: Budgeting from your statements
- Canonical: https://cheapbankconvert.com/blog/import-bank-statement-into-budgeting-app

> How to import a bank statement into a budgeting app without linking your bank: the CSV columns apps expect and fixing date and sign errors.
To import a bank statement into a budgeting app without linking your bank, turn the statement into a CSV or OFX file, then map its columns in the app's file import: date, payee, amount. Most errors after an import come from three things: a date format the app misreads, amounts with the wrong sign, and rows imported twice.

## Why import a bank statement instead of linking the budgeting app to your bank?

A file import keeps your bank login out of the budgeting app. You download or convert a statement yourself and hand the app a file, so no third party holds ongoing access to your account. The cost is effort: you repeat the import each month, and new transactions only appear when you add them.

Linking works through an aggregator that signs in to your bank, or uses a token your bank issues, and pulls transactions on a schedule. That is convenient when it works. It also breaks in ordinary ways: the bank changes its login, a credit union is not supported, or the connection quietly stops updating for a week.

A file import avoids those problems and adds a few others:

- **It is manual.** Someone has to download and import each month.
- **It is batched.** You see spending when you import, not the day it happens.
- **It needs a file the app accepts.** A PDF statement usually is not one.

For a monthly budget review, batching is rarely a problem. You look at the month once it ends, which is when the statement arrives anyway. The habit of downloading, converting and reviewing in one sitting is laid out in the routine for [tracking spending from bank statements each month](/blog/track-spending-from-bank-statements).

## File formats a budgeting app import accepts

Budgeting apps that offer file import typically take CSV, and many also take OFX, QFX or QIF. A PDF is a printed page, not data, so apps generally cannot import it. The open source app Actual Budget, for example, lists CSV, QIF, OFX, QFX and CAMT in its [Actual Budget guide to importing transactions](https://actualbudget.org/docs/transactions/importing/), and recommends OFX or QFX.

The formats differ in how much they carry:

| Format | What it is | Strength | Weakness |
| --- | --- | --- | --- |
| CSV | Plain rows and columns of text | Every bank and converter can produce it | You map the columns yourself each time |
| OFX / QFX | A structured financial data file | Fields are labelled, often with transaction IDs | Not every bank offers it, and few converters output it |
| QIF | An older text format | Still supported by some apps | No transaction IDs, so duplicate checks are weaker |
| PDF | A printed statement | What every bank provides | Needs converting before any import |

If your bank offers an OFX or QFX download for the period you need, use it. Online banking often limits how far back those downloads go, though. For older months, or for a bank that only offers PDFs, a CSV made from the statement is the practical route.

## CSV columns budgeting apps expect from a statement import

A budgeting app needs at least three columns from a statement CSV: a date, a description the app treats as the payee, and an amount. Amounts come either as one signed column, negative for spending, or as two columns for money out and money in. A balance column is useful to you for checking, but most apps ignore it.

During import, the app shows each CSV column and asks which field it holds. Actual Budget's import screen, as its guide describes, offers a dropdown per field, and a field left unmapped simply stays blank. Other apps use the same idea under different names.

A mapping from a converted statement usually looks like this:

| CSV column | App field | Notes |
| --- | --- | --- |
| Date | Date | Posting date, one format throughout the file |
| Description | Payee | Bank text such as "SQ *CORNER BAKERY 0914" |
| Amount | Amount | Negative for money out, positive for money in |
| Balance | (not mapped) | Keep it in the file for your own check |
| Category | Category or notes | Only if you added one before importing |

Clean the file before importing, not after. Delete any total rows, page headers repeated mid-file, and blank lines. An app will import a row that says "Page 2 of 4" as a transaction with no amount, and deleting those one by one inside the app is slower than in a spreadsheet.

If you want to look at the rows before committing them to an app, a quick summary in a spreadsheet catches oddities, such as a category total that looks far too high. A [pivot table for bank transactions](/blog/pivot-table-for-bank-transactions) does that in a few clicks.

## Fixing date format errors after a statement import

A date error after a statement import usually means the app read day and month the wrong way round. A row dated 03/09/2026 is September 3 in day-first countries and March 9 in the United States. The fix is to tell the app which format the file uses, or to rewrite the dates as 2026-09-03 before importing.

Spotting the problem is easy once you know the signs:

- **Transactions appear months before or after the statement period.** A September statement shows rows in March and December.
- **Some rows import and others fail.** Dates with a day above 12, such as 25/09, cannot be read month-first, so they are rejected or blanked while the rest import wrongly.
- **Every date is a year off.** That points to two-digit years, where "26" was read as 1926 or the year was guessed.

Actual Budget's guide suggests choosing the date format that matches your file and watching the preview, which shows how each date will be read. Most apps with a file import have a similar setting. If yours does not, change the dates in a spreadsheet first: format the date column as yyyy-mm-dd, which no app can read two ways, and save as CSV again.

Check one more thing before importing: that the date column holds dates, not text. In Excel or Google Sheets, a real date can change its display format. Text that only looks like a date cannot, and will export exactly as typed.

## Why do imported amounts show up with the wrong sign?

Amounts show the wrong sign when the file and the app disagree about which direction is negative. Some exports show purchases as positive numbers in a "Debit" column. Card files often show charges as positive. The app reads them literally, and your groceries become income. The fix is to flip the signs on import or in the file.

Three situations cause most sign errors:

1. **Separate debit and credit columns** mapped into a single amount field. Map them separately instead. Actual Budget, for instance, has an option to split the amount into separate inflow and outflow columns.
2. **Card statements with charges as positive numbers.** From the cardholder's side a charge is spending, so it should be negative in the budget.
3. **A converter or bank that marks direction with "CR" and "DR" text** rather than a minus sign. The app sees text, not a number.

Many apps offer a one-click fix. Actual Budget's import has a "Flip amount" option that negates every amount in the file. In a spreadsheet, the same fix is a helper column with `=-C2`, filled down and pasted back as values.

After flipping, check one row you know well, such as rent or a paycheck. If rent is negative and pay is positive, the whole file is right.

## Duplicate transactions when a statement import overlaps earlier rows

Duplicates appear when two imports cover the same days. That happens when monthly statements overlap, when you import a CSV and later a statement for the same period, or when you re-import a file after fixing an error. Apps try to catch duplicates, but a CSV without transaction IDs gives them less to work with.

Actual Budget's guide describes how its check works. For OFX and QFX files it first compares the transaction ID. Otherwise it looks for an existing row with a similar date, the same amount and a similar payee, and treats that as the same transaction. That is a sensible rule, and it shows where it can fail. Two genuine $4.50 coffees at the same café on the same day look identical.

Habits that keep duplicates out:

- **Import by statement period, never by guesswork.** Note the last date you imported and start the next file on the day after.
- **Fix the file before the first import.** Re-importing a corrected file into an account that already holds the first attempt is how duplicates pile up.
- **Compare balances after each import.** If the app's account balance matches the closing balance printed on the statement, nothing was doubled or dropped.

The balance comparison is the one check that settles the question. A running balance column in your CSV makes it simple: the last row's balance should match the app.

## Step list: importing one statement PDF into a budgeting app

The full routine takes a statement PDF from your bank and ends with categorized transactions in the app, without linking any account. It has seven steps, and the checks in steps 4 and 7 are what keep errors out. Expect fifteen to twenty minutes for a typical month once you have done it twice.

1. **Download the statement PDF** from online banking. Save it somewhere private rather than emailing it to yourself. The trade-offs of sending statements by email are covered in [whether it is safe to email bank statements](/blog/is-it-safe-to-email-bank-statements).
2. **Convert the PDF to CSV**, or download a CSV directly if your bank offers one for that period.
3. **Open the CSV in a spreadsheet.** Delete header repeats, page totals and blank rows. Set the date column to yyyy-mm-dd.
4. **Check the signs and the total.** Spending should be negative. Opening balance plus the sum of all amounts should equal the closing balance on the statement.
5. **Save as CSV** and open the app's file import for the right account.
6. **Map the columns**: date, payee, amount. Set the date format and flip amounts if needed. Read the preview before confirming.
7. **Compare the app's balance** with the statement's closing balance, then categorize any new payees.

For step 2, CheapBankConvert produces a CSV with date, description, amount and balance columns from a PDF statement, and the balance column makes step 4 quick. It is getting ready to open, with early pricing of $2.99 for a statement up to 10 pages, and you can [sign up to be told when it launches](/get-started).
