Set your prices

Build the price book that quotes, contracts, and invoices all draw from, including tiers and renewal increases.

Updated October 9, 2026

Pricing is set per work type, not once for the whole company. A routine maintenance visit and an equipment repair are priced on completely different logic, so OpsVara keeps them separate.

Open Sales and BillingPricing and pick a work type. You will see three things to fill in. Aquatic companies get a fourth on the Lake Treatment tab, the Lake Price Sheet.

Tier setup

Five tiers, T1 through T5, that you name and rate yourself. Tiers are how you price the same service differently by size or difficulty — a small residential property versus a large one — without creating a separate service for each.

Name them something your office staff will recognize on a quote. "Small / Medium / Large" beats "T1 / T2 / T3". The tier marked with an asterisk is the default for any site that does not have its own tier.

Service prices

Each service you offer gets a row. Quotes and templates inherit these prices.

The setting that does most of the work on each row is Billed as:

  • Included — part of the agreed contract price for every site. It bills on the contract's schedule and never adds a charge when the crew completes it.
  • Add-on — on top of the base price, only for the sites that take it. Untracked, or tracked with a cap, it is planned onto the invoice schedule. Tracked with no cap, what actually happens depends on how the price is set on the quote or contract line: a Per visit (or per billing period) rate is charged each time the crew confirms it at sign-off; a Total for the term rate is instead capped to its quantity when the quote is approved and billed once, as a single planned fee.

You can also seed the row into new contracts, track whether it was completed each visit, and optionally cap how many times it may bill on one contract. When to invoice (per visit, monthly, once) and whether the price is per visit or a total for the term are set later on the quote or contract, not on this page — this row only sets the default the quote or contract line starts from.

Included versus add-on is easy to get wrong

A tracked add-on on a weekly plan shows up every time the crew confirms it. The same work marked Included is part of the contract price and never adds a charge when it is done. Check this on every extra before you send your first quote.

Renewal pricing

A percentage applied when you renew an ongoing plan. When it is set, renewal quotes pre-fill from the prior contract totals plus this increase, so January price changes stop being a spreadsheet exercise.

Lake Price Sheet

For aquatic companies, on the Lake Treatment tab only. Five tiers cover most lake work, but some companies price each lake on its own, and some lakes do not get every service. The Lake Price Sheet, the card below Service prices, gives a lake its own price for any service on the Lake Treatment rate card, or marks a service not offered there. A lake with nothing on the sheet prices by tier exactly as before, so nothing changes until you fill it in.

Each row is a catalog lake that one of your active sites is linked to (or that already has prices on the sheet), with its county, its tier (T2), and how many sites sit on it. Each column is a service from Service prices. The permit fee has no column: it always comes from the site's own permit. Neither does Misc, the catch-all for one-off charges, because it has no standard price to vary by lake. A cell holds one of three things:

In the cellWhat quotes do
BlankPrice by tier. The greyed text, such as T2 · $450, is what the lake charges today.
A numberUse this price for the service on every site on this lake.
n/a, or Not Offered from the cell menuLeave the service off quotes for this lake. The cell shows a Not Offered chip; its × offers the service again.

Move through the grid with Tab and Enter, as in a spreadsheet. The cell menu also has Price By Tier, which clears the cell, and Undo Change. The grid shows 20 lakes at a time, with Previous, Page X of Y, and Next under it (they appear once there is more than one page). Search, Save Lake Prices, and Export CSV cover every lake, and an edit on one page is still there when you move to another. Click Save Lake Prices when you are done. Only company admins and office managers can edit; everyone else sees the sheet read-only. The Lakes table below it shows each lake's coverage in its Prices column: By tier, or Own prices (3 of 5) · 1 not offered.

Which price wins

A quote line on a site linked to a catalog lake is priced in this order:

  1. A price someone typed on the quote line. It stays as typed.
  2. The lake's own price from the sheet.
  3. The rate card at the site's tier.

A lake price applies to every site on that lake, including a site with a tier of its own. A site copies its lake's tier when it is created, and the site form locks that tier while the site is linked to a catalog lake, so the site's tier is a starting point rather than a choice. To charge one site something different, type the price on that quote line.

Not offered leaves a service off where a quote template fills in the lines for you: on New Quote when it fills a quote for a site on that lake, and on a season sign-up or quote campaign priced from the rate card. A line you add to a quote by hand stays and prices by tier, so a service never disappears after you add it on purpose. On New Quote, a line priced from the sheet shows a Lake price chip; type a price on it to override it. A note under the lines names what was left off, such as Left off for Fish Lake — not offered: Lily Pad Control.

New Contract uses the sheet too when every site on the contract is on the same lake: the Service Scope fills in at the lake's own prices, leaves off what the lake does not offer, and says so above the scope. A contract with sites on more than one lake prices by tier, as before.

Ponds, fountains, and lake sites that are not linked to a catalog lake are not on the sheet and keep pricing by tier.

Change many lakes at once

Export CSV downloads the sheet with the columns waterBodyId, lake, county, state, and tier, then one column per service, headed by its service key. Edit the price cells in a spreadsheet the same way: a number (a $ or a thousands comma is fine), n/a (na, -, and not offered work too), or blank. Leave waterBodyId alone, because that is how each row finds its lake. The lake, county, state, and tier columns are for reference only.

Then click Import CSV and Choose CSV File. Nothing is saved yet. The dialog lists every change as Fish Lake · Lily pad treatment · By tier → Not offered, along with any rows it skipped (a lake id that is not on this sheet, or the same lake twice) and any columns it ignored. If a cell cannot be read, such as 45O, the dialog lists it with its line number and nothing can be applied until you fix the file and choose it again. Click Apply N Changes to save them all. A lake that is not in the file stays as it is, and so does a service whose column you deleted. Import is off while the grid has unsaved changes, so save or discard those first.

A lake price does not follow the rate card

A lake's own price is a fixed number. When you raise your Lake Treatment prices, lakes with their own prices keep theirs. The greyed tier price in each cell shows what the lake would charge without its own price; Export CSV, edit, and Import CSV is the quickest way to move many lakes at once.

If you remove or rename a service under Service prices, the sheet keeps the old prices in a greyed Not on rate card column. They are never used. Clear removes them when you save.

What to do next

With prices in place, add a customer and a site so you can send a quote. If you run a pool business, the monthly plan plus chemicals playbook walks the whole chain end to end. For a lawn business, Price and bill a lawn season does the same for monthly mowing and per-round treatments.

Frequently asked questions

Why does a site with its own pricing tier get the lake's price?

A lake's own price on the Lake Price Sheet outranks every tier, the site's included. A site copies its lake's tier when it is created and the tier is locked while the site is linked to a catalog lake, so it is a starting point rather than a choice. To charge one site something different, type the price on that quote line.

Does marking a service not offered remove it from quotes I already sent?

No. It decides which template lines OpsVara fills in from then on, on New Quote and on season sign-ups and quote campaigns priced from the rate card. Quotes already built or sent keep their lines, and a line you add to a quote by hand stays and prices by tier.

We have no lake prices yet. Does anything change?

No. A lake with nothing on the sheet prices by tier exactly as before. Ponds, fountains, and lake sites not linked to a catalog lake always price by tier.

Related guides