Browse all sections
Payments
/dashboard/paymentsPayments is the studio's ledger. Tuition, bookings, workshops, and competition fees all flow through one place, powered by Stripe. Staff track and reconcile the money; families pay and manage their own billing.


Tracking the money
The page is one filterable ledger. Search by family, then narrow by date range (this month, last month, the last 3 months, this year, or a custom range), type, status, and method. Sort any column from its heading menu, and click a row to open the payment's full detail — amount, status, dates, any note, and how it was collected in plain English, with the Stripe reference for online payments.
Charges still waiting to be paid also collect in an 'Awaiting payment' strip above the ledger — expand it to work through them. Every row shows its type as a color-coded chip so you can tell tuition from bookings, workshops, registrations, and competition fees at a glance, and the 'Export as CSV' button downloads exactly what you are looking at, with your filters and sort applied.
Prefer the analytics view? Flip the 'Analytics' switch to swap the ledger for a compact analytics row — your total for whatever you have filtered, counted before tax, with the net after Stripe fees beneath it, next to revenue by month and revenue by type — plus the monthly matrix: each family's tuition and one-time totals month by month, with totals per month and per family. Click a family's row to break its months down by payment type — one line per type, color-coded to match the ledger's chips, so you can see how much of a month was tuition and how much was workshops or bookings — and use Expand all in the corner to open every family at once. The charts collapse to a single line that keeps your totals in view, so the matrix can take the whole screen when the numbers are what you are after. Your search and filters carry over, so you can chart a single family, one payment type, or any date range. Historical months come from your previous tracker, and new months fill in automatically from Stripe and recorded payments.
Sort and filter from any column
Web dashboardEvery column heading in the ledger carries a small arrow menu: open it to sort that column in either direction, or set a filter on just that column. Text columns — Date, Family, Type, Status, Method — filter by contains, equals, starts with, ends with, or whether the cell is empty; the amount columns — Amount, Stripe fee, Net — compare numbers, like greater than 200 or less than 50. Filters on different columns stack, so 'card payments over $200 from one family' is a few quick filters, and the table and the CSV export both follow exactly what you have narrowed to.
A dot on a column's arrow shows it has a filter on, Clear filter inside the menu removes that column's, and a 'Clear column filters' button above the table sweeps them all away. The monthly matrix in the analytics view has the same menus on its own columns — sort or filter by family name, any month's amount, or the family total — and its month totals and grand total recalculate to match the families left in view.
How each payment was collected
Every payment carries a method badge showing how the money arrived: Stripe for payments collected online by card or autopay, Manual for payments you recorded by hand (cash, cheque, or e-transfer), and Imported for history brought over from your previous tracker. A charge that has not been collected yet shows 'Awaiting payment' — its method is set once it is paid. Payment history has a Method column and a matching filter, alongside the existing type, status, and date filters.
Stripe fees, tax, and your net
The ledger keeps your prices, collected tax, and processing costs apart. The Amount column holds what the family actually paid — a paid Stripe payment notes any GST/HST included, while a charge still awaiting payment shows its before-tax amount with a '+ tax at checkout, if applicable' note, since the exact tax is only known once the family pays. Beside it sit the Stripe fee and Net columns, both sortable: a payment's Net is what Stripe pays out on it, which includes any tax it collected. Opening a payment's detail breaks a taxed payment into Subtotal, Tax (GST/HST), and Total, alongside its Stripe fee and net.
The totals, on the other hand, keep collected tax out of your revenue: the totals line under the table adds up the gross (your before-tax amounts), the fees, and the net for exactly what you have filtered — and the net total sets aside collected tax along with Stripe's fee, since tax you collect is remitted, not earned, so it always shows what you actually keep and never reads higher than your gross. The analytics view works the same way: its headline Total is your before-tax revenue — the charts and the monthly matrix count the same amounts — with the net after Stripe fees beneath it, figured just like the ledger's net total.
The CSV export carries the full breakdown — Subtotal, Tax, Amount, Stripe Fee, and Net — so the file drops straight into your bookkeeping. Manual and imported payments have no processing fee, so their fee cell shows a dash and their net simply equals the amount, while an online payment whose fee Stripe has not reported yet shows a dash for both.
Note. Fees and tax are recorded when Stripe settles the payment, so a just-paid charge can show a dash for a moment before its fee, tax, and net fill in.
Recording, voiding, and refunding
Admins can record a payment that came in outside Stripe, and each row's remaining actions live in the ⋯ menu at the end of the row. On an outstanding charge, choose Mark paid to record it as collected outside Stripe, or Void to cancel it — voiding asks you to confirm, since the charge will no longer be owed or payable.
On a paid payment, the menu offers Refund when it was collected through Stripe — the money goes back to the family's card — or Mark as refunded when it was a manual or imported payment, which only updates your records: there is no charge to reverse, so you return the money yourself. Either way you confirm first, with the exact amount and family spelled out. Refunding a payment tied to a booking or registration also updates that booking's status, so the calendar and Workshops stay in step with your ledger.
Paid class drop-ins keep the class roster in step the same way: the charge appears here when a family claims a paid drop-in, Mark paid confirms their seat if the money arrived outside Stripe, Void releases a seat still awaiting payment, and refunding a paid drop-in takes the dancer back off that session's roster.
Workshop and camp registration charges follow their registration, so they work a little differently here: they cannot be edited, voided, or deleted from Payments — cancel the registration from Workshops instead — and Mark paid is unavailable while the family has an active online payment link, so a cash record can never collide with a card payment in progress. Refunds still happen right here.
Note. Recording, editing, voiding, refunding, and deleting payments are admin actions — instructors do not see the payments ledger.
Fixing or removing a manual payment
Payments you recorded by hand — and history imported from your previous tracker — can be corrected after the fact. Choose Edit in the row's ⋯ menu (or from the payment's detail view) to change its type, amount, paid-on date, or note; a receipt that already went out is not resent, so let the family know if the amount changed. Delete removes such a payment from your ledger, totals, and charts — it is kept for audit, and you confirm first.
Payments collected through Stripe cannot be edited or deleted — they mirror the actual charge. If one is wrong, refund it instead.
When tuition bills
By default each family on autopay bills on the anniversary of the day they signed up. If you would rather everyone bill on the same day, set a fixed tuition billing date in Settings (a day from the 1st to the 28th, so it lands in every month). New autopay sign-ups then anchor to that day; families already on autopay keep their existing date. The fixed date applies to monthly tuition only — plans that bill per quarter, 6 months, or year always charge from the day the family signed up, one full period at a time.
Tip. With a fixed billing date, a family that signs up part-way through the month is not charged immediately — the partial first period is free and the first full charge lands on your chosen day.
On the iPhone app
iPhone appPayments (under More) puts the ledger in your pocket: Unpaid and Paid-this-month totals up top, then every payment with its amount, type, status, and a method badge showing how it was collected — Stripe, Manual, Imported, or Awaiting payment for charges not collected yet. The All, Unpaid, and Paid tabs show how many payments sit in each, a row of type chips filters by tuition, booking, workshop, and so on (each with its count), and you can search by family or type — tapping the Unpaid total applies that filter for you.
Tap any payment to open its detail screen: the amount and badges up top with a plain-English line on how it was collected, then the full record — type, family (for staff), status, dates, any note, and the payment's Stripe reference when it was collected online, along with its Stripe fee, tax, customer-paid total, and net amount once Stripe has reported them. Families pay an open charge through Stripe right from the list or detail screen; when the studio collects GST/HST, the app opens hosted checkout so Stripe can calculate tax from the billing address. Staff manage a payment from its detail screen too: Mark paid or Void on an outstanding charge, Refund (Stripe payments — the money goes back to the card) or Mark as refunded (offline payments — records only) on a paid one, and Edit or Delete on a manual or imported payment, each confirming first with the exact amount. Staff can also still record a payment that came in outside Stripe from the list, and the Autopay card says plainly where autopay stands — Start autopay and Manage payment appear until it is running, and Manage autopay takes over once it is. However your family pays — a one-off charge, autopay, or a card update under Manage payment — the app keeps one saved payment record for you, so a card you save once is there the next time and you never have to type it in twice.