Import bank statements
Manual bank selection (rarely needed)
Accepted file formats
Reference for anyone preparing files: these are the exact formats the importer recognizes. Sample values are made up.
Airwallex — Balance Activity Report CSV
Export from Airwallex as-is. Key columns (others may exist and are ignored):
Time,Description,Wallet Currency,Debit Net Amount,Credit Net Amount,Account Balance 2026-06-11T14:40:32+0100,Pay Example Vendor,USD,104.28,,7562.86
Time is ISO date-time; either Debit or Credit Net Amount is filled per row; Account Balance is the running balance.
Wio Bank — statement CSV (both accounts in one file)
Date,Description,Account number,Account currency,Account IBAN,Account type,Amount,Balance 2026-06-04,From Example Sender,1234567890,AED,AE000000000001234567890,Current,1000.00,5000.00
Date is YYYY-MM-DD; Amount is signed (+in/−out); Balance is the running balance. Rows are split into accounts automatically by Account number.
RAK Bank — Account Transactions CSV (AED / EUR / GBP / USD)
Export from RAK online banking as-is. The file starts with a preamble; the account number decides the currency automatically.
Account Statement,,,,,,,,,,, Account Id,,[CURRENT ACCOUNT No.XXXXXXXXX1234],,,,,,,,, From Date,,01/01/2026,,,,,,,,, ,Date,,Value date,Transaction ID,Cheque number,Description,Details,Additional details,Withdrawal,Deposit,Balance ,04/06/2026,,04/06/2026,S12345678,,EXAMPLE TRANSFER,,,"1,000.00",,"4,000.00" ,,,,,,Total,,,"1,000.00",0.00,
Dates are DD/MM/YYYY; Withdrawal/Deposit are separate columns; Balance is the running balance.
Currenxie — CSV + monthly statement PDF together
The CSV carries transactions, the statement PDF carries the balances - drop both in one batch. Either CSV flavor works:
"*Date (MM/DD/YYYY)","Time (UTC+0)","Type","Currency","*Amount","Beneficiary","Description","Transaction ID","Reference" "5/26/2026","12:49:57","Debit","USD","-100.00","Example Bene","Transfer to Example","AB12CD34","Self transfer"
"*Date","Type","Currency","*Amount","Beneficiary","Description","Transaction ID","Reference" "11/12/2026","Debit","USD","-100.00","Example Bene","Transfer to Example","AB12CD34","Self transfer"
Dates are MM/DD/YYYY; Amount is signed.
Mercury — transactions CSV (card numbers only)
Mercury's transactions export is used ONLY to attach each charge's card number (Last Four Digits) to the transactions already imported from the statement PDFs - it never adds transactions itself. The card number is what splits Google Ads between the COGS card (••7171) and the Imperium card (••3073); after this file is dropped those charges categorize automatically. Any date range works; wider is better.
Date (UTC),Description,Amount,Status,Source Account,Bank Description,...,Last Four Digits,... 06-28-2026,Google,-572.94,Sent,Mercury Credit,GOOGLE *ADSxxxxxxx,,,7171,...
Chase — account activity CSV (chase.com download)
The transaction-activity export from chase.com for the checking account. Safe to drop alongside the monthly statement PDFs: rows already imported from a statement are recognized by their ACH trace number and skipped, in both directions - nothing ever counts twice. The "TRN" transaction id at the end of each description is also stored separately for transfer cross-checking.
Details,Posting Date,Description,Amount,Type,Balance,Check or Slip # DEBIT,06/29/2026,"ORIG CO NAME:EXAMPLE ... TRACE#:091000011234567 ... TRN: 1801234567TC",-104.57,ACH_DEBIT,1234.56,,
Posting Date is MM/DD/YYYY; Amount is signed (+in/−out); Balance is the running balance.
Shopify — "Finance Dashboard" CSV export (sales by order)
From Shopify Analytics, export the "Finance Dashboard" report as-is - one month or many months per file, overlapping files are safe (each order is stored once; reversal rows update the original order's refund columns). Goes to the Shopify sales tab, not to any bank account.
"Order name","Billing country","Day","Order or sales reversal","Return reason","Discounts","Sales reversals","Gross sales","Total sales" "#12345","Germany","2026-06-30","order",,-4.5,0,45,40.5 "#12345","Germany","2026-07-04","reversal","Item damaged",0,-40.5,0,-40.5
Day is YYYY-MM-DD; amounts are USD; the fourth column says whether the row is the order itself or a sales reversal (refund); Return reason may be empty.
Shopify — payment transactions CSV export
From Shopify Payments (or generated from the API by Claude). Fills the payout columns on the Shopify sales tab for orders already imported there - drop it after (or together with) the sales CSV.
Transaction Date,Type,Order,Card Brand,Card Source,Payout Status,Payout Date,Payout ID,Available On,Amount,Fee,Net,Checkout,Payment Method Name,Presentment Amount,Presentment Currency,Currency 2026-06-30 20:18:08 +0200,charge,#12345,visa,online,paid,2026-07-02,142900000000,2026-07-02,224.25,8.60,215.65,#4152...,card,224.25,USD,USD
Shopify — payouts CSV export
From Shopify Payments payouts (or generated from the API by Claude). One row per payout; goes to the Shopify Payouts tab. Re-exports safely update a payout's status (e.g. in transit → paid).
Payout Date,Status,Charges,Refunds,Adjustments,Marketplace Sales Tax,Advances,Reserved Funds,Fees,Retried Amount,Total,Currency,Bank Reference 2026-06-30,paid,6092.00,0.00,0.00,0.00,0.00,0.00,224.78,0.00,5867.22,USD,043305134960494
Shopify — daily balance CSV (generated by Claude)
Not a Shopify export - Claude computes it from the Payments API (verified against Shopify's own reconciliation report). Powers the starting/ending balance summary on the Shopify Payouts tab.
Date,End of Day Balance,Currency 2026-06-30,1149.56,USD
Stripe — "Itemized payout reconciliation" CSV
From Stripe: Reports → Payout reconciliation → Download → Itemized payouts (not "Summary"). ALWAYS export from 2026-01-01 to today - the file only contains paid-out transactions, and the daily balances are recomputed from the whole file on every import. One file feeds both the Stripe payouts tab and its starting/ending balance summary.
"automatic_payout_id","automatic_payout_effective_at","balance_transaction_id","created","available_on","currency","gross","fee","net","reporting_category","description" "po_1AbC...","2026-01-02 01:16:54","txn_3Xy...","2025-12-30 01:36:34","2026-01-02 01:00:00","usd","79.00","3.78","75.22","charge","..."
PayPal — activity CSV export (balance affecting)
From PayPal: Activity → All transactions → Download → CSV, "Balance affecting", from 2026-01-01 to today. Dates are DD/MM/YYYY; the Balance column is the running balance (verified row-by-row on import data). Feeds the PayPal tab and its starting/ending balance summary. Names/emails in the file are NOT stored in the dashboard.
"Date","Time","TimeZone","Name","Type","Status","Currency","Gross","Fee","Net",...,"Transaction ID",...,"Balance",...,"Balance Impact" "01/01/2026","02:49:48","PST","...","Express Checkout Payment","Completed","USD","38.25","-1.98","36.27",...,"3J6470...",...,"1,521.60",...,"Credit"
Costs table CSV (COGS tab)
The cost-items export (e.g. custom_spends_table from Triple Whale). One row per cost; "No end date" means still active. Re-uploads update items in place by their Id.
Id,Category,Title,Start Date,End Date,Cost,Recurring,Recurring Interval Length,Is Ad Spend abc123,Apps,Shopify,"Apr 27, 2025",No end date,69,true,every 1 day,false
Costs are USD; percentage costs (e.g. "1% of sales") are shown as written.
PDF statements (auto-detected)
Drop the original PDF downloaded from the bank - do not scan, print or re-save it (the importer needs the selectable text inside). Accepted statements:
- Amex (Middle East) Platinum — monthly Statement of Account
- Chase / JPMorgan — Business Complete Checking monthly statement
- Mercury — monthly statement (checking) and IO credit card statement
- Currenxie — USD account statement (together with its CSV, see above)
Every PDF is verified against its own printed totals and balances before anything is imported; statements that don't reconcile are refused with the exact mismatch.
Import history
Files already brought in - check here before uploading. Re-importing a file is always safe (duplicates are skipped), this is just the quick look.
| File | Bank | When | Result |
|---|
Imported accounts
| Account | Bank | Transactions |
|---|
Monthly balance anchors
For accounts whose CSV includes a running balance column, opening/closing balances are auto-detected from the first and last transaction of each month. You can override any value manually - manual values always win. Enter every anchor in the account's native currency (shown in the Currency column) - reconciliation never converts.
| Account | Currency | Month | Opening balance | Closing balance | Source |
|---|
Dashboard
Balance over time
Monthly income vs. expense
Per-account balances (as of selected date)
| Account | Balance |
|---|
Bank transactions
Every imported transaction for the selected period, oldest first. Amounts are converted to USD at the fixed rates (positive = received, negative = sent); hover an amount to see the native-currency figure. Categories are saved per transaction and are manual for now - auto-detection comes later.
| Date | Account | Amount (USD) | Description | Category |
|---|
Expense categorization
Every unique expense across ALL months (card payments and internal transfers excluded), grouped by merchant. Set or confirm a category for each merchant - choices are saved as rules immediately - then press Apply to stamp the category on every matching transaction above (tagged "auto"; a category you picked by hand on a single transaction is never overwritten). New imports apply the rules automatically.
| Merchant / expense ↕ | Transactions | Total (USD) | Category ↕ | Tagged |
|---|
Shopify sales
| Day | Order | Billing country | Discounts | Gross sales | Total sales | Refund date | Refund | Reason | Payout status | Payout date | Payout ID | Available on | Amount | Fees | Net |
|---|
Shopify Payouts
| Payout date | Status | Charges | Refunds | Adjustments | Tax | Advances | Reserved | Fees | Retried | Total | Ccy | Bank reference |
|---|
Crypto investments
Holdings
| Asset | Quantity | Purchase rate | Current value | Unrealized P/L | Allocation (of portfolio value) |
|---|
Stripe payouts
Historic processor: Stripe carried the store's payments until 2026-05-18, when Shopify Payments took over (trailing refund and dispute payouts continue after that date).
| Payout date | Status | Txns | Charges | Refunds | Disputes | Other | Fees | Total | Payout ID |
|---|
PayPal
Balance-affecting PayPal activity from the account's CSV export. The summary aggregates sales; the table lists everything else - withdrawals to bank (PayPal's payouts, highlighted), refunds, dispute holds, fees, conversions. Balances come straight from PayPal's own running-balance column.
| Date | Type | Status | Gross | Fee | Net | Balance after | Ccy |
|---|
COGS
Cost items from the costs-table CSV, in USD. A period shows every cost active in it - running costs with no end date always show; ended costs appear only in periods they overlap.
| Category ↕ | Title ↕ | Cost (USD) ↕ | Billing ↕ | Start ↕ | End ↕ | Imported from ↕ |
|---|
Payment processor fees (calculated from sales)
These costs are percentages of sales, so their amount is computed from the Shopify sales data - only over the part of the period each fee was actually active.
| Category | Title | Rate | Active window in period | Sales base | Calculated cost |
|---|
Add an expense
Profit & Loss
Two views of the same period, both built ONLY from Shopify sales data, categorized bank transactions, and the payment processors' exports. Expected: sales by order date (gross, minus discounts and refunds). Actual: what the processors really captured in the period (gross, before fees). Both share the same expense lines: processor fees and disputes from the processor data, everything else from the bank-transaction categories. Amex is excluded from the accounting entirely.
Expected P&L (accrual - by sale/cost date)
Actual P&L (cash - by bank movement)
Reconciliation
✅ computed closing balance matches the entered/auto-read anchor. ⚠️ shows the difference when it doesn't. Seam issues flag when one month's closing balance doesn't line up with the next month's opening.