Skip to content
Sign in
Admin

Class fees and billing settings

The settings behind what a class costs and how the money is collected. For what each family ends up paying, see How class pricing works.

Last reviewed

Open Billing
More on this topic

Setting fees and seat capacity

Capacity sets how many students can enroll before the class fills and starts a waitlist. Set it to a number that reflects the physical space and your teacher's comfort level.

When you first create a class, you'll see two fields side by side: Tuition and an optional Materials fee. Tuition is the cost of the class itself; the materials fee covers supplies, books, or kits and is billed separately so families can see what they're paying for.

Once the class exists, opening it to edit swaps in a more flexible fee editor: a single Tuition box, plus an Add fee control for attaching any number of additional named charges (a lab fee, a field trip cost, whatever your co-op needs), each with its own checkbox for whether the sibling discount applies to it. A fee name you create on one class is offered on every other class afterward, so you only type it once. Renaming it there renames it everywhere it's used.

Every fee on a class is added together on the family's receipt and ledger, but they can behave differently when a sibling discount is turned on: only fees marked as discount-eligible are reduced. A materials fee added from the create-class form starts out charged in full for every student, since it covers a physical cost the co-op still has to pay no matter how many siblings enroll. You can change that with its checkbox. See the How class pricing works guide for a worked example.

Tip: Leave either field blank or set it to zero to skip that charge. A class with no tuition and no materials fee is free. It still tracks enrollment and waitlists normally.
Note: Setting a fee requires the Plus plan. Free-class creation is available on all plans.

Payment collection: Stripe vs. flexible

For classes with a fee, you can choose how that fee is collected. The default applies to all classes, and individual classes can override it.

Stripe payment at enrollment (default)

Collecting online needs two things: the Plus plan and a connected Stripe account. With both, when a family clicks Enroll on a paid class, they go to Stripe Checkout and their student's seat is confirmed only after the card payment succeeds. This is the safest option for co-ops that want to guarantee payment before a seat is held.

Families signing up for more than one class use a cart. Alongside Enroll, a paid class offers Add another class first, and once anything is in the cart every class routes through it: the button becomes Add to cart, a bar appears at the bottom of the catalog with a running total, and the family checks out once for everything. Nothing is charged and no seat is held until they finish that checkout, so a cart left sitting there isn't an enrollment.

Flexible / bill the family's account

In flexible mode the student is enrolled immediately and a pending charge is added to the family's account. The co-op collects whenever and however works for them: cash at the door, check, bank transfer, or by directing the family to pay online from their Payments page. This is useful for co-ops that run a tab for the term and settle up at the end, or for families that don't have a card handy at enrollment time.

Tip: With the Plus plan and a connected Stripe account, families can pay their pending charges online. They'll see an outstanding balance on their dashboard and a Pay button on their Payments page that takes them through Stripe Checkout. Co-ops can also offer bank (ACH) payments at a fraction of the card fee, see the bank payments guide.
Note: The outstanding balance gate still applies in flexible mode. If a family already has unpaid charges, they won't be able to enroll in additional classes until the balance is cleared. This is true even for staff-exempt enrollments. A family keeping up with a payment plan is the exception: only a payment past its date blocks them, along with any event fee or balance from another term.

When a family has account credit

A scholarship or volunteer credit reduces what a family owes on their Payments page, but in Stripe mode it doesn't reach class checkout: the family is still sent to pay by card for the full amount. A family holding a scholarship that covers their whole cart ends up paying anyway, or writing to you to ask what to do.

Under Admin → Settings → Programs, in the Class enrollment section, you can tick Apply account credit at class checkout. With it on, a family who has credit skips the card form. Their fees post to their account at the normal price, with sibling discounts, reduced rates and staff exemptions unchanged, and the credit covers them. Enough credit and the students are enrolled immediately with nothing owed. Not enough, and the remainder sits on their Payments page to be paid like any other charge.

Families with no credit are unaffected and check out by card as usual. Nothing is deducted from the credit itself, so the ledger still shows the credit and the charges it covered. If you later remove that credit, the balance it was covering reopens.

Note: This is off for every co-op until an admin turns it on. Leave it off and class checkout behaves exactly as it did before, credit or no credit.

Setting the default for your co-op

1Go to Admin → Settings → Programs.
2Find the Class enrollment section.
3Choose your preferred default payment mode and save.

Overriding for a specific class

Open the class detail page, scroll to Enrollment settings, and select a payment mode. Choosing the co-op default means the class inherits whatever you've set globally, which keeps things consistent without repeated configuration.

Co-ops without a connected Stripe payout account always use flexible mode. There's no Stripe account to charge on, so the system bills the family's ledger and you collect directly. Families see Added to your balance and an Enroll and pay later button, the same as on a flexible class. On the Plus plan, a notice under the class fee fields says online payment isn't set up yet and links to Billing. Pay now on the Payments page doesn't fall back the same way: until Stripe is connected, it shows a message that online payments aren't set up.

homeschoolgo.app/dashboard/admin/settings?tab=programs
Admin › Settings › Programs. The default for how fees are collected, plus exemptions and the sibling discount, all live on this card.

Staff fee exemptions

Two types of members can enroll their students at no charge, with no workaround required.

Owner and admin exemption

When enabled (the default), owners and admins pay nothing to enroll their students in any class. No Stripe redirect, no pending charge: the seat is allocated at $0 and the roster shows a "Fee waived" badge next to the student's name so you have an audit trail.

Turn this on or off under Admin → Settings → Programs → Class enrollment. The toggle applies to all classes; individual classes can override it for their teacher exemption independently.

Teacher exemption

Teachers can be exempt two ways, and you can use either or both.

Every class, co-op-wide. Under Admin → Settings → Programs → Class enrollment, check Teachers enroll their students at no charge. That covers anyone holding the Teacher role, plus anyone assigned to teach a class in the term, since plenty of co-ops leave their parent-teachers on the Family role. Either way they enroll free in any class, whether or not they teach it. This is off by default.

Just the class they teach. On a class's own Enrollment settings, check Assigned teachers enroll their students at no charge. This only covers a teacher assigned to that specific class, and only for their own students. It's on by default for every class, so turn it off for one where you want everyone to pay (an expensive field trip, say), even a class the teacher themselves teaches.

By default an exempt enrollment waives every fee on the class, materials included. If you'd rather exempt members still pay one fee (waive tuition but keep charging for materials, for example), open that fee in the class's fee editor and uncheck Waived for exempt members. That choice belongs to the fee itself, so it applies everywhere the fee is used, the same as a fee's name and its sibling-discount setting.

Note: A teacher who is also an admin or owner benefits from the admin exemption too. All of these exemptions are independent, so a member can be covered by more than one at once.
Tip: The outstanding balance gate still applies to exempt members. A teacher with an unpaid balance needs to clear it before enrolling, even if the class itself is free for them, unless they're keeping up with a payment plan.

Sibling discount

Co-ops that want to make it cheaper for families with several students to enroll can turn on a sibling discount for class fees. It's off by default, so no co-op's pricing changes unless an admin opts in.

When it's on, the first student a family enrolls in a paid class each term pays full price. Every other student in that family then gets the discount on their discount-eligible fees, for any paid class they enroll in that term, not just the same class as their sibling. Which student counts as “first” is whoever the family happens to enroll first that term; there's nothing to configure beyond turning the discount on.

1Go to Admin → Settings → Programs and find the Class enrollment section.
2Check Sibling discount on class fees.
3Set the Discount percent (defaults to 50%) and save.
Note: Because the discount depends on who else in the family has already enrolled this term, a family enrolling more than one student at once sees an “up to” estimate at checkout rather than a guaranteed total. The exact price is confirmed once the enrollment goes through.

Tracking pending balances

Any class fee created by flexible-mode enrollment, waitlist promotion, or an admin add with Charge the class fee ticked shows up as a pending charge in the family's ledger. You can see all families with outstanding balances from Admin → Billing.

The Billing overview separates three states so a treasurer never has to guess which is which: owes money (a pending charge is unpaid), paid up (everything billed this term is settled), and not yet billed (the family has no charges this term at all). Filter the list by any of these, or search by either parent's name to find a household.

Note: A family who paid by bank transfer still shows under owes money until the payment settles, since the money hasn't landed yet. Their balance shows in blue as processing instead of red, so you can tell them apart from a family who hasn't paid at all.

Recording an offline payment

1Go to Admin → Billing and find the family.
2Open their ledger and locate the pending charge.
3Click Record payment and choose the method: cash, check, money order, or scholarship.
4Save. The charge is marked paid and the family's balance clears.
Note: If you save the same credit, charge, or payment twice within 10 minutes (same family, term, amount, and wording), the second one isn't added and a message tells you so. To record two checks for the same amount, give the second a different note, like its check number.
Note: If a payment or credit would put a family past what they're charged for the term, Billing shows what's covered against what's charged and asks before saving. Choose Go back or Record anyway (Apply anyway for a credit). Nothing is blocked or refunded for you.

Families paying online

Families with a pending balance see a notice on their dashboard. From their Payments page they can click Pay now to go through Stripe Checkout for the outstanding amount. Once paid, the charge is marked settled automatically.

Tip: Use the pending-charges filter in Admin → Billing to see everyone who owes money at a glance. It's the fastest way to follow up at the end of a term.