Pool Runs Docs
BillingInvoices

Recurring & Auto Invoicing

How to set up monthly billing for residential customers, configure autopay enrollment, and use auto-invoicing runs to bill on a schedule in Pool Runs.

Recurring & Auto Invoicing

For most pool service businesses, the bulk of revenue is recurring monthly residential billing — a flat $150–$250/mo for weekly service. Pool Runs supports this as a first-class workflow with three connected features: Monthly Billing (the office-side bulk-generate UI), Autopay (customer-side stored card that auto-charges due invoices), and auto-invoicing runs (an audit log of every batch). This page walks through the recurring billing setup top-to-bottom.

Monthly billing screen with property list grouped by customer for the selected month

The Three Pieces

PieceWhat it doesWho sees it
Monthly BillingGenerates one invoice per monthly-rate property for a calendar monthOffice staff
Autopay EnrollmentCustomer's stored payment method auto-charges due invoicesCustomer (enrolls) + office (sees status)
Auto-Invoicing RunAudit record of each batchOffice staff (audit only)

Together they form a hands-off workflow: on the 1st of the month, the office runs Monthly Billing → invoices are sent → autopay-enrolled customers are auto-charged on the due date → A/R closes itself for autopay accounts.

Setting Up Monthly Recurring Billing

Prerequisite: Set the property's rate type

For Monthly Billing to include a property, its rate type must be Per Month or Per Month + Chemicals. Configure this on the property profile under Service Pricing.

Rate TypeBehavior
Per MonthFlat monthly rate. Visits and chemicals are informational with no extra charge.
Per Month + ChemicalsFlat monthly rate plus chemicals charged separately.
Per StopCharged per visit. Use the Invoice Generator instead.
Per Stop + ChemicalsPer-stop service plus chemicals. Use the Invoice Generator.

Once the property uses a monthly rate, it appears in Monthly Billing every month going forward.

Quick Steps (Monthly Billing)

  1. Billing → Monthly Billing
  2. Pick the Year and Month you're billing for.
  3. The page loads all monthly-rate properties grouped by customer:
    • Visits this month (count)
    • Chemicals applied for Per Month + Chemicals properties
    • Estimated total per property
  4. Already billed properties are shown in a separate section (greyed out, with the existing invoice number).
  5. Optionally filter by customer or property.
  6. Toggle Combine per Customer if multi-property customers should get one combined invoice.
  7. Set the Default Message, such as "Thank you for choosing us for this month's service."
  8. Click Generate Invoices.

Pool Runs creates one invoice per property, or per customer when combined, and shows a summary of successful invoices and any errors.

What Gets Onto a Monthly Invoice

For a Per Month property:

LineCharged?Why
"Monthly Service — March 2026"$150The property's monthly rate
Visit 1 (Mar 5)$0 (informational)Included in the monthly rate
Visit 2 (Mar 12)$0 (informational)Included
Visit 3 (Mar 19)$0 (informational)Included
Visit 4 (Mar 26)$0 (informational)Included
Liquid Chlorine — 24oz$0 (informational)Chemicals included

For Per Month + Chemicals:

LineCharged?
"Monthly Service — March 2026"$150 (the monthly rate)
VisitsInformational
Liquid Chlorine — 24oz$4.32 (charged)
Muriatic Acid — 8oz$1.60 (charged)

An Informational line appears without a charge. The customer sees what they received, while the total does not double-count it.

Double-Billing Prevention

Pool Runs remembers each property and month combination that has been billed, then skips it on later runs for the same month. If you void the invoice, the property can be released for billing again.

Autopay

Autopay is the customer-side feature that stores a payment method and auto-charges new invoices on the due date.

How Customers Enroll

Two paths:

Path 1: Customer self-enrolls via portal or invoice link

  1. Customer pays an invoice via Stripe.
  2. On the payment confirmation page, a checkbox: "Save this card and enable autopay for future invoices."
  3. Customer checks it. Stripe stores the payment method on the connected account.
  4. Pool Runs marks the customer's autopay enrollment Active.

Path 2: Office-staff enrolls a customer

  1. From the customer profile, click Autopay → Enroll.
  2. The customer is sent a one-time setup link to add a payment method.
  3. They click, enter card details on a Stripe-hosted page, and submit.
  4. Enrollment is active.

What Autopay Does

When a new invoice is created and the customer is autopay-enrolled:

  1. The invoice shows that autopay is scheduled.
  2. On the due date, or the configured number of days before it, Pool Runs initiates a Stripe charge using the saved payment method.
  3. The invoice shows the autopay attempt as pending, processing, succeeded, or failed.
  4. On success, Pool Runs records the payment, moves the invoice to Paid, and Stripe sends the customer a receipt.
  5. On failure, retries kick in based on org settings.

Reminder Emails

Org settings include:

SettingDefaultPurpose
Enable autopayOnMaster toggle for your business
Send remindersOnSend a reminder before charging
Reminder timing3 days"Your card on file will be charged in 3 days"
Retry attempts3How many times to retry after a failure
Retry interval2 daysDays between retries

The reminder email gives the customer a chance to update their card if it's expiring or to cancel autopay before the charge.

Failed Autopay

If the stored card is declined (expired, NSF, fraud block), Pool Runs:

  1. Records the failed attempt and reason on the invoice.
  2. Updates the retry count for the autopay enrollment.
  3. Schedules a retry per the org's retry settings.
  4. After the maximum retries, marks the enrollment Failed and notifies the office.
  5. Sends the customer a "we couldn't charge your card — please update" email with a link.

The invoice remains Sent (or Overdue after the due date passes) until paid. Office staff can manually retry, ask the customer to update their card, or fall back to manual collection.

Autopay Status Indicators

StatusWhat it means
ActiveCard on file; autopay will charge new invoices
PausedCustomer paused autopay
FailedMaximum retries reached; needs office intervention
CancelledCustomer or office cancelled the enrollment

The invoice list and detail pages show an autopay badge so staff know which invoices are on autopay vs. manual collection.

Billing Run History

Every batch from the Invoice Generator or Monthly Billing appears in the billing run history. It shows who ran the batch, when it ran, which filters were used, and what was generated.

Use Cases

  • Review everything from a specific monthly run
  • "We had a bug — void everything from yesterday's run" (planned feature)
  • Reporting: which batches generated which revenue

Concepts

Why Stripe Connect for autopay

Pool Runs uses Stripe Connect, meaning each org has its own connected Stripe account. The customer's stored card lives on the org's Stripe account, not on Pool Runs' account. This means:

  • Funds go directly to the org's Stripe balance
  • The org pays Stripe fees, not Pool Runs
  • If Pool Runs ever loses access to Stripe data (unlikely), the org's relationship with their customers is intact
  • PCI compliance is Stripe's burden, not the org's or Pool Runs'

When monthly billing is wrong

Some orgs use Monthly Billing for the office workflow but charge per-visit pricing. This is a mismatch — you'd see all visits as informational ($0) and only the monthly line charged. Symptom: customers complaining that their bill doesn't match the visit count.

Fix: change the rate type to Per Stop and use the Invoice Generator, or change it to Per Month and confirm the billing change with the customer.

Industry context: monthly vs. per-visit

Pricing modelCommon forProsCons
Monthly flatResidential, vacation rentalsPredictable revenue, simpler customer billingBad weather months feel like a loss
Per visitNew customers, commercialDirect value-to-cost linkVariable revenue, more billing friction
Monthly + chemicalsPremium residentialPredictable base + chemical pass-throughCustomers occasionally dispute the chemical line

Most pool companies start per-visit and migrate customers to monthly as they prove out — Pool Runs handles either gracefully. The nuance is that the Monthly Billing UI is optimized for the monthly variant; per-visit recurring billing is best handled via Invoice Generator on a monthly schedule.

FAQ

Q: A customer has three monthly-rate properties. Can I send one combined invoice for all three? A: Yes — toggle Combine per Customer in Monthly Billing. They get one invoice with three property sections, one total. If left off, they get three separate invoices.

Q: Can autopay charge before the due date? A: Yes. Set Days Before Due on the autopay enrollment. The default is 0, which charges on the due date; set it to 3 to charge three days earlier.

Q: What if a customer is autopay-enrolled but I send them a manual invoice (not from monthly billing)? A: The same flow applies. A new invoice for an autopay-enrolled customer is scheduled to charge on its due date. To skip autopay for one invoice, turn off autopay on that invoice before the charge date.

Q: A customer's card is on autopay but they want to use a different card for one specific invoice. How? A: They can pay the invoice manually via the public payment link before the autopay charge runs — manual payment short-circuits autopay. Once a payment exists for the invoice, autopay is skipped.

Q: How do I cancel a customer's autopay? A: From their profile → Autopay → Cancel Enrollment. The customer is notified. Their card on file is removed from Pool Runs (the card itself remains on Stripe, but Pool Runs no longer references it). Future invoices will not be auto-charged.

Q: An invoice was created Mar 15 and the autopay reminder went out Mar 20 (3 days before Mar 23 due). The customer didn't update the card and it failed. What happens? A: Per org settings: 3 retry attempts, 2 days apart. Mar 25, Mar 27, Mar 29 retries. After Mar 29 the enrollment is failed and the invoice goes to manual collection. The customer gets four notification emails (initial reminder, then one per failure).

Q: Can a per-stop customer have monthly autopay? A: Yes — autopay is independent of rate type. Rate type controls how the invoice is calculated; autopay controls how it gets paid. A per-visit customer's monthly invoice (generated via Invoice Generator) can still autopay.

Troubleshooting

Monthly Billing shows zero customers. You have not set any properties to a monthly rate, or the selected month is too far in the future. Check each property's service pricing.

A property is showing as "already billed" but the invoice was voided. Voiding an invoice should release the property for billing again. If it still appears as already billed, check the property profile or contact support to clear the old billing record.

Autopay charged the wrong amount. Pool Runs charges the invoice total after adjustments and tax. If the amount is wrong, check the invoice's line items, adjustments, and tax calculation, then refund the overcharge and correct the invoice.

Customer says they enrolled in autopay but I don't see it. Two possibilities: (a) they tried but the Stripe setup didn't complete (look for pending enrollments); (b) they enrolled on a different invoice's payment page and Stripe's notification didn't reach Pool Runs. Check the Stripe dashboard for the customer's payment methods on your connected account.

Reminder email didn't send. Either reminders are turned off for your account, or the customer's email is missing. Check both. Reminders go out once a day — contact support if it's been longer than that.

The "Already Billed" list shows an invoice number that doesn't exist. Contact support. A billing record may need to be cleared before the property can appear in Monthly Billing again.


Need help? Check our troubleshooting guide or contact support.

On this page