Finance: risk, repeating money and the rest of the Finance menu
| Module | What it does |
|---|---|
| Risk Analysis | Per-project risk register. Probability × impact matrix. Feature-gated: risk. |
| Repeating money | One page for everything that happens on a schedule: invoices you send by themselves, recurring expenses, and supplier subscriptions. Replaces the three separate screens. Feature-gated per tab: financial, subscriptions. Its Create, Edit and Delete permissions are enforced by the database on the recurring-expenses and supplier-subscription lists, and a role that hides this page hides all three tabs: a per-tab permission is not available, so where a role used to see one of the old screens and not another, the stricter of the two answers applies. |
| Accounting | Org-wide ledger for income and expense, plus a P&L tab (6-month category × month matrix with CSV export). The entries list loads in pages (Load more) with Type/Category filters and search applied server-side, so it stays fast on large ledgers; the stat cards and P&L are computed on the server. Search matches category & notes (not linked project/company names). Payroll runs auto-post Salary entries on Processed/Paid. Feature-gated: financial. |
Payroll → Accounting is automatic: marking a payroll run Processed or Paid creates a Salaries ledger entry via a DB trigger. It is idempotent. Re-processing does not double-post. Since v1.284.0 each step is a named button with a review box that shows the people and the totals before you confirm: Review & process, Review & mark paid, Cancel run. A Paid run is not deleted and not cancelled - it is Reversed: a reversing entry is posted into the general ledger (every line of the original, mirrored, nothing erased), the run is marked Reversed, and every workspace owner is told. Only a draft run can be deleted.
Invoicing (Finance ▸ Invoicing) creates branded invoices and receipts. An invoice becomes overdue by itself once its due date has passed and it is still unpaid (a draft never counts, because it was never sent); overdue is not a status you choose, and the sidebar badge, the morning brief and the Invoicing page all count it the same way. Demo data dates its invoices too, so a demo workspace shows some overdue invoices the same way. Open any invoice to add line items (pull from your Products or type free lines), a discount (fixed amount or %), tax, a due date, PO number, bill-to / ship-to addresses, payment instructions and terms. Subtotal, discount, tax and total are computed on the server (the client can never tamper with the figures) and each invoice posts to the Accounting ledger automatically. Switch on **Auto-reminders** (the Invoicing header, owner/admin) to have overdue invoices automatically email the client a branded payment reminder on a cadence (by default 3, 7 and 14 days past due); reminders carry the invoice’s own company branding, are de-duplicated per invoice and stage, and respect your email sending caps. The platform administrator arms dunning globally in Platform ▸ Email. Owners/admins can see each invoice’s reminder history (which stages were sent, when, and to whom) on the invoice itself. If you run more than one business entity, tag the invoice with the issuing Company (it defaults from the linked project’s company): the Invoicing, Bills and Expense Claims lists can then be filtered and grouped by Company, and the General Ledger reports (P&L, Trial Balance, Balance Sheet, Cash Flow and Budget vs Actual) can be filtered by Company, each journal-entry line carries a Company (auto-inherited from the invoice, bill or expense claim it posts from; set manually on a manual entry), and the Tasks list shows a Company column, for multi-entity accounting. The tagged Company also becomes the invoice’s sender: its name, logo, address and tax ID appear on the printed invoice, the receipt, and the public link your client opens (falling back to your org branding when the company hasn’t set one). Beyond accounting, tasks, time entries and leave records also carry a Company (set automatically from the linked project or employee), so the company dimension spans the whole workspace. Each Company’s detail page shows its own P&L snapshot (invoiced, collected, outstanding, net) plus its recent invoices, expense claims and open tasks, and the **Entities** overview (Work ▸ Entities) consolidates every company’s revenue, expenses and net into one board with drill-down. Recurring billing schedules can also be assigned a company, so each auto-generated invoice or bill is issued under that entity and carries its branding. Multi-entity is a first-class capability in Plan & Features (packageable per plan), and the public /multi-entity page is white-label-safe: a reseller’s own custom domain never shows it. A Company scope bar appears on every company-aware page (accounting lists and registers, products and inventory, CRM records, payroll, attendance, risks and the General Ledger reports): pick a company there to scope that page’s lists, KPIs and reports to one entity at a time, a clear banner shows while the scope is active, and new records you create while scoped are tagged to that company automatically. The Ledger’s Reports tab also includes AR and AP aging: outstanding receivables by client and payables by vendor in Current, 1-30, 31-60, 61-90 and 90+ day buckets, filterable by Company. Bank accounts (Finance ▸ Bank accounts) opens on an **Overview**: your cash in the bank next to what your books say, money in, money out and net cash flow over the last 30 days compared with the 30 before, how many bank lines are waiting for review, a six-month cash-flow chart, your biggest payees and a card for every account showing its bank balance beside its books balance (live banks report their own balance each time they are checked; a Square location shows what it holds until its next payout). When a bank payment is posted to an expense it files itself: the payee is added to Vendors, a recurring charge such as software, hosting or phone becomes a subscription with its cost and next renewal (each payment listed under its reconciliations), and a registrar’s charge that matches a domain’s renewal renews that domain; change the payment’s category and the filing follows, while salaries, owner pay and bank fees are never filed. **Transactions** lists every bank line across all accounts with filters for status, account, direction and period, and **Connections** is where live banks are added and managed. Bank accounts work with any bank in the world: press **Connect a bank** and type your bank’s name in Find your bank. Wise, Stripe, Square, Mercury and PayPal connect live; any other bank (Chase, HSBC, Barclays, Meezan, Emirates NBD, or one that is not on the list at all, by typing its name) is set up under its own name and goes straight to its statement. Where your platform has switched on live bank sign-in, any bank in the US or Canada (Chase, Bank of America, Wells Fargo, Capital One, RBC, TD and about 12,000 more) connects live instead: press **Sign in to your bank**, sign in to your own bank in the secure window that opens (WorkBOS never sees your password and gets read-only access), tick the accounts and cards to bring in, and up to two years of history arrives, then new transactions every hour. If your bank later asks you to sign in again, the connection says so and **Reconnect** opens the same window. A workspace can hold up to ten bank sign-ins, and one you disconnect is closed at the bank’s side too. A statement can be the CSV, OFX or QFX file your online banking lets you download: OFX and QFX need no column matching at all, and for a CSV you map the date, description and amount columns (single signed amount or separate debit and credit columns), preview the parsed rows, and import; duplicate lines are detected automatically so re-importing the same file is safe. The Reconcile panel then works through each statement line: match it to a suggested ledger entry of the same amount, pay an open bill or settle an open invoice of exactly that amount (the payment is recorded from that bank account and matched in the same step), post it straight to the books against a chosen income or expense account, or exclude it, and the bank side of every posted line is marked reconciled for you. Categorisation rules make this nearly automatic: define a rule such as any description containing a vendor name goes to a chosen expense account, and every import pre-fills the matching lines with that suggestion so you can review them and post all suggested lines in one click; the rules only ever suggest, so nothing reaches your books without a person confirming it. A summary strip at the top of the Reconcile panel shows the ledger balance, the cleared balance and the size of the unmatched queue; type in the closing balance printed on your bank statement and the panel tells you when the cleared balance matches it exactly, which is the moment the period can be trusted. Wise, Stripe, Square, Mercury and PayPal accounts can skip the CSV altogether: an owner or admin clicks **Connect a bank** at the top of Bank accounts (or Bank and payment accounts in Connected apps), picks the provider, pastes a read-only key (it goes straight into the encrypted Secrets vault and is never shown again; a Stripe key must be a restricted key with Balance set to Read), names the connection if they like, ticks the accounts and currencies to bring in and picks the Company each belongs to. Connect as many as you have - two Wise accounts or three Stripe accounts are separate connections, each with its own key, and **Replace key** rotates one without touching what it brought in. The history arrives at once (PayPal keeps three years; a long history finishes over the next few hours), and new transactions arrive by themselves every hour; every provider’s fee - Wise, Stripe, Square, PayPal - is split out as its own line so it always lands in Bank Fees. Each Square sale arrives on the day it was taken at its full amount, with Square’s fee as its own line, so the sale, the fee and the payout to your bank all add up. Open any line on the **Transactions** tab, or press **Details** on a line in the Reconcile panel, to see everything the bank or provider said about it: the gross amount, the fees and what was left, any tip, tax, discount, shipping or currency exchange, who paid or was paid (name, company, email, phone, address, card or account), what was bought with quantities and prices, how and where it was taken (online, in person, which device or location, the risk check), the notes and references (invoice, order, check or tracking number, attachments, the wording on the customer’s statement) and, where the provider gives one, a link to the receipt. How much there is depends on the provider: Square, Stripe and PayPal know the customer and what they bought; Wise, Mercury and banks you sign in to know who sent or received the money, the reference and the category, but not what was bought. Anything a provider sends that has no row of its own is still shown, under Everything else. Lines imported before this arrived fill in their details on the next hourly check. Each feed shows when it last checked, how many transactions it brought in and how many are waiting, with Check now, Pause and Disconnect (disconnecting keeps everything already imported). The feed works as the person who connected it, so if they lose access to the books it stops and says why. WorkBOS learns from every answer: when you put a payee in an account it remembers, suggests the same account next time, and can carry your remark forward too (tick **Use this remark next time for this payee**). A line already in the books can be moved with **Change category**, which reverses the old entry and teaches the memory in the same step. **How well it is learning** shows how often its suggestions were accepted, how often an automatic posting was later corrected, payee by payee, and holds the switch that lets proven answers post by themselves once you have confirmed them on a set number of separate days (three by default); one correction resets that payee. Customer statements close the loop with your clients: open any client (CRM ▸ Clients), and the edit dialog has a Statement button that opens a printable account statement for a chosen period, with the opening balance, every invoice and payment in the period with a running balance, the open invoices with what is still owed, and the closing balance due. Copy public link creates a secure tokenized link (the same mechanism as hosted invoices) you can send to the client so they always see a live, up-to-date view of their account, with the same lines you see on your screen (invoices, payments, credit notes and refunds with a running balance, then what is still open and how old it is), though never your internal notes or links into your workspace; Revoke links withdraws every link for that client at any time. **Email statement** sends the same statement straight to the client in your company look, to the address on their record or one you type for this send; it carries a new link and leaves the links you shared before working, and its words can be changed in Settings ▸ Client emails. Estimates (Finance ▸ Estimates) are quotes that live one click away from an invoice: build one with the same line items, discount and tax mechanics as an invoice (totals are computed on the server, so figures cannot be tampered with), give it a validity date, and send the client a secure public link where they can view, print, and accept or decline online; an acceptance records who accepted and when, a decline can carry a reason, and a quote past its validity date closes itself. Convert to invoice then creates a draft invoice with the lines copied and the company inherited, ready to send, and the estimate keeps a link to the invoice it became. Finance Home (Finance ▸ Finance Home) ties the whole money workspace together on one screen, computed live from your books: cash on hand with a 90-day trend and a per-bank-account strip, receivables and payables headlines with aging, net income for the month straight from the ledger, open quotes with your win rate, and four worklists that need action today: overdue invoices to collect (with a one-click branded reminder), bills coming due, imported bank lines waiting for review, and approvals and drafts. A month-close checklist tracks the previous period (reconciliation, payroll, drafts, period lock), and an app launcher opens every finance module with live counts on each tile. Credit notes now actually reduce what a client owes. Raising one has always posted to your ledger correctly; what it did not do was change the invoice, so a 2,000 invoice with a 500 credit against it still showed 2,000 outstanding, still aged as 2,000, and was still chased for 2,000 by the overdue reminder. Open a credit note and choose Apply to invoices: the outstanding invoices are listed, you tick the ones the credit should reduce, and the amounts are checked against both what each invoice still owes and what the credit note has left. The Unapplied column shows at a glance how much of each credit is still available, and an application can be undone from the same dialog, which puts the invoice balance straight back. Applying a credit does not post to the ledger a second time, because raising the credit note already did that, so no cash appears that never arrived and nothing is counted twice. Payment receipts (Finance ▸ Payment receipts) handle the thing that actually arrives: one transfer, cheque or card payment that settles several invoices at once. Receive payment lists everything still outstanding, you tick the invoices the money covers, adjust any amount that is a part payment, and record it once. The receipt is numbered, carries the method and the client’s own reference, and shows exactly what each invoice had left afterwards, so the question "what did my April transfer pay for?" has an answer. Every amount is re-checked on the server before anything is written: an invoice from another workspace, an amount larger than the invoice still owes, the same invoice ticked twice, or a void invoice are all refused, and the receipt total is the sum of what was really applied rather than a figure the browser sent. Invoice balances and the general ledger update from the same payment records they always did, so nothing about your books changes shape. If the client sent more than the invoices they ticked come to, type the real figure into **Amount received**: the difference becomes a credit note on that client’s account, named on the receipt itself, and you can spend it against their next invoice from the Credit notes page. Leave the field blank and the receipt is worth exactly what was ticked, which is what it always was. An overpayment is treated in the books as money you are holding rather than a discount you gave, so your income is not reduced by it; it clears against the invoice when the credit is finally applied. Deleting a receipt removes the payments it made, and the invoices go back to unpaid. Vendors (Finance ▸ Vendors) is the supplier master behind everything you pay. Each vendor record carries the contact details, your account number with them, payment terms, currency, tax ID, a 1099 flag and a default expense account, and the list shows what you owe them right now, how much of that is overdue, what you have spent with them so far in your financial year (the month it starts is set on the ledger page, and since v1.386.0 this figure follows it) and when their last bill arrived, all computed on the server in a single query so the page stays fast as the list grows. Bills link to a vendor rather than repeating a typed name, so picking a vendor on a bill fills in the name, the email and a due date derived from their terms. Existing bills were matched to vendors automatically when the feature arrived, folding differences of case and spacing into one record; where two records are genuinely the same supplier under different names, an owner or admin can Merge them, which moves every bill across and removes the duplicate. Everything honors your role, your plan, and the active company scope.
- Five print-ready templates: Classic, Modern, Minimal, Bold and Professional. Pick one per invoice, or set a workspace default in Appearance ▸ Brand ▸ Invoice & receipt defaults.
- Fully white-label: your logo, brand name and colours from Appearance ▸ Brand, and your business address and tax ID from Settings ▸ Workspace, are printed on the document header, so every tenant gets its own look automatically.
- Print / PDF: the “Print / PDF” button opens a clean, chromeless document; use your browser’s Print → Save as PDF to download or email it.
- Receipts: once a payment is recorded, the “Receipt” button renders a payment receipt (same templates) with the payments ledger and a PAID stamp when fully settled.
- Deleting a payment: payments are recorded only through Payment receipts, credit notes or a card payment Stripe confirms, so the books always add up. On an invoice, a payment Stripe recorded shows a lock (the card charge really happened, so it cannot be removed here), and a payment that belongs to a receipt shows a lock too (delete it from Payment receipts, which puts every invoice it paid back to unpaid). Removing an applied credit note reopens the credit on the client’s account.
- Get paid online (Stripe): connect your own Stripe account under Invoicing ▸ Payments (secret key + a webhook for checkout.session.completed), then a “Pay now” button appears on the hosted invoice. Funds go straight to your Stripe; the amount is computed server-side and the payment is recorded on your invoice only after Stripe’s signed webhook confirms it (never from the browser). Your keys are stored server-side and never shown again.
- Send to client: the “Send” button emails a branded invoice (or receipt) to the client with a secure link to a hosted page; delivery starts once your email provider key is connected. “Copy link” creates the same public link to share manually.
- Hosted page & server PDF: the secure link opens a public, branded, mobile-friendly page (no login) where the client can view and one-click Download a real PDF (generated server-side). Links are unguessable, rate-limited, published-only, and revocable.
- Recurring: for invoices that repeat, use Finance ▸ Recurring billing to auto-generate invoices on a cadence (they post to the ledger like any other).
- Void, not delete (v1.284.0): a draft can be deleted; anything that has been sent is voided from a Void button on the invoice, which keeps the number, the lines and the payment history, stops the invoice counting towards what the client owes and stops its reminders. A voided invoice cannot be reopened. If the invoice has taken money, the product asks you to raise a credit note for it first (a Raise credit note button on the same invoice prefills the client, the invoice and the outstanding balance; applying it stays on Finance ▸ Credit notes) and records that you confirmed you did.
- What is fixed once an invoice is sent: its number, currency, tax, discount and totals. The form shows those as values rather than boxes, with one line above it saying why. Dates, notes and terms stay editable until the invoice is paid or void. Once it has taken money, the line items are fixed too - raise a credit note to change what the client owes.
- Payments are counted exactly: an invoice entered with just a total and no line items keeps that total when a payment is recorded against it (an issued invoice keeps the figures the customer was sent; only the amount paid and the status move). If two payments land on one invoice at the same moment, both are counted, and two receipts landing together can no longer pay an invoice past its total.
- A receipt is recorded once: pressing Record payment twice, or losing the connection mid-save and trying again, saves one receipt, not two. If you retry after a save that did go through but with different details, WorkBOS refuses and says “This payment was already recorded with different details. Reload to see it.” Reload the page to see the receipt that was saved.
- Recording a payment on the invoice goes through the same cap as Finance ▸ Receipts and the Stripe webhook: the amount applied never exceeds what is outstanding, and anything above it becomes a credit on the client’s account rather than a negative balance. Send checks for an issue date, a due date, at least one line and a client email before the invoice goes out, and marks each missing one - an invoice with no due date can never be overdue, so its reminders would never fire.
- Estimates can be emailed (v1.284.0): Send by email on a quote sends the client a branded message with the secure link where they can read, print, and accept or decline; Copy link still gives you the same link to share yourself. A void quote cannot be sent.
- Bills go to Trash (v1.284.0): a draft bill you delete goes to Trash with its lines and payment rows and can be restored for 30 days, the same as an invoice. A bill that has been paid or has posted to the accounts cannot be deleted - set its status to void instead, and the page says so on the button.