Payments

Reconciling camp payments to Stripe (and where DIY billing leaks money)

Why reconciling camp payments to Stripe turns manual when billing lives apart from registration — and what changes when payments read off one camper ledger.

Most camps don’t run billing in one place. They run it in three. Stripe takes the money, a form tool takes the registration, and a spreadsheet holds the part that ties the two together — who paid what, who still owes, which refund went where. Each tool does its own job well. The leak is in the space between them, where the three are supposed to agree and slowly stop.

Stripe is very good at one thing: moving money and recording that it moved. What it can’t tell you is which camper the money was for, which session, which fee. That knowledge lives in your registration tool. So reconciling camp payments to Stripe becomes a manual hunt — a Stripe payout on one screen, your roster on another, and you matching them line by line. This is a guide to where that hunt loses money, and what changes when payments and registrations read off the same camper record. It works on a stitched-together stack. It works better when the match is already made, and we’ll be plain about where.

Every payment matches a registration, or it doesn’t

The first reconciliation question is the simplest and the most thankless: does this payment belong to a registration I have? Stripe shows a charge with an amount, a date, and an email. Your roster shows campers and fees. Connecting the two is your job, and at a few hundred registrations across a few sessions, it’s an afternoon of squinting at two screens.

The payments that match cleanly aren’t the problem. The ones that don’t are. A charge under a parent’s email when the camper is registered under a different name. A second payment that could be a sibling or could be a double-charge. A registration with no payment against it that you can’t tell is unpaid or just unmatched. Every one of these is a small manual decision, and every wrong call is a balance that’s off.

When the payment is recorded against the camper and the fee at the moment it’s taken, that question never comes up. The charge isn’t a line on a Stripe export you have to claim — it’s already attached to the registration that owed it. The match isn’t reconstructed afterward; it was made when the money came in. Reconciliation stops being “which of these payments is which camper” and becomes reading a column that’s already filled.

Deposits and plan installments live on the camper, not a side sheet

A deposit and a payment plan multiply the matching problem. Now a single registration isn’t one charge to reconcile — it’s a deposit plus a string of installments, each a separate Stripe payment landing on a different date across the spring.

Track that on a spreadsheet and you’re maintaining a shadow ledger. Each installment is a row you flip from owed to paid when you spot the matching Stripe charge. Miss one and a family who paid on time shows a balance they don’t have, or a family who’s behind looks current. The plan a parent sees and the plan you bill from are two documents now, and the gap between them is exactly the money you can’t account for.

When the payment plan lives on the registration, each installment is part of the same record as the fee it’s paying down. A deposit is the first paid line, not a separate charge you match later. An installment flips to paid when its Stripe charge clears, against the camper it belongs to. The balance owed is a sum the record computes from payments it already knows about — not a column you keep in step with Stripe by hand.

Refunds and adjustments that tie back

Refunds are where DIY billing leaks most quietly, because a refund is a payment running backward and the backward direction is the one nobody reconciles.

A family cancels. You issue the refund in Stripe — that part’s easy. But the refund only changes Stripe. Your record of what that camper paid still shows the original amount unless you remember to go subtract it. Net paid is now wrong, the outstanding figure is wrong, and the error sits there silently until season-end, when it surfaces as a total that won’t tie out. Same story for a credit you grant or an adjustment you make: if it lives in a note and not on the balance, the balance is fiction.

The fix is for a refund to reduce the balance on the camper it came from, at the moment it’s issued, against the original transaction. When the refund is recorded on the record, the camper’s net paid drops by the refunded amount and the outstanding figure recomputes itself. There’s no second step to forget, because the refund isn’t a thing you do in Stripe and then mirror — it’s recorded against the payment it reverses, and the math follows. Refunds and adjustments tie back because there’s nowhere else for them to go.

Financial aid reduces the balance where it should

Reduced-fee enrollment is generosity that’s easy to lose track of in the books. An award is a reduction in what a family owes — but only if the reduction lands on the fee. Run aid as a separate scholarship document and you’ve created another seam: the family’s balance still reads full price because the award lives somewhere your billing can’t see it.

That gap is a double cost. The family gets a bill that doesn’t reflect the aid you granted, which is the conversation you least want to have. And your revenue total counts a fee you already agreed to reduce, so the number overstates what’s really coming in.

When the financial-aid award is applied on the camper record, it lowers what that registration owes directly. The family sees the reduced balance because the reduced balance is the real one. Your collected-versus-expected math nets the award out because the award is part of the same record the math reads from. Aid reconciles for the same reason payments do — it’s recorded where the balance is computed, not in a document the balance never consults.

Season-end is a reconciliation, not a reconstruction

Everything above converges on one number: net revenue for the season. It’s the figure your board asks for, the one that tells you whether the year worked. And it’s the figure that’s hardest to trust when billing is scattered.

Reconstructing it from a stitched stack means exporting Stripe, pulling your roster, matching payment to camper to fee, subtracting refunds you hope you caught, backing out aid and discounts from a separate sheet, and summing across every session. It’s a multi-day project, and you can’t fully trust the answer because every manual match was a chance to drop a line. A wrong refund here, an unmatched payment there, an award that never came off the fee — and the total is close but not true.

When payments, refunds, plan installments, discounts, and aid all live on the camper records the season total reads from, season-end stops being a rebuild. Net revenue is expected fees minus what’s been collected, refunded, and discounted — summed across sessions from records that already carry those facts. The reconciliation isn’t a task you start in September; it’s a state the records were kept in all along. The number is a read, not a reconstruction, which is the same property that makes season close-out a review rather than a rebuild.

One ledger, from charge to close

DIY billing isn’t broken because any one tool is bad. It’s leaky because the tools don’t share a fact. Stripe knows the money moved; your form tool knows the registration; your spreadsheet is where you sit in the middle trying to keep them agreeing. Every manual match — payment to camper, refund to balance, installment to plan, award to fee — is a seam where money slips through unnoticed.

Run it on one camper record and the seams close. Payments run through Stripe, and your connected Stripe account still holds the payouts and the bank details — that doesn’t change. What changes is the tie-back: each charge, refund, and installment is already attached to the camper and the fee it belongs to, so the Stripe activity and your record of who owes what are one set of facts, not two you reconcile by hand. Camp Runner is one system for that record — registration, payments, refunds, and aid on a single camper, priced at $1.50 per active camper per month for the whole thing.

You set the fees and run the season. Camp Runner carries the ledger, so reconciling camp payments to Stripe is a match that’s already made and a net-revenue number that’s already correct. It’s one piece of camp payments and billing kept in step with the roster. If your reconciliation is currently a Stripe export and a spreadsheet you dread, join the waitlist.

Common questions

Why is reconciling camp payments to Stripe so manual?
Stripe records that money moved; it doesn't know which camper or registration the money was for. When billing lives in a separate tool from registration, you reconcile by hand — matching each Stripe payment back to the family it belongs to, then back to the fee it was supposed to cover. The hunt is the leak. When payments and registrations share one camper record, the payment is already tied to the registration that owed it, so the match is read, not reconstructed.
Where does DIY camp billing actually leak money?
At the seams between tools. A payment that doesn't match any registration. A refund issued in Stripe that never ties back to the camper's balance. A plan installment paid in Stripe but still marked owed on your spreadsheet. A financial-aid award applied in one document but not reflected in the fee. Each gap is small and silent — the charge succeeds, but your record of what's owed drifts from what's true.
Does Camp Runner replace Stripe?
No. Payments run through Stripe, and your connected Stripe account holds the payout history and bank details. What Camp Runner adds is the tie-back: every payment, refund, and plan installment is attached to the camper and the fee it belongs to, so the Stripe activity and your record of who owes what stay the same set of facts instead of two you reconcile by hand.
How should refunds and adjustments be tracked so they reconcile?
A refund should reduce the balance on the camper it came from, automatically, the moment it's issued — not as a number you remember to subtract later. When a refund is recorded against the original transaction on the camper record, the camper's net paid drops and the outstanding figure updates itself. A refund that lives only in Stripe is a refund your books don't know about until someone reconciles by hand.
What makes the season-end revenue number trustworthy?
Whether it's a reconciliation or a reconstruction. If payments, refunds, discounts, and aid all live on the camper records the season total reads from, the net-revenue figure is already correct — expected fees minus what's collected, refunded, and discounted, summed across sessions. If those pieces live in separate tools, season-end is a rebuild: exporting Stripe, matching it to enrollment, and hoping nothing was missed.

Make next season reconciliation, not reconstruction.

Camp Runner keeps registration, payments, medical, staff, and season close-out in one system, so the numbers reconcile against each other. Join the waitlist to see it run before next season opens.