Skip to main content
Checked against the product · 2026-10-05

Bank Feeds — Controller Guide

A bank feed is the automatic pipe that pulls your bank's transactions into Arcvue every day, so your books build themselves from real activity instead of hand-keyed entry. This guide explains what the feed does, then walks the exact clicks: where you connect and map an account (an admin screen), and where you watch the activity day to day (the accounting Feeds page). It assumes you run a business but aren't necessarily a career government accountant.

For: controllers · Time: ~10 minutes · You'll need: the Accounting module; connecting/mapping accounts also needs an admin role (CEO, admin, or COO).

Where it lives

Two destinations, and knowing which is which is the whole trick.

  • Setup lives in Admin. Connecting a bank, mapping it to a GL account, syncing on demand, and importing history all happen at /admin/bank-feeds (reachable from the user menu, or the Admin button in the top-right of the Feeds page).
  • The daily activity view lives in Accounting. Go to Accounting → Cash → Feeds (/accounting/feeds), Bank Feeds tab. This is where you watch what flowed in and jump to code it.

Part 1 — The ideas you need first (read once)​

What the feed is (and what it feeds)​

The bank feed connects a bank account to Arcvue and keeps a running, exact copy of every transaction the bank shows. That copy is the raw material for two things downstream:

  • Coding — each transaction becomes a proposed journal entry (which GL accounts it hits), reviewed in the Bookkeeper queue.
  • Reconciliation — the feed is the "bank side" that month-end reconciliation matches your books against. No feed, nothing to reconcile.

How a transaction travels​

  1. Ingested — pulled from the bank on a schedule and stored raw. This copy is never edited; it's the source of truth for what the bank actually did.
  2. Directed by sign:
    • Money out (debits) → queued for coding (which expense/vendor/account).
    • Money in (credits) → queued for receipt review (which invoice/customer it pays, or what kind of deposit it is).
  3. Coded → becomes a reviewable draft journal entry.
  4. Reconciled → matched against your GL at month-end.

Every transaction shows its stage as a status chip on the Feeds page — Pending coding, Pending review, Coded, Manual, or Deferred to your previous system (named by Legacy ERP name in the tenant configuration). Coded means the Bookkeeper has coded it, wherever that happened. Deferred to … marks a transaction dated in a month your previous system still keeps the books for — before the month Arcvue's own books begin. It is coded there, so nothing here asks you to code it.

Credit-card accounts travel differently. A connected credit-card account rides the same feed pipe, but its charges are card transactions, not bank cash movements. Arcvue treats them as corporate-card charges from the moment they arrive — they're never coded as a cash outflow — and books them through the card / expense-report flow instead of the money-out coding path above. That's also why a card maps to a liability account, not a cash account (see Step 2). A payment you make to the card from a bank account still travels as normal bank money-out.

Why duplicates don't happen​

Feeds get re-pulled (to catch transactions the bank posts or amends late), so the same transaction can arrive more than once. Arcvue de-duplicates two ways — by the bank's own transaction ID, and by a fingerprint of the transaction's content — so a re-pull never double-books. Every sync reports its counts (new / skipped / fetched), and you can safely re-sync as often as you like.

How the two providers sync​

  • Mercury is a direct API connection. You can trigger an immediate pull with Sync now in Admin.
  • Plaid covers most other banks. It syncs on its own via a cron poller and webhook — so on a Plaid account the Sync now button is intentionally disabled (it fills in automatically; there's nothing to press).

An account has a state, and a connection has a switch​

Businesses change bank accounts. Two different things can happen to one, and they need different remedies, so Arcvue records them separately:

  • The account itself carries a state on the accounting Feeds page: Active (syncing normally; new transactions arrive and are offered for coding), Hibernating (the account still exists but has no activity — banks do this to unused accounts; syncing and reminders stop, nothing is deleted, and you switch it back the moment it wakes up), or Closed (the business closed it for good; syncing and reminders stop, and every transaction already recorded is kept and stays on your reports).
  • The connection to the bank — the Plaid link — has an on/off switch on the Admin page. A connection that keeps asking you to sign in again for an account the bank has made dormant is not broken; there is nothing behind the login to reconnect to. Switch off stops the sync and the reminders without deleting anything, and keeps the credentials so Switch back on is one click rather than a fresh sign-in.

Before these existed, every silent account resolved to the one remedy the system knew — re-link it — and a dormant account generated an impossible instruction twice a day, forever.

What Arcvue deliberately will not do​

  • It won't post anything straight from the feed. A feed transaction becomes a draft you review — the feed never writes to your ledger unattended.
  • It won't guess which GL account a feed belongs to. Until you map the account (cash for a bank account, the card liability for a credit card), its transactions can be ingested but not fully placed — so mapping is a required one-time step.

Part 2 — How to run it (setup and the routine)​

Step 1 (one-time, Admin) — Connect the bank account​

The panels on an account row are toggles, and the button becomes Cancel while its panel is open. So a row showing Cancel has something expanded below it; pressing it closes the panel and changes nothing.

For a card account the same button reads Set cardholder when none is recorded and Change when one is. Inside the panel, Save cardholder commits the name and reads Saving… while it writes.

Go to /admin/bank-feeds. The page header reads Bank Feeds — "Connect bank accounts and corporate cards…" Two buttons sit in the top-right:

  • Connect Mercury — click it to pull your Mercury accounts. No form to fill in; the API key is held server-side. A banner reads "Connecting Mercury…" and then "Mercury connected. N accounts synced."
  • Connect Bank (Plaid) — click it to open Plaid Link, Plaid's own hosted pop-up. Pick your institution, sign in through Plaid, and choose the accounts to link. On success a banner reads "Plaid connected: {bank} (N accounts)."

Each linked account appears as a row in the table below, with columns Account · Provider · Type · GL Mapping · Last Synced · Actions.

note

This page is admin-only (CEO, admin, or COO). If you land here without an admin role you'll see "Admin-only surface. Contact your administrator if you need access."

Step 2 (one-time per account, Admin) — Map it to a GL account​

Still on /admin/bank-feeds, find the account's row and click Map GL in the GL Mapping column. A picker drops open under the row. Arcvue offers the right list automatically based on the account type:

  • A bank account shows "Map to cash GL account" — pick the chart-of-accounts cash account it represents.
  • A credit-card account (type credit_line) shows "Map to liability account (credit card payable)" — pick your credit-card payable liability account (pending prior-system confirmation of the exact account you use).

Choose the account from the — pick an account — dropdown (each option shows account number — account name), then click Save mapping. A banner confirms "Mapped {account} → {number} {name}." Re-mapping later is safe — it's idempotent, so you can correct a mistake anytime by opening Map GL again.

Until an account is mapped, its transactions ingest but can't be fully placed for coding and reconciliation — so don't skip this.

Step 3 — Let it sync, and sync on demand (Admin)​

Feeds sync automatically on a schedule and re-check a recent window so late-posted items get caught. When you want the latest right now — say, just before a reconciliation — use the account's Sync now button in the Actions column on /admin/bank-feeds.

  • On a Mercury account, Sync now fires an immediate pull and reports "{account}: N new / N skipped / N fetched."
  • On a Plaid account, Sync now is grayed out on purpose (tooltip: "Sync via cron poller; Plaid uses webhook + sync endpoint") — it keeps itself current, so there's nothing to click.

Arcvue watches feed health for you. On the accounting Feeds page (Step 5), if any active account hasn't had a successful sync in well over a day — or has never synced — a warning banner appears at the top of the Bank Feeds tab reading "N bank feeds may be stale," with the note "No successful sync in over Xh… Re-connect or re-sync the account in Admin. If the bank has made the account dormant and there is nothing left to connect to, set it to Hibernating below and it will stop asking," and a list naming each silent account and how long it's been quiet. Hibernating and closed accounts are left out of the check on purpose. That way an expired authorization or provider outage gets noticed right away, not discovered at month-end when reconciliation comes up short. The same condition also surfaces as a tile on the Accounting Home page that deep-links straight to /accounting/feeds?tab=bank.

Step 3b (as needed, Admin) — Reconnect a connection, or switch one off​

When a bank starts refusing our credentials, /admin/bank-feeds shows an amber band — "N connection(s) need you to sign in again" — with the note that the bank is refusing our credentials, not failing; no transactions arrive from these accounts until the sign-in is renewed — retrying cannot fix it. Each connection in the band offers two buttons:

  • Reconnect — the right answer for a live account. It opens Plaid Link so you can sign in again.
  • Switch off — the right answer for an account the bank has made dormant, where there is nothing left to connect to. The connection stops syncing and stops asking; nothing is deleted, and the credentials are kept.

Switched-off connections move to a quiet band, "N connection(s) are switched off" — switched off deliberately, so nothing here needs your attention — each with a Switch back on button that returns it to active in one click, without a fresh sign-in.

Step 4 (as needed, Admin) — Import history from a file​

The upload control toggles the same way: Upload OFX opens the panel and Cancel OFX closes it again without importing anything.

Providers only reach back so far (Plaid, for example, typically covers ~18–24 months). To bring in older history — or an account you're not connecting live — use the per-account file import on /admin/bank-feeds: in the account's Actions column click Upload OFX, choose a .ofx / .qfx file exported from your bank's online portal, then click Import. It reports "{file}: N new / N dedup / N parsed." The upload rides the same pipe with the same de-duplication, so it won't collide with live-feed transactions.

On a credit-card account, expanding the row asks Whose expense report do this card's charges go on? — pick the one employee who carries that card. Clear appears beside the cardholder only once one is assigned, and it removes that assignment. Its absence means nobody is assigned yet, not that the control is missing. The rule beside it is the reason the field exists: one card, one person — every charge on it lands on that person's expense report.

OFX / QFX file: labels the file picker on the history import, which accepts .ofx and .qfx; the Import button beside it stays disabled until you have chosen a file.

Step 5 — Work the activity (Accounting)​

Day to day, live in Accounting → Cash → Feeds (/accounting/feeds), Bank Feeds tab. This is the read-only activity view. You'll see:

  • Account cards across the top — one per connected account, showing its provider, name, type, a Primary badge on your primary account, and "synced Xd ago." Click a card to load its transactions.
  • Recent transactions for the selected account — a table with Date, Counterparty / Description, Status, and Amount (money-out shown in red). The Status chip tells you the stage: Pending coding, Pending review, Coded, Manual, or Deferred to … (see Part 1).
  • A Code → link appears only on a row the coding queue holds: one still at Pending coding or Pending review with nothing raised from it yet. Click it to open the Bookkeeper with that transaction already selected. A coded, manual or deferred row has no Code →, because there is nothing for you to code. If someone works the item between your loading Feeds and clicking, the Bookkeeper says so in a banner rather than dropping you on someone else's item; Rebuild on the queue panel refreshes the queue.

Step 6 — Set an account's state (Accounting)​

Still on Accounting → Cash → Feeds, click an account card. An Account state strip appears beneath the cards, naming the account, with a three-way switch: Active · Hibernating · Closed. The consequence of each is written under the control before you click, and there is no confirmation dialog — every state here is reversible and nothing is deleted.

  • Choose Hibernating when the bank has put the account into dormancy (no activity, nothing behind the login). Syncing and reminders stop; the stale-feed banner and the Home tile stop asking about it. Set it back to Active the moment it wakes up.
  • Choose Closed when the business closed the account for good. Syncing and reminders stop; every transaction already recorded is kept and stays on your reports.

A toast confirms — "<account> is hibernating. Syncing and reminders have stopped." — and, if any of its transactions were still awaiting coding, says how many and that they are kept. Hibernating and closed accounts render dimmed with a state chip on the card so the change is visible at a glance.

Two shortcuts back to setup live on this page: the Manage button in the transactions header and the Admin button in the page's top-right both open /admin/bank-feeds. If no accounts are connected yet, the panel shows "No bank accounts connected yet" with an Open admin link.


Part 3 — When something looks wrong​

"A transaction on my bank statement isn't in Arcvue"​

The feed hasn't pulled it. On /accounting/feeds (Bank Feeds tab), check the account card's synced Xd ago. Then, in Admin, run Sync now (Mercury) — or, on a Plaid account, give the poller a moment since there's no manual trigger. If it still doesn't appear, the connection may have expired (banks periodically require re-authorization) — reconnect the account with Connect Bank (Plaid) / Connect Mercury. As an immediate fallback, Upload OFX the statement file to bring the item in now.

"The Bank Feeds tab shows a 'may be stale' banner"​

An active account hasn't synced in over the health threshold (or never has). It names each account and the hours since its last sync. If the account is live, go to /admin/bank-feeds and Sync now it (Mercury) or Reconnect it — a stale feed means missing bank data, which quietly throws off reconciliation and the close. If the bank has made the account dormant, or the business closed it, do not keep reconnecting: set its state to Hibernating or Closed on the Feeds page (Step 6) and it stops asking.

"Admin keeps saying a connection needs me to sign in again, and signing in does nothing"​

The account behind that connection is dormant at the bank — there is a login but no account to connect to, so re-authorizing cannot succeed. Press Switch off on that connection instead of Reconnect. It stops the sync and the reminders, keeps everything already recorded, and Switch back on is one click if the account ever wakes up.

"I re-synced and I'm worried about duplicates"​

You won't get any. Every sync and import reports N skipped / dedup — those are re-pulled transactions Arcvue already had and dropped. Re-syncing is safe by design; sync as often as you need.

"An account is connected but its transactions aren't being placed"​

It's probably not mapped to a GL account yet. On /admin/bank-feeds click Map GL on that row — cash for a bank account, the credit-card payable liability for a card — and Save mapping. Coding and reconciliation can then proceed.

"'Sync now' is grayed out on one of my accounts"​

That account is on Plaid, which syncs itself via the cron poller and webhook rather than a manual button (the tooltip says so). There's nothing to press — it stays current on its own. Only Mercury accounts expose a live Sync now.

"A deposit came in but nothing proposed a coding for it"​

Money-in (credits) goes to receipt review rather than the automatic expense coder — deposits need to be tied to the invoice/customer they pay or classified as another kind of receipt. Its Status chip reads Pending review; click Code → to work it from the Bookkeeper queue.

"I can't reach the connect/map/sync controls"​

Those live on the admin screen /admin/bank-feeds, which requires a CEO, admin, or COO role. The accounting Feeds page is view-only for everyone with the Accounting module; ask an administrator to connect or map an account.


One-line summary​

Set feeds up in Admin (/admin/bank-feeds) — Connect Mercury / Connect Bank (Plaid), Map GL each account (cash for banks, the card's liability for credit cards), Sync now or Upload OFX as needed, Reconnect or Switch off a connection the bank is refusing — then watch the de-duplicated activity day to day on Accounting → Cash → Feeds, where Code → opens that transaction in the Bookkeeper, the Account state strip marks an account Hibernating or Closed when the world changes, and a stale-feed banner warns you before a broken connection costs you at close.

  • Work the coding queue → Transaction Review / Bookkeeper
  • Reconcile a bank account → Bank Reconciliation (/accounting/reconciliation)
  • Seal the month → Close a Month (Period Close)