Payment activity, revenue, and batch invoicing
Most billing happens inside a single client's workspace. These four pages are the views that cut across all of them: what happened, how the business is doing, who did what and when, and what still needs to be billed.
Payment Activity
Open /admin/transactions to see every money event across all clients, newest first, straight from your billing ledger. Each job is one row showing its total billed and current status: Outstanding, Partly paid, Paid, Refunded, or Voided. Click a row to expand the full story of its invoices, with each issued, paid, refunded, voided, or adjusted event, the time it happened, the amount, and who did it. A job's deposit and balance roll up into the same row even though they are separate invoices.
To find something specific:
- Search by description, client name, or email.
- Filter by type: invoice issued, payment received, voided, refund, refund failed, or adjustment.
- Filter by client to see one relationship's billing end to end.
The "Who" column names the team member who acted, or the automated source when nobody clicked anything: Stripe, quote acceptance, contract signing, recurring billing, or the system.
This page shows Stripe invoice and payment events, meaning money you billed through the portal. Your bank account activity (charges, deposits, transfers) lives in Codex at /admin/codex/bank. See Connecting your bank.
Revenue Dashboard
/admin/revenue is the business health check. At the top, any draft invoices waiting on you are listed so you can finalize them and send pay links without hunting through clients.
Pick a time period (all time, this month, last month, last 3 or 6 months, or year to date) and the dashboard recalculates. Export CSV or Export JSON downloads the report for the selected period.
The headline numbers:
- Total Revenue: money collected in the period, net of refunds, with the paid invoice count. Every payment counts, including partial payments. When there are refunds in the period, a sub-line shows the collected and refunded split.
- This Month next to last month, with the percent change.
- Outstanding: what clients owe right now, and how many unpaid invoices that is.
- Service Fees Paid: platform fees deducted from your Stripe payouts.
Below the headline row:
- Revenue trend by month, with a forecast projection.
- Revenue Goals gauges showing progress toward your monthly, quarterly, and yearly targets.
- Invoice status and payment method breakdowns.
- Accounts Receivable, Aging: unpaid invoices grouped by how long they have been open (0 to 30, 31 to 60, 61 to 90, and 91+ days), with a per-client table. This section always shows the current picture no matter which time period is selected. Anything in the 91+ bucket is a serious collection risk.
- Top Customers by Revenue and Recent Invoices.
- Client Lifetime Value: all-time revenue per client plus a 12 month projection.
- Client Retention & Churn and Refund Analytics.
This dashboard tracks what you billed and collected. Costs, job margins, and the P&L live in Codex. See Job profit, P&L, and cash flow.
History Overview
/admin/history is the organization-wide timeline: contracts, invoices and payments, projects, work, notes, requests, approvals, documents, and client changes, all in one filterable view. It answers "what happened, when, and who did it" when a client calls about last month.
A stats band at the top counts activity by category for the chosen window, with an up or down comparison against the prior period. Click a tile to filter to that category. Quick views like Recent invoices, Recent contracts, and Client-initiated jump straight to common combinations.
You can narrow the timeline by:
- Client, date range (last 7, 30, or 90 days, or all time), and category
- Actor: admins, clients, or the system
- Keyword in the entry description
Export CSV downloads exactly the filtered view, handy for a billing question or your accountant. For the raw, unsummarized feed, use Activity at /admin/activity.
Batch invoicing
When several clients have billable work waiting, /admin/batch-invoice sends the invoices in one pass instead of one client at a time. The page lists every billing period that has value but no invoice yet, with the client, period, amount, line item count, and the date it was captured.
- Everything starts selected. Untick anything you are not ready to bill; running totals show how many are selected and for how much.
- The send button asks you to confirm, then creates a Stripe invoice and emails each selected client.
- Sent items drop off the list. Anything that fails stays selected with its error shown, so you can fix the problem and retry in place.
Deposits and balances that belong to a quote or contract are excluded on purpose. Those are invoiced through their own accept and finalize steps. Batch invoicing covers manual and recurring billing periods.
