Bank Feed
The Bank Feed brings your bank or credit card statement into the VMX Ledger. Instead of typing in every check, expense, and deposit by hand, you download a file from your bank's website and upload it. VMX lines up each transaction against what's already in the Ledger, and for each one you either confirm it's already there (Match), record it because it isn't there yet (Add), or dismiss it because it isn't yours to book (Exclude).
Availability
The Bank Feed is enabled per-client by VMX, and only for stores that already use the VMX Ledger instead of QuickBooks. If you'd like to discuss turning it on, contact help@vmxllc.com.
Within a store that has the Bank Feed enabled, each user needs the same GL admin permission that opens the Ledger (managed on the Admin → Permissions page). Some users may be set up as view-only for the Ledger — they can open the review queue and look, but an alert reading View Only: You can review this queue but cannot confirm matches takes the place of the Match, Add, and Exclude buttons.
Turn on a bank or credit card account
The Bank Feed works per account — you turn it on one bank or credit card account at a time.
- In Admin, click Ledger.
- Open the slide-out menu on the left (click the arrow handle on the left edge) and choose Banking.
- Click Add Feed Account.
- Choose the account from the dropdown. Only Bank Account and Credit Card accounts that aren't already on the feed are listed.
- Optionally enter a Start date. See "Set a start date" below before you skip this.
- Click Add.
The account now appears as a card on the Banking page, showing how many transactions are waiting for review, when it was last uploaded to, and its start date.
Set a start date
Every feed account has a Start date. Transactions on your bank statement dated before it are never imported — not hidden, never brought in at all — even if they appear in a file you upload.
Set the start date to the day your VMX Ledger books began covering this account (your cutover date, if you're moving from another accounting system). Everything from before that date is already in your books through whatever process got you onto the Ledger, so the Bank Feed has no reason to touch it.
To set or change it:
- On the Banking page, find the account's card.
- Click edit next to the Start date.
- Enter the date (or clear the field to import everything, with no lower bound) and click Save.
Read "Add on an old transaction creates a duplicate" below before clearing a start date or setting one further back than your true cutover. A blank or too-early start date is the one setting in this feature that can quietly cause real duplicate bookkeeping.
Connect your bank for automatic transactions (SimpleFIN)
Instead of downloading and uploading a statement every week, you can have transactions arrive on their own.
VMX uses SimpleFIN Bridge, an independent service that reads your bank in read-only mode. You sign up with them directly and pay them (about $15/year for up to 25 institutions) — VMX doesn't charge for it.
It can only read. SimpleFIN has no ability to move money, and neither does VMX through it.
Set it up
- Go to SimpleFIN Bridge, create an account, and connect your bank.
- Bridge gives you a long setup token — a single block of letters and numbers.
- In VMX go to Admin → Ledger → Banking → Bank Feed. In the Automatic bank feed box at the top, paste the token and click Connect.
- On each feed account card, click Link to a bank account and pick which of your bank accounts feeds it.
The setup token can only be used once. If you get an error saying it wasn't accepted, generate a fresh one in Bridge and try again.
After it's connected
- Transactions are pulled once a day, early in the morning, so the review queue is ready when you start.
- Click Pull now any time you don't want to wait.
- Each account card shows when it last pulled, and shows an error there if the connection needs re-authorising at your bank (banks expire logins periodically — that's normal).
- Uploading a statement still works. Uploading a period that was already pulled will not create duplicates — VMX recognises transactions it already has.
- Unlink on a card stops automatic pulls for that account and goes back to uploads. Transactions already imported are kept.
Everything after that — the review queue, matching, adding, excluding — is exactly the same as for an uploaded statement.
Download a statement from your bank
Your bank's website has an export or download option for your account, usually near the transaction list or statements. Two kinds of files work:
- QFX or OFX — a format written specifically for accounting software. If your bank offers it, prefer it: it includes the bank's own reference number for each transaction, which the Bank Feed uses to avoid duplicates more reliably than matching on date and amount alone.
- CSV or TXT — a plain spreadsheet export. This works too, but the first time you upload one for a given account, you'll map its columns (see below).
Any date range works, including one that overlaps a period you've already uploaded — see "Re-uploading a statement is safe" below.
Upload a statement
- On the Banking page, find the account's card and click Upload.
- Choose the file (QFX, OFX, CSV, or TXT — up to 10 MB).
- Click Upload.
If the file needs no setup (QFX/OFX, or a CSV whose columns are already mapped — see below), VMX imports it immediately and reports how many transactions were new and how many were already on file. If any transactions were dated before the account's start date, that count is reported too, and none of them are imported.
Map columns the first time (CSV/TXT only)
A CSV or TXT export has no fixed format — every bank lays its columns out differently — so the first time you upload one for an account, VMX shows you a preview of the file and asks which column is which:
- Preset — if your bank's layout is already known to VMX (Chase is currently supported), choose it here and skip manual mapping entirely.
- Date column and Date format — which column holds the transaction date, and how it's written (default
m/d/Y, e.g.3/14/2026). - Payee column and Memo column — optional; whichever columns hold the transaction's description.
- Amount column — if the file has one column with a single signed amount per transaction.
- Debit column and Credit column — use these instead of Amount if the file has separate columns for money out and money in.
- Header rows to skip — how many rows at the top of the file are headers, not data (usually 1).
- Invert sign — check this if the file shows charges as positive numbers instead of negative.
Click Import to finish uploading with this mapping. VMX remembers it, so future uploads for the same account import immediately without asking again. If your bank changes its export format later, upload a file with the new layout and you'll be asked to map it again.
Read the review queue
Click Review on an account's card (or the N for review badge) to open its queue — every imported transaction that hasn't been resolved yet, newest first. Each row shows the transaction's date, payee, memo, and amount, plus:
- Suggested Match — VMX's best guess(es) at the existing Ledger entry this transaction already corresponds to, if any. Each candidate shows a confidence label (Check, Exact, or Relaxed — see "Match a transaction" below), its date, type, amount, and description.
- A note reading N similar unresolved transaction(s) on this date with the same amount and payee — review carefully before matching, when other transactions in the queue could be confused for this one. This shows up for things like two identical recurring charges in the same batch — pay attention to which one you're acting on.
- A Match button when at least one candidate exists, or an Add button when none do.
- An Exclude button, always available.
If exactly one transaction has a single high-confidence candidate (Check or Exact — never Relaxed), it's preselected and a Match All Exact (N) button appears at the top of the queue to confirm every such transaction in the account at once, after a summary confirmation.
Match a transaction
Match tells VMX that a transaction on your bank statement is already recorded in the Ledger — it links the two together instead of creating anything new.
- In the review queue, look at the row's Suggested Match candidates.
- Choose the correct one (a radio button per candidate). If exactly one Check or Exact candidate is shown, it's already selected for you.
- Click Match.
VMX marks the Ledger line Cleared, the same status you'd set by hand on the account's register or Reconcile page (see Bank Reconciliation) — Match does that step for you as part of confirming the transaction is real.
Candidates are ranked by how sure VMX is:
- Check — the check number on the statement matches a check number already in the Ledger, and the amount matches exactly.
- Exact — the amount matches exactly and the dates are within 3 days of each other.
- Relaxed — the amount is within 5 cents and the dates are within 10 days of each other. Relaxed candidates are never preselected — always look closely before confirming one.
A candidate already marked already marked cleared can still be matched, but check it carefully first — it usually means the same Ledger line has already been cleared by something else, which can be a sign that this bank transaction is a duplicate rather than a genuine second match.
Add a transaction
Add creates a brand-new transaction in the Ledger from a bank transaction that isn't there yet. It only appears as an option when VMX found no match candidates for that row.
If the transaction is from before your account's start date, do not click Add — everything before that date is presumed already recorded in your books, so Add would create a duplicate of something you already have, not record something missing. See "Add on an old transaction creates a duplicate" below for why this happens and how to tell.
- In the review queue, click Add on the row.
- Confirm or edit the Date and Description. The Amount can't be changed — it comes straight from the bank.
- Choose a Category account — what this transaction was for (a supply expense, a fee, sales income, and so on).
- Optionally choose a Vendor and add a Memo.
- Click Add.
VMX creates a Deposit, Check, or Expense transaction (picked automatically based on the amount and whether the bank supplied a check number) and marks its bank-side line Cleared, the same as Match does.
Before you click Add, read "Add on an old transaction creates a duplicate" below. It's the one case in this feature where Add looking like the only option doesn't mean it's the right one.
Exclude a transaction
Exclude removes a transaction from the review queue without creating or matching anything in the Ledger. Use it for things that showed up on the bank statement but aren't a transaction you need to book — a duplicate download, a line the bank itself later reversed, or anything you decide doesn't belong in your books.
- In the review queue, click Exclude on the row.
- Optionally enter a reason (for example, "bank fee already entered," "not ours," "duplicate download").
- Click Exclude.
Excluding is reversible. To see what's been excluded from an account, click View Excluded (N) near the top of its review queue; from there, Unexclude returns a line to the review queue. See "Two near-identical lines can both be correct" below for the most common legitimate reason to exclude something.
A line that comes back saying "Needs review again"
If you delete a Ledger transaction that a bank line's Add created, that bank line returns to the review queue rather than quietly disappearing. It arrives with a yellow Needs review again banner explaining that the transaction it created was since deleted.
A line in that state offers Add and Exclude only — there is no Match button on it, and it is never counted into Match All Exact. Matching is reserved for lines that have never been resolved; once a line has been through Add, adding it again or excluding it are the two ways to settle it.
If the queue can see a Ledger transaction that looks like this line's counterpart, it still lists it under the banner, marked for reference only and with no tick box. That's there to help you choose: if the counterpart is a transaction you meant to keep, Exclude the bank line rather than adding it, so the same spending isn't recorded twice. If it isn't, Add the line again.
"Add" on an old transaction creates a duplicate
This is the one place in the Bank Feed where the safe action and the obvious action are different, and it's worth reading before you use Add on anything unfamiliar.
Every transaction from before your account's start date is presumed already recorded and already reconciled — that's what the start date means (see "Set a start date" above). Because of that, VMX won't offer a match for anything already-reconciled: matching against a reconciled entry would disturb a period that's already closed, so those entries are deliberately left out of the candidate search. The result is that an old transaction shows up with no candidates — which leaves Add as the only enabled button, and makes it look like the thing to do.
It is not. Clicking Add on a transaction that's already in your books creates a second copy of it. The books already hold it; the Bank Feed is telling you it found no match because it isn't searching there, not because there's nothing to find.
In normal use, this can't happen: the start date stops those transactions from being imported at all, so they never reach the review queue. It becomes possible only if the start date on the account is blank or set earlier than your real cutover — then an old statement can be uploaded and its transactions will sit in the queue with no candidates, looking exactly like new transactions that genuinely need to be added.
If you ever see a transaction in the queue that you're sure predates when this store started using the Ledger for this account, stop and set (or correct) the account's start date instead of clicking Add. If you're not sure whether a transaction is old enough to be a duplicate, contact help@vmxllc.com before adding it.
Two near-identical lines can both be correct
The Bank Feed is built to never lose a real transaction, even at the cost of occasionally showing you one twice. If your bank re-issues a transaction — reposting it with a cleaned-up or reworded description, for example, after first showing it as pending — the reworded copy can appear in your review queue as a second line alongside the original, even though only one real transaction happened.
This is deliberate, not a bug. A transaction that quietly never showed up would be far worse than one that shows up twice: the first is money unaccounted for, the second is a two-second cleanup. When you see two lines that look like the same transaction — same date, same amount, a payee or memo that's only slightly different in wording — treat one of them as the real transaction (Match or Add it, whichever applies) and Exclude the other one, with a reason like "duplicate — bank reworded the description." That's the intended way to resolve this, and it costs nothing: Exclude never touches anything already in your books, and it's reversible from the account's View Excluded list if you change your mind.
This is different from two lines that merely look alike but are genuinely separate transactions — the same vendor charging you twice in a short window, for instance. VMX flags that case too, with a note in the review queue reading N similar unresolved transaction(s) on this date with the same amount and payee — review carefully before matching (see "Read the review queue" above). Don't Exclude either of those lines just because they resemble each other — look closely before deciding whether you're looking at one transaction twice or two transactions that happen to match on date, amount, and payee.
Same bank reference, details differ
Most bank exports carry a reference number for each transaction, which the Bank Feed normally trusts as proof that two imported lines are the same transaction. Sometimes a bank reuses that reference number in a way that leaves genuine doubt about what happened — a pending transaction posting with its amount adjusted (a tip added, a fuel hold settling to the final charge), or, less often, a bank export bug that assigns the same reference number to two unrelated transactions.
When VMX can't tell which of those happened, it doesn't guess. Both transactions are imported, and the newer one is flagged in the review queue with a note reading Same bank reference as an earlier transaction, details differ — naming exactly which of five fields don't match (date, amount, payee, memo, check number) and showing the earlier line's date, amount, payee, memo, and current status for comparison.
To decide which it is, compare the two lines directly, and ask one question before trusting a small shift: does this vendor legitimately bill you more than once around this date? If the answer is no, a small shift in amount or date reads the way it looks:
- If the amount or date shifted in a way that looks like a pending charge settling to its final value (a small adjustment, a date a day or two later) — and this isn't a vendor you'd expect to see twice in that window — it's likely the same transaction updating. Match or Add the newer line as the real one, and Exclude the earlier line it's flagged against.
- If the two lines look like genuinely different transactions that happen to share nothing but that reference number (different payees, unrelated amounts, dates far apart), treat them as separate and resolve each one on its own — Match or Add both.
- If this vendor does legitimately bill you more than once in a short window — a recurring charge, or two separate purchases — do not treat a small shift as proof of an update. Two real, separate transactions at the same vendor for a similar amount a day or two apart can look exactly like one transaction settling. Nothing in the bank's file distinguishes these two cases; that's the reason this flag exists instead of VMX deciding on its own. Resolve each line as its own transaction unless you have an actual reason (an emailed receipt, a call to the vendor) to believe they're the same charge twice.
If you're still not sure which reading is correct, leave both lines in the queue and contact help@vmxllc.com rather than guessing — getting it wrong either merges two real transactions into one or books one of them twice.
Re-uploading a statement is safe
You can download a file that covers dates you've already uploaded — most of the time, in fact, that's what "downloading recent activity" naturally does. Uploading it again doesn't create duplicates: every transaction VMX has already imported for that account is recognized and skipped, whether it arrives by the bank's own reference number (QFX/OFX) or by matching its date, amount, and description against what's already on file (CSV/TXT, or anything without a reference number). The upload result tells you how many transactions were newly imported and how many were already on file.
This means you don't need to track exactly where your last upload left off. When in doubt, download a wider date range than you think you need and upload it — anything already in the Bank Feed is left alone.
How this changes month-end reconciliation
Before the Bank Feed, reconciling an account against your bank statement (see Bank Reconciliation) meant working from two places at once: everything had to already be entered in the Ledger by hand, and then you went line by line marking each one Cleared as you found it on the statement.
The Bank Feed does the first half of that work as you go. Working through an account's review queue — matching what's already recorded, adding what isn't, excluding what isn't yours — both records transactions you hadn't entered yet and marks the Ledger lines Cleared at the same time Match or Add runs, instead of as a separate pass later.
By the time you sit down to do the account's formal reconciliation, most or all of the statement should already be reflected in the Ledger and marked Cleared. Reconciliation itself doesn't change — you still enter the statement's ending balance and confirm the difference reaches zero — but there's usually little or nothing left to clear by hand, because working the Bank Feed's review queue each time you get a new statement already did it.