Bill a monthly pool plan, plus chemicals used

Set up a fixed monthly maintenance plan that also bills the chemicals your techs actually applied, from the first quote through a paid invoice.

Pool MaintenanceCrewFleetEnterprise

Updated September 2, 2026

This is the most common way a residential pool route gets billed: a predictable monthly service fee, plus the chemicals that were actually put in the water. The customer gets one invoice a month showing both.

By the end you will have a signed quote that created a Maintenance Plan, visits landing on the schedule automatically, techs logging chemicals from their phones, and an invoice that drafts itself on the same day every month.

Requires the Chemical Billing feature. If you do not see it, ask your OpsVara contact whether it is enabled for your account.

Before you start

You need your company profile, team, and price book in place. If you have not done those yet, start with Getting Started and come back.

1. Check the work type

Pool maintenance ships with three work types. This playbook uses Routine Service, which is already configured for exactly this billing shape.

Open SettingsWork Types and select Routine Service. Confirm:

SettingDefaultWhy it matters
Visit cadenceEvery 7 daysFields Every and Unit. Drives how many visits get scheduled per month.
Default visit length — work done30 minutesFeeds crew capacity and route planning.
Default termAnnualUnder Service terms. Seasonal and Ongoing are offered too. Pick what matches your climate.

Invoice timing is not on this screen. On the quote you will set When to create invoices to Monthly on fixed day, which is the work type's shipped default.

Seasonal or year-round?

Pool maintenance spans climates. A Minnesota pool runs roughly May through October; a Florida pool never stops. Annual is the neutral default — it neither imposes a five-month season on a year-round business nor auto-renews before you have opted into that. Change it to seasonal or ongoing if that fits you better.

2. Price the plan

In Sales and BillingPricing, select Routine Service and set your monthly rate. Use tiers if you charge differently by pool size — that is what they are for, and it keeps you from creating a separate service per pool.

Anything you want to sell on top of the plan, like a filter clean or a salt cell replacement, goes in as an add-on rather than a separate service.

3. Turn on chemical billing

This is the step that makes the "plus chemicals" half work. Go to SettingsChemical Billing and switch it on. Then decide four things.

  1. Choose how chemicals are priced

    Flat sell price charges a fixed price per unit regardless of what you paid. Cost plus markup % takes your recorded cost and adds a percentage. Markup keeps your margin intact when supplier prices move; flat is easier to explain to a customer who asks.

  2. Set your default markup

    If you chose markup, set Default Markup %. This is the fallback — you can still override it per product.

  3. Decide whether chemicals are taxable

    In most jurisdictions chemicals applied as part of a service are taxable. Confirm with your accountant rather than guessing, because changing it later does not correct invoices already sent.

  4. Pick how the lines appear

    Itemized (one line per product) shows every product and quantity. Summary (single line per month) rolls it into one line. Itemized answers "what did you put in my pool?" before the customer has to ask; summary keeps the invoice short.

4. Price your chemicals

Pricing resolves on each inventory item, then falls back to the tenant default:

  1. The product's own Chemical Billing settings — Flat sell price or Cost plus markup %.
  2. Inherit, which uses the tenant default you just set (and a sell price on the item if you chose flat).

Set prices on the products you use most, under Inventory. The tenant default covers the rest, so you do not need to price the whole catalog before going live. A product with no resolvable sell price is logged but does not bill.

5. Build and send the quote

Save this as a quote template once and every future pool customer takes about a minute to quote.

  1. Create the quote

    From Sales and BillingQuotes, start a new quote for the customer and pool. Pick Routine Service and your tier.

  2. Add optional extras

    Line items can be marked optional so the customer chooses at approval time. This is a better way to sell a filter clean than a follow-up phone call.

  3. Set an expiry

    Accept Quote by (optional) keeps stale pricing from being accepted six months later at last season's rate.

  4. Say what chemicals will cost

    Add a line explaining that chemicals are billed as used at your markup. The plan price is fixed; the chemical total is not, and setting that expectation now prevents the first invoice question.

  5. Send it

    The customer gets a link, reviews the options, and signs electronically. If they say yes by phone instead, record the acceptance in the office — it follows the same path and keeps the audit trail.

Save it as a template

Once the quote looks right, use Save as Template on the quote's Actions menu, or build one under SettingsQuote Templates. Templates carry the line items, optional extras, and terms.

6. What approval actually creates

This is the step most people expect to have to do by hand. You do not.

When the customer approves, OpsVara creates a Maintenance Plan — the pool term for a service contract — and configures it from the quote:

  • Billing fires on a fixed day each month, not per visit.
  • The invoice amount comes from the contract rate you agreed, so it does not drift with how many visits fell in a given month.
  • The accepted line items become the plan's scope, including any optional extras the customer chose.

Find it under Sales and BillingContracts. Check the billing day now — that is the date the customer will see a bill every month.

No contract appeared?

A quote only creates a plan when its work type is set up to support one. Routine Service is; a one-off equipment repair is not, by design. If you expected a plan and got none, open the work type in SettingsWork Types and check What an approved quote createsCreates a Service Contract on Approval has to be on.

7. Visits land on the schedule

With the plan active, visits generate on your interval — every 7 days by default. A work type set to Set weekdays generates them on the chosen days instead — twice a week on Monday and Thursday, for example. They show up under Schedule and route like any other work.

You do not create these by hand, and you should not: the plan is what ties them to billing.

8. Techs log chemicals in the field

Everything above is setup. This is the part that runs every week.

Your tech opens the job on their phone and works through the pool visit:

Arrive → Before Photos → Water Test → Dose Plan → Parts Used → Tasks → Photos → Complete

Parts Used only appears when Inventory is on for your plan. Photos is the after-visit step. The Complete step also offers an optional After-dose retest — readings taken once the chemicals have circulated, shown to the customer as "After" beside the arrival numbers.

Two steps drive billing:

  • Water Test captures the readings — free chlorine, total chlorine, pH, total alkalinity, calcium hardness, cyanuric acid, water temp, and salt when the pool uses a salt or automated system. TDS, ORP, and phosphates sit under More readings. Fields start blank, and leaving Free Chlorine, pH, or Total Alkalinity empty prompts once rather than blocking checkout. This is the justification for what gets added.
  • Dose Plan records the chemicals that actually went in, and how much. Parts Used is for skimmer baskets, cords, and other truck stock on the same visit — not the chemistry.

At the moment the tech logs a product, its sell price is calculated and stamped onto the record. That matters more than it sounds: if you change your markup in September, August's logged chemicals still bill at August's price. Historical invoices stay correct.

Train the crew on one thing

Log the actual quantity applied, not the container size. Everything downstream — the invoice and your margin — is only as accurate as this number.

9. The monthly invoice

On your billing day, the invoice drafts itself:

  1. The plan fee goes on first, at the contract rate.
  2. Every billable chemical logged since the last invoice is appended, either itemized or summarized.
  3. Each logged entry is marked with the invoice it landed on, so the next month's rollup cannot bill it again.

Review it in Sales and BillingInvoices, then send. If you would rather not review each one, turn on Automatically Send Draft Invoices under SettingsAutomations.

10. Get paid

Autopay charges the card or bank account on file when the invoice sends. The customer consents once through the portal or a setup link, and that consent is recorded with a timestamp.

If you pass card processing costs to customers, surcharging is configured separately and requires its own consent. Set both up before the first invoice goes out rather than after.

Verify it worked

Do not assume — check these four:

  1. The plan exists and bills monthly

    Sales and BillingContracts — open the plan and confirm the billing day and rate.

  2. A visit was completed with chemicals logged

    Open a completed job and confirm the Dose Plan products, quantities, and that each one has a sell price.

  3. Chemicals reached the invoice

    Open the current month's invoice. You should see the plan fee and the chemical lines on one invoice.

  4. The numbers match your expectation

    On that invoice, compare quantities and prices to what the tech logged on Dose Plan. A gap here almost always means the product had no resolvable sell price, or it already billed on an earlier invoice.

When chemicals are missing from the invoice

Work through these in order:

CheckWhat to look for
Is chemical billing on?SettingsChemical Billing — the master switch.
Is this contract overriding it?A plan can override the tenant setting to off. Check the plan itself.
Were the products priced so they can bill?A log line is billable only when a sell price resolves — flat sell price or cost plus markup. Free-text materials never bill.
Was the usage logged before you enabled billing?Usage from before the switch was flipped is not backfilled.
Did it already bill?Each entry is stamped with its invoice. If it landed on last month's, it will not repeat.

If this shape is not quite yours, the same chain adapts: bill after each visit instead of monthly by changing When to create invoices on the quote or contract, or fold chemicals into a flat rate by leaving chemical billing off and pricing the plan to cover it.

Frequently asked questions

Can I include chemicals in the flat rate instead?

Yes. Leave chemical billing switched off and price the plan to cover your chemical cost. Your techs still log what they applied, so you keep the usage history and the reporting without the customer seeing a separate line.

Why are chemicals missing from this month's invoice?

Check three things in order — that chemical billing is enabled in Settings, that the contract is not overriding it to Off, and that each logged product resolved a sell price (flat sell price or cost plus markup). Usage logged before you enabled billing is not backfilled.

Does the customer get two invoices?

No. The chemical lines are appended to the same monthly invoice as the plan fee, so the customer sees one bill with the plan on top and the chemicals below it.

What happens if a tech logs a product twice?

Each logged entry bills once and is stamped with the invoice it landed on, so a rollup never double-bills. A genuine duplicate entry has to be corrected on the job before the invoice drafts.

Related guides