A quote line starts at the service's default price from Settings → Services. A per-vehicle price from Settings → Pricing Rules does not replace it automatically — someone has to click the suggestion on that line. And after you hit save, the server can change the number one more time for fleet contract pricing or an HQ price floor. When the quote says one thing and your price list says another, it's almost always one of those three steps.
Where each number on a quote line comes from
- The starting price — add a service from the "Quick service" picker on the New Quote screen and the line seeds at that service's default price in Settings → Services. Nothing else is consulted at that moment.
- A pricing rule — your per-vehicle-class, per-window price from Settings → Pricing Rules. It only lands on the line if someone clicks it. Details below.
- Fleet or customer contract pricing — applied automatically by the server when the quote is saved, if the customer is covered. See Setting up fleet pricing.
- An HQ floor or discount cap — if your shop belongs to a franchise organization, the network minimum price and maximum discount are enforced last, on save.
Pricing rules do not apply themselves
This is the part that catches most shops out. On the New Quote screen, a line added from the Quick service picker gets a "Price by vehicle:" strip with two dropdowns — vehicle class and windows. Pick both, and if an active rule matches, a link appears reading *Use $265 (Better) for this vehicle*. The price changes only when someone clicks that link. It never silently overwrites a price that was already typed in.
Three things follow from that:
- Set only one of the two dropdowns and nothing appears — the lookup needs an exact service + vehicle class + window set match, not a partial one.
- The strip only exists on lines added from the Quick service picker. A free-typed line, a package line, or a tint job built in the Sales Matrix has no single service attached, so there is no rule lookup on those lines at all.
- If your front desk builds quotes by typing prices in by hand, your pricing rules are decorative. Whatever they typed is what the customer sees.
What a rule is keyed on
Settings → Pricing Rules → New Rule asks for:
- Service — required, picked from your active services.
- Film product — optional, defaults to "Any / none".
- Vehicle class — required. Shown as raw codes on this page: SEDAN, COUPE, SUV, TRUCK, VAN, CROSSOVER, WAGON, CONVERTIBLE, OTHER.
- Window set — required, also raw codes: FRONT_2, REAR_3, REAR_5, FULL_7, WINDSHIELD, SUNROOF, FULL_VEHICLE, CUSTOM.
- Price — required, and the only field the quote builder actually uses.
- Duration (min), Tier name (Good / Better / Best), Tier order — optional.
Worth being blunt about duration: you can set it on a rule and edit it later, but nothing reads it back. Applying a rule to a quote line copies the price and only the price. Job length still comes from the service.
When two rules could match the same vehicle and window
Two active rules with the exact same service + film product + vehicle class + window set are blocked outright. Try it and the save fails with: "An active pricing rule already exists for this exact service + vehicle class + window combination. Deactivate or edit the existing one instead."
Two rules that differ only by film product are not duplicates by that check, so they're allowed — and that's the case to watch. The quote builder's lookup matches on service, vehicle class, and window set only. It ignores film product, sorts what's left by tier order, and takes the first one. So:
- With a Good / Better / Best set for the same vehicle and windows, only the lowest tier order is ever suggested. The others are invisible at quote time.
- Tier order defaults to 0. If two matching rules both sit at 0, which one wins is not defined — the same vehicle can get a different suggested price on different days. Give every rule in a set a distinct tier order.
Editing, deactivating, and deleting
The edit dialog only lets you change price, duration, tier name, and tier order. Service, film product, vehicle class, and window set are locked once the rule exists — to change any of those, retire the rule and create a new one.
The Active switch on each row works, but the table only ever loads active rules and there's no "show inactive" toggle on the page. Flip a rule off and the row disappears with no way to switch it back on from this screen. Deactivate only when you mean it. Recreating the same combination afterward does work, because the duplicate check only counts active rules.
The trash icon asks for a confirmation and then hard-deletes. If the rule was ever applied to a quote or invoice line, the delete is refused with "This pricing rule is used by an existing quote or invoice line item and can't be deleted. Deactivate it instead." — which is fine advice, as long as you've read the paragraph above.
Who can change pricing rules
Creating, editing, and deleting all require the shop's manage pricing permission. Owner, Admin, and Manager have it by default; Technician, Front Desk, and Service Writer do not, and their save will come back as an error. Viewing the list isn't restricted — anyone signed into the shop can see the prices. Custom permission sets and per-user overrides can change any of this.
Pricing Rules is not plan-gated. It's available on Basic, Starter, Growth, and Pro.
If your franchisor has locked pricing
Shops in a franchise organization can have pricing locked by HQ. When that's on, the page shows a "Pricing locked by HQ" badge, names your franchisor in the subheading, disables New Rule, and hides the price field in both the create and edit dialogs. You can still edit duration, tier name, and tier order, and you can still deactivate rules — only the money is locked.
What the server does to the price when you save
Whatever price is sitting on the line — typed, seeded from the service default, or applied from a rule — is only the starting point. On save, in this order:
1. Fleet / customer contract pricing. The most specific override wins: a rule on the individual customer beats one on their fleet, and an exact service or film match beats a category-wide one. Expired contracts never win. A flat contract price replaces the unit price outright — including a price you just applied from a pricing rule. A contract discount percentage is added on top of the line's list price instead. 2. HQ floor and discount cap. If the shop belongs to an organization with network pricing rules, a below-floor unit price is raised to the floor and any discount is clamped so the net can't drop back under it. 3. A final clamp so the line total can never go negative.
One useful tell: if a contract number applied and the line's description was blank, the saved line comes back with "Contract 12345" written into the description. If you see that on a quote, contract pricing touched the price.
What pricing rules don't touch
- Coupons. Coupons are an invoice-level thing — redeeming one adds a separate discount line to an invoice. A coupon never changes a quote line's unit price, so it isn't part of this precedence question at all. See Creating and managing coupons.
- Packages. A package line is re-priced server-side from the package's own configured price. Anything typed on that line, and any pricing rule, is ignored.
- The Sales Matrix. In-store tint presentations price from the Sales Matrix's own film grid, not from these rules. See How good / better / best quote tiers work.
Quick diagnosis
Q: The quote came out at the plain service price even though I have a rule for that vehicle. A: Nobody clicked "Use $…" on the line — or the line wasn't added from the Quick service picker, or only one of the two dropdowns was set.
Q: The rule I set up shows a different price than expected on the suggestion. A: You probably have more than one rule for that service + vehicle class + window set differing by film product, and the lowest tier order is the one being offered. Check the tier order column.
Q: The price changed between what I saw in the builder and what saved. A: Fleet or customer contract pricing, or an HQ floor. Check whether the customer belongs to a fleet, and look for a "Contract …" note in the line description.
Still doesn't add up? Use the in-app help widget or email info@roffik.com with the quote number and the rule you expected to apply.