Pool Runs Docs
BillingInvoices

Invoices Overview

How invoices work in Pool Runs — the status lifecycle, the four ways an invoice is created, line items vs. adjustments, and how double-billing is prevented.

Invoices Overview

An invoice in Pool Runs is the financial record that ties together what was done (route stops, chemicals, work orders, parts), what it costs (line items, taxes, adjustments), and the money that came in against it (payments, refunds). Once you understand how those three layers fit together, the rest of the invoicing guides feel less like nine separate features and more like one coherent system. This page is the conceptual primer.

Invoice detail header with invoice metadata and customer contact details

The Mental Model

Pool Runs separates an invoice into three layers:

Layer 1: The invoice header

The header is the invoice's identity — who owes what, on what terms, by when:

FieldWhat it represents
Invoice numberUnique number allocated automatically (e.g., INV-2026-04-00123); gaps can occur
Customer + PropertyWho is being billed and (optionally) for which service address
StatusDraft → Generated → Sent → Paid (with Partial, Overdue, Void in between as needed)
TermsUpon receipt, Net 15, Net 30, Net 60, Net 90
Issued date / Due dateWhen the invoice was finalized and when payment is due
Billing period start / endThe service window the invoice covers (e.g., March 1–31 for monthly billing)
Subtotal / Tax / TotalCalculated from line items + adjustments
Down paymentFor deposit invoices that came from quotes

Layer 2: Line items

A line item is one row on the invoice — a service, a part, a chemical, a work order, or a fee. Each line item has a description, quantity, unit price, total, and a source label that tells Pool Runs where it came from:

SourceCreated fromExample
RouteA completed route stop"Weekly Service — Smith Property — Mar 12, 2026"
Work orderA completed work order"Filter Clean & Inspection — WO-1042"
DosageA chemical applied during service"Liquid Chlorine — 32 oz @ $0.18/oz"
Installed itemA part installed (from the shopping list)"Pool Light Bulb — qty 1 @ $45"
ManualTyped by hand on the invoice form"Trip charge for emergency call-out"
Service / Part / Chemical / Labor / FeePicked from your catalogProduct picker selection
Deposit / DiscountSpecial-purposeDown payment from quote, line-item discount

Every line item is linked back to its source so Pool Runs can prevent double-billing — see Double-billing safeguards below.

Layer 3: Adjustments and payments

Adjustments sit alongside line items but apply to the whole invoice, such as fees, discounts, a percentage off, or a flat dollar amount. You choose whether each adjustment applies to the subtotal, labor, parts, chemicals, or services.

Payments are recorded separately. Multiple payments can be applied to one invoice (partial payment scenarios). Each payment has its own status lifecycle (pending → succeeded or failed → optionally refunded).

LayerCreated whenExample
HeaderInvoice is created"Invoice INV-2026-04-00123 to Smith Family, total $237.50, due Apr 30"
Line itemsItems added (manual or auto-pulled)"Weekly service Mar 5/12/19/26 — $135 + chemicals $42.50"
AdjustmentsAdded during creation or after"$10 loyalty discount"
PaymentsCustomer pays or staff records"$237.50 paid by Visa through Stripe on Apr 12"

Invoice Status Lifecycle

                  ┌─── cancelled (no payments)
                  │
draft → generated ─┼─→ sent → viewed → partial → paid
                  │                ↓
                  │              overdue ─→ paid (late)
                  │                ↓
                  └─→ void (anytime)
                                   ↓
                               refunded (after paid)
TransitionTriggered byWhat happens
Draft → GeneratedInvoice form Save & GenerateExisting invoice number retained, issue date set, line items locked from edits
Generated → SentSend buttonEmail dispatched and the secure payment link becomes available
Sent → ViewedCustomer opens the email linkThe customer view appears in the invoice history
Sent → PartialA partial payment is recordedBalance updates to show the amount still due
Sent → PaidThe full balance is paidPaid date is recorded and the balance reaches zero
Any unpaid status → OverdueDue date passesStatus badge changes to red
Any unpaid status → CancelledCancel Invoice actionInvoice is excluded from A/R and its items can be billed again
Any status → VoidVoid Invoice actionInvoice is preserved for history and its items can be billed again
Paid → RefundedFull refund issuedRefund is recorded and the customer balance updates

The invoice history shows every status change, who made it, and when.

Tax Handling

Pool Runs supports two tax modes per organization:

  • Flat rate — One percentage applies to every taxable line item. This is simplest for single-jurisdiction operators.
  • Tax zones — The property's ZIP code is matched to a zone with one or more state, county, city, or district rates. The invoice shows each rate's contribution.

A line item's Taxable setting controls whether tax is charged. Customers marked Tax Exempt pay zero tax. See Tax Zones & Tax Management.

The Four Ways an Invoice Is Created

Pool Runs gives you four entry points so you never retype work that's already been logged:

1. From a quote

Approved quotes generate invoices via Generate Invoice on the quote detail page. Two modes:

  • Single invoice — Full quote total in one invoice.
  • Two-invoice deposit + final — Deposit invoice first; final invoice (with deposit credit) after the deposit clears.

This is the recommended path for any quoted work because it preserves the quoted price, discount adjustments, and down-payment terms.

2. From a work order

Completed work orders have a Create Invoice button. All work-order items become invoice line items. A work order can only be invoiced this way once; afterward, the button is disabled.

3. Invoice Generator (bulk)

The Invoice Generator pulls everything billable for a date range, including completed route stops, chemical dosages, installed parts, and uninvoiced work orders, then groups it by customer or property. One run can produce dozens or hundreds of invoices. See Invoice Generator.

4. Manual / ad-hoc

The + New Invoice button opens an empty form. Type the customer, add line items by hand or via the product picker, set terms, save. Best for charges that don't originate from any other Pool Runs object — late fees, refund-of-credit invoices, special-arrangement billings.

Double-Billing Safeguards

The Invoice Generator and other auto-paths have multiple checks to prevent the same work from being invoiced twice:

Item typeHow double-billing is prevented
Route stopsOnly stops that have not already been added to an invoice are included.
Work ordersOnly work orders that have not already been invoiced are included.
Work-order route stopsStops attached to a work order are skipped from route-based billing entirely (the work order itself bills them).
Chemical dosagesOnly dosages without a matching invoice line item for that chemical and date are included.
Installed partsAlready-invoiced parts are excluded.
Monthly propertiesPool Runs remembers which property and month combinations were billed and skips duplicates.
Quote → final invoiceGenerating a final invoice from a quote auto-marks the associated work orders as invoiced.

You can still manually create duplicate invoices — Pool Runs does not block staff from typing the same line item twice on a manual form. The safeguards apply to automated paths.

Anatomy of an Invoice Number

Pool Runs allocates invoice numbers from the organization’s configured sequence and format in Settings → Invoicing. Draft invoices receive numbers, and a failed generation can consume a number before the invoice is saved, so gaps can occur:

{PREFIX}-{YYYY}-{MM}-{NNNNN}

Defaults:
  PREFIX  = INV
  YYYY    = 4-digit year
  MM      = 2-digit month
  NNNNN   = 5-digit zero-padded sequence (continuous, not reset by month)

Example: INV-2026-04-00123

Pool Runs tracks the last invoice number used for your organization to keep every number unique. Once a number is assigned, it cannot be changed, and voiding an invoice does not release it.

You can change the prefix, suffix, and format at any time in settings — the change applies to invoices created after that point.

FAQ

Q: What's the difference between cancelling and voiding? A: Cancel is for invoices that were never paid and should not have existed. The invoice number remains in sequence, the invoice is excluded from A/R, and its items can be billed again. Void is for sent invoices that must be retracted but kept in history, such as for an audit trail or QuickBooks correction. If a payment exists, you typically refund first, then void.

Q: Can I edit an invoice after it's been sent? A: The full Edit form is available only while an invoice is Draft. Generating or sending the invoice locks its line items, even if it has not been paid. For a pricing correction after that point, use the appropriate adjustment or void workflow. Review any existing payments before voiding an invoice.

Q: Can one invoice cover multiple properties? A: Yes. Use the Invoice Generator's Combine per customer option. The PDF lists each property's items in its own group with the property address as the section header.

Q: What's a billing period and when do I set one? A: The billing period describes the service window the invoice covers, such as March 1–31, 2026. The Invoice Generator and Monthly Billing fill this automatically; it is optional on manual invoices.

Q: Why can the line price and line total differ? A: The line total includes quantity, discounts, percentage adjustments, and rounding without changing the original unit price.

Q: How does the down-payment field work on a regular invoice? A: Invoices created from quotes with a deposit carry that requirement forward. You can also set a minimum first payment manually for projects where you want to collect a deposit before the remaining balance.

Q: What does an "informational" line item mean? A: For monthly-rate (chemicals included) properties, the route stops and chemical dosages are listed on the invoice for transparency but not charged separately — the customer is paying the flat monthly rate. Those rows are marked informational so they appear with $0 totals or struck-through pricing on the PDF. The customer sees what they got; the math doesn't double-count.

Troubleshooting

Why does an invoice show "Overdue" when it was paid? Overdue is recalculated nightly from the due date and the sum of payments. If the payment was recorded just before midnight but the recalculation already ran, the badge will catch up the next night. Click into the invoice to force a refresh.

The total on the PDF doesn't match the line items. Check for active adjustments (fees or discounts), tax breakdown, and rounding (Pool Runs rounds to 2 decimals at the line and again at the total — fractional cents can shift). Review the line items, adjustments, and tax breakdown on the invoice detail page. The full Edit form is available only for draft invoices.

An invoice was sent twice via email. The Send button can be clicked multiple times — each click re-sends the email and updates the timestamp. The customer sees two emails; both link to the same invoice and same payment page. The safest pattern is to click Send once and use Resend (which keeps the same secure link) thereafter.

Sending Invoices

After reviewing an invoice, the next step is getting it in front of the customer. Eligible draft invoices can be sent directly; they do not need to be generated first. Available delivery actions depend on your permissions, payment configuration, and any QuickBooks ownership or review restrictions.

Invoice detail page with the Send Invoice action highlighted

Quick Steps

  1. On the invoice detail page, review the line items, total, dates, and customer's email before sending. Make any line-item changes while the invoice is still Draft.
  2. When Send Invoice is available, click it to send the invoice email. This action sends directly; it does not open a recipient-confirmation dialog.
  3. A successfully sent draft moves to Sent, locking its line items. Check the success notification and the invoice's updated state.

To send it again, use Resend Invoice. Check the customer's email before clicking, since this also sends directly.

The Three Delivery Channels

ChannelHow it's deliveredCustomer access
EmailPool Runs sends from your business email address or the Pool Runs defaultEmail contains the secure payment link
Secure Payment LinkCopy the link and share it by text or another channelAnyone with the link can view and pay that invoice
Customer PortalThe customer logs into their Pool Runs portal and sees all their invoicesPortal login

Email is the default. The public link is useful for SMS, in-person handoffs, or paste-into-CRM workflows. The portal is for customers who want a single dashboard for history, autopay enrollment, and document downloads.

What the Customer Sees

The invoice email contains a short message, the invoice number, issued and due dates, a summary of line items, a Pay Now call-to-action button, and an optional PDF attachment.

When the customer clicks Pay Now, they're taken to the public payment page — no login required.

The payment page shows invoice details, line items, tax breakdown, adjustments, a Pay widget powered by Stripe Elements (card, ACH, Link, Apple Pay, Google Pay), and a Download PDF button.

The first time a customer opens the link, the invoice status moves from sent → viewed.

Each sent invoice has a secure link that opens only that invoice. The link expires after 90 days. If it expires before payment, the customer sees a message asking them to contact you. Click Resend to refresh the link, or direct the customer to their portal.

Email Customization

Before Sending. Check the invoice details and the customer’s email before selecting Send Invoice. The invoice detail action sends directly; it does not open a recipient or message editor.

Org-Wide Defaults (in Settings → Invoicing): default invoice message, default invoice footer, email "from" address (requires DNS verification), email "from" name, and an attach-PDF toggle.

Customer Email. The invoice detail send action uses the email on the customer profile. Verify that address before sending.

Sent vs. Viewed

StatusTrigger
sentEmail is dispatched. We don't know if it was opened.
viewedCustomer opens the public payment link.

viewed is a stronger signal than sent. If you've sent an invoice and it's been a week with no view, that may indicate the email landed in spam or the customer's email is wrong.

Email Deliverability

Most invoice emails land in the inbox. Common reasons for the spam folder include strict corporate email filters, an unverified sending address, or the customer marking a previous invoice as spam. When email fails, copy the invoice link and text it to the customer.

Customer Portal

For customers with portal access, all their invoices appear in My Invoices. They can view any past or current invoice, pay any unpaid invoice, download PDFs, enroll in or manage autopay, and see payment history. Portal access is invitation-based, and the customer receives a secure sign-up email when you enable it on their profile.

Sending FAQ

Q: Can I send an invoice without an email — like by mail or in person? A: Yes. Generate the invoice (retains its number and locks line items, but doesn't email) and Download PDF. Print it, mail it, hand it over.

Q: The customer says they didn't receive the email. What do I do? A: Three things to try, in order: (1) ask them to check spam; (2) click Resend; (3) copy the public payment link from the invoice's URL and text it to them.

Q: Can I CC the bookkeeper on every invoice? A: The invoice detail action sends to the customer's main Email and has no per-send CC field. If the bookkeeper should be the recipient, confirm that choice with the customer before changing their main email. That changes the customer's contact address for other messages too.

Q: Can I schedule an invoice to send later? A: For monthly billing, yes — see Recurring & Auto Invoicing. For one-off scheduling, no.

Q: Does the customer need a Pool Runs account to pay? A: No. The public payment link is anonymous — Stripe handles the card form, and we record the payment back against the invoice.

Sending Troubleshooting

  • The send fails with "Invalid recipient." Either the customer has no email on file or the email format is invalid. Check the customer's main Email field on the customer profile; the invoice detail send action uses that address.
  • The email arrived but the Pay Now button shows "Link expired." The 90-day secure link expired. Click Resend to issue a fresh link.
  • The customer paid through Stripe but the invoice still shows Sent, not Paid. Refresh the invoice and check the payment's status in Stripe. A processing payment is not final, and a completed payment may take a few minutes to appear in Pool Runs. If it succeeded in Stripe but remains missing in Pool Runs, contact support with the invoice number and payment date so they can check the integration sync. Avoid recording the payment a second time unless support confirms that you should. See Recording Payments.
  • Send Invoice is unavailable on a draft invoice. Draft status alone does not prevent sending. Check your invoice permissions and payment configuration. QuickBooks-owned invoices and invoices awaiting integration review have additional restrictions; contact support if the required action is unclear.
  • The PDF attachment isn't showing on the email. Check Settings → Invoicing → "Attach PDF to invoice email."

Need help? Check our troubleshooting guide or contact support.

On this page