Overview
From Revenue > Bill runs you can:- Run a bill run on demand for a chosen period, with optional filters and a live preview before you commit.
- Group transactions one invoice per contact, or a single combined invoice, based on your organization’s billing preference.
- Schedule recurring bill runs (daily, weekly, or monthly) and trigger any saved schedule with Run now.
- Review every past run and the invoices it produced.
- Delete a run without deleting the invoices it created.
What counts as billable
A transaction is included in a bill run when all of the following are true:- It belongs to the organization running the bill run.
- Its date falls inside the period you select.
isInvoicedisfalse(it has not been swept into an invoice yet).- Its
paymentStatusis notvoid. - Its transaction type is one of the billable types: booking creation, membership creation, membership recurrence, or membership signup fee. Booking-cancellation transactions are excluded because they are settled, not owed.
One invoice per contact, or one for everyone
Your organization’s billing preference decides how the bill run groups transactions:separate(default): one invoice per contact, containing all of that contact’s transactions in the period.single: one combined invoice covering every billable transaction in the period, addressed to the first contact in the set.
separate is what you want. single is for B2B billing where a corporate account pays for many people in one document.
Every created invoice gets:
- A generated invoice number following your organization’s numbering template (see Invoices).
- An invoice date set to the moment the run executed, in your organization’s timezone.
- A due date 30 days after the invoice date.
- Line items pointing back to the original transactions.
- A status derived from those transactions (
paid,partially_paid,pending, oroverduebased on the due date).
isInvoiced = true so it won’t be picked up again.
Running a bill run manually
- Go to Revenue > Bill runs and click the Bill run action (or Add from the Invoices page).
- Give the run a Name. It defaults to
<Month Year> Bill Run. - Pick a Period start and Period end. Both default to the current month.
- Optionally narrow the set under Filters: transaction types, specific contacts, specific plans, and a minimum/maximum amount range.
- Click Preview to see exactly which transactions will be invoiced.
- Review the summary cards - transaction count, contact count, total amount, and the resulting invoice count - plus the per-transaction-type breakdown chips and the full transaction grid.
- Click Confirm to generate the invoices. You land on the bill run details page listing every invoice it created.
Per-field guide
Scheduled bill runs
To run on a recurring schedule, open the Automated bill runs area (reached from Settings > Billing) and create a schedule. Each schedule has:- A Schedule name and Description (both required).
- A Frequency - daily, weekly, or monthly - plus a Time of day, and a Day of week or Day of month where relevant. These compile to a cron expression shown in plain language in the list.
- Optional Filters identical to the manual form.
Deleting a bill run
Deleting a bill run from its details page clears thebillRunId on every invoice in it, then removes the bill run record. The invoices and their line items are kept. The original transactions stay marked isInvoiced = true. If you want those transactions to become billable again, delete the invoices too (which reverts them).
Automated membership renewals and dunning
Recurring membership dues are not collected by bill runs. They are collected by a separate hourly engine that renews auto-renewing memberships and charges the member’s stored card. Understanding this is the difference between “my members get charged automatically” (renewal engine) and “I generated invoices for the month” (bill run).How renewal charging works
Every hour, the renewal engine looks at each active, auto-renewing membership whose renewal is due within its advance window (renewalDaysInAdvance, 3 days by default) and:
- Reconciles the membership’s renewal date forward past any period already paid out of band (a manual payment, a sync-paid signup, or a Stripe webhook), so it never re-bills a covered period.
- Ensures the upcoming period’s recurrence transaction exists, seeding it if missing.
- Charges the owed transaction against the contact’s default Stripe payment method once it enters the advance window, then advances the renewal date to the period end on success.
pending transaction whose date has passed as overdue.
Failed-charge handling (dunning)
When a renewal charge fails - a declined card, no card on file, or a transient Stripe error - the engine:- Records a
failedpayment row as a per-attempt audit trail (or flips the existing attempt’s row tofailed). - Flips the transaction’s own
paymentStatustofailed. This surfaces it in admin lists, feeds the automatic Past Due member tag, and excludes the row from the next hourly tick, so a failure is attempted once per renewal rather than retried every hour. - Emits a payment-failed event, which notifies the member and is available as an automation trigger for your own follow-up sequences.
- A failed renewal charge never deactivates the membership. The member stays active and the billing chain still advances so the next period seeds normally. Cancelling a delinquent member is a staff decision, not an automatic one.
- Recovery is automatic. A later successful payment flips the transaction from
failedback topaid(orpartially_paid), so the failed state is never sticky once the obligation is met.
Worked examples
Yoga studio - monthly membership sweep. Members on monthly plans auto-renew and are charged by the renewal engine as each renewal date arrives. Separately, you schedule a monthly bill run on the 1st so every member has a dated invoice document for their records. The bill run does not double-charge - it only wraps the already-billed transactions into invoices. Boxing gym - corporate team billing. A company sponsors ten fighters. Set the organization billing preference tosingle and filter a bill run to those ten contacts, producing one combined invoice you send to the company. Everyone else continues to invoice separate.
Climbing gym - catch-up run. You realize last week’s scheduled run was misconfigured and skipped a plan. Run a one-off manual bill run for that period, filtered to the affected plan, preview to confirm the count, then confirm. Already-invoiced transactions are skipped automatically.
Pilates studio - failed card recovery. A member’s card expires and their monthly renewal fails. The engine tags them Past Due, records the failed attempt, and fires a payment-failed event that your automation turns into a “please update your card” email. When they add a new card and it charges, the transaction flips back to paid and the tag clears on the next tagging pass. The membership was never interrupted.
Tips & best practices
- Treat bill runs as invoice generation and the renewal engine as collection. If members need to be charged automatically, the lever is membership auto-renew plus Stripe Connect, not the bill run’s auto-charge toggle.
- Always Preview before Confirm. Once you confirm, invoices are written and the transactions are marked invoiced.
- Filter scheduled runs so they sweep only what you intend - an unfiltered monthly run picks up every billable transaction type in the period.
- Turn the payment-failed event into an automation so members with a declined renewal are chased without manual work.
- If you miss a scheduled period, run a one-off manual catch-up run - there is no automatic backfill.