Transactions

Every bank and credit card transaction lands here after syncing from connected accounts. Confirm each one is categorized correctly, match payments to invoices or bills, and resolve anything AI could not decide. Categorizing creates a balanced journal entry behind the scenes — a clean list means clean financial statements.

Key capabilities

  • Automatic sync from connected accounts, with periodic fallback
  • Layered auto-categorization: bank rules, your history, cross-business patterns, then AI
  • One-click AI Categorize for the whole uncategorized backlog
  • Category suggestions on demand, with a deeper AI pass for unresolved rows
  • Link as Payment to settle invoices and bills from the transaction drawer
  • Split one payment across multiple bills with allocation tracking
  • Bulk recategorize, re-counterparty, mark reviewed, and mark reconciled
  • Recurring detection for subscriptions and repeating charges
  • CSV/Excel import (file, paste, or column mapping) plus manual creation — with an optional category column that maps straight to your chart of accounts
  • Category Consistency tab: a counterparty × category pivot for spotting and bulk-fixing inconsistent categorization
  • Attach receipts and documents; cleaned merchant names from the counterparty registry
  • Rich filters: account, category, tag, date, amount, uncategorized, missing counterparty

How it works

Transactions flow in from Plaid. DayZero assigns a counterparty and suggested category. High-confidence rows post a journal entry automatically; the rest wait in the uncategorized queue.

flowchart LR
  bank["Bank / card"] --> sync["DayZero sync"]
  sync --> clean["Clean counterparty"]
  clean --> engine["Categorization"]
  engine --> confident{"High confidence?"}
  confident -->|"Yes"| done["Categorized"]
  confident -->|"No"| review["Uncategorized queue"]
  review --> done

How to use it

  1. Transactions appear automatically from connected accounts.
  2. Click a transaction to assign a category, add a memo, attach a receipt, or apply tags.
  3. Use Link as Payment to match an invoice or bill, or split one payment across several bills.
  4. Click AI Categorize to run categorization over every uncategorized transaction.
  5. Filter to only uncategorized or missing-counterparty to work the backlog.
  6. Select multiple rows to bulk-update category, counterparty, or review status.
  7. Open Recurring Detection to review subscriptions and repeating charges.
  8. Open the Category Consistency tab to audit how each counterparty is categorized across history and fix outliers in bulk.

Pro tips

  • Uncategorized transactions do not appear on your P&L or Balance Sheet — clear them before close.
  • Recategorizing all transactions for a counterparty creates a bank rule for future matches.
  • Positive amounts are money in; negative are money out.
  • Bank-synced rows can be hidden and restored; manual and imported rows delete permanently.
  • Paste text straight from a bank export — DayZero converts it into an importable file.
  • Migrating pre-categorized history? Map a category column at import — rows post directly to those ledgers instead of needing a recategorization pass afterwards.

In-depth guide

Sources and status

Source Deletion
Bank sync Hidden (reversible); can be permanently removed
Manual Permanent delete
Imported (CSV/Excel) Permanent delete
Imported transfer (Xero/QuickBooks) Remove at the source

Each transaction tracks three states independently: posted (appears in reports), reviewed (you verified it), and reconciled (matched to a bank statement).

How categorization is recorded

Method Source
Bank rule A rule matched
Your own history Prior pattern on your books
Cross-business pattern Pattern from other businesses
AI AI categorization
Similar transaction Matched a past transaction
Internal transfer Transfer between your accounts
Manual You set it
Uncategorized Not yet categorized

AI Categorize runs in the background and auto-applies when confident; high-confidence decisions also teach new bank rules. Categorizing posts a balanced journal entry: bank account on one side, category ledger on the other.

Importing transactions

Import via file upload, paste, or column mapping — Preview validates and checks duplicates before creating rows.

Required columns are date, amount, and description. You can also map an optional category column — DayZero recognizes common header names such as Category, Ledger, Account, and Account Name:

  • Category names resolve to your chart of accounts by case-insensitive name match, and matched rows post their journal entry directly to that ledger.
  • Unknown category names are flagged as warnings in Preview and those rows fall back to normal categorization — fix the names or create the ledgers first for a clean one-pass import.
  • Import raw — skip categorization skips the post-upload bank rules and AI pass. Journal entries still post during import: to the mapped category when one is provided, otherwise to Uncategorized Expense/Income. (Local accounting engine only.)
  • Transfer detection runs on import (unless you import raw): equal-and-opposite rows landing in two of your account ledgers within a few days are paired and booked as Transfers Between Accounts before rules or AI run, so a transfer leg is never mis-coded as income or expense. Rows with an explicit category-column value are never overridden.

For historical migrations with categories already assigned (e.g. exports from another accounting system), mapping the category column is the fastest path — it replaces the old import-then-bulk-recategorize workflow.

Category Consistency tab

The Category Consistency tab pivots your history by counterparty × category so you can see, for each merchant, every category its transactions landed in. Inter-account transfers are bucketed separately (detected from the transfer categorization method, connected-account ledgers, and the built-in transfers ledger) so they don't read as miscategorized spend. Select the outlier rows and bulk-recategorize or re-counterparty them in place — the fastest way to break up an overloaded catch-all category or clean up inconsistent vendor coding after a migration.

For ambiguous recurring descriptions (e.g. "Revenue Roll Payment"), use the Description contains… filter: the pivot narrows to matching transactions, a banner shows the match count, and Select all matching stages every occurrence for one bulk category or counterparty fix — resolve the mystery once, apply it everywhere.