---
title: "Margin floor and discount approvals · BlastoClean docs"
description: "Give tasks a cost basis, see each quote line’s margin after a discount, and decide what happens when a discount goes below your margin floor: an approval with a reason, a refusal, or only a warning."
url: "https://www.blastoclean.com/docs/margin-floor-and-discount-approvals"
---

# Margin floor and discount approvals

Quoting · Web and mobile · 5 min read · Updated November 2, 2026

**On Pro and Business, each quote line shows its margin after the discount you type, and a discount that takes a costed line below your margin floor (15% unless you change it) needs an owner or manager to approve it with a reason, is refused, or is only shown, depending on your setting.**

A discount wins the job until it loses you money on it. The margin floor
checks every discount against what the work costs you, line by line, before the
quote goes out. Every discount that goes below the floor is recorded: who asked,
who decided, the reason, the amounts and the lowest margin.

It is part of the **Pro** and **Business** plans. Customers never see any of
it: costs and margins are not on the quote page, the PDF or the link you send.

## What a line's margin is

A line's margin is what is left of its price after the discount and after its
cost, as a share of the discounted price. The cost comes from the **cost
basis** on each task in your library:

- **Loaded hourly rate**: what an hour of labor costs you, payroll load
  included. Leave it blank and the task uses your company's default rate.
- **Materials**: what one room of this task uses, per visit.
- **Travel**: the drive, per room, per visit.

Labor hours come from the quote line's own minutes. Fees have no cost. A line
with no cost basis has no margin, and it is never below the floor.

On the web, set the cost basis in **Settings › Templates › Services**. Open a
task and fill in **Cost basis (staff only)**; owners and managers see these
fields. On the phone, in app versions
that include it, open **Settings › Rooms and tasks › Tasks** and edit a task:
the fields are **Loaded hourly cost**, **Materials per room** and **Travel per
room**. See [Your room and task library](/docs/your-room-and-task-library).

## Set the margin floor

Only the owner changes the floor.

![Web app: Team pay with the Margin floor card, with synthetic records.](/images/docs/settings-team-pay-margin-floor-en-20261102.webp)

On the web, open **Settings › Team pay** and find the **Margin floor** card:

1. **Floor (%)**: the lowest margin a discount may leave on any line. It is
   15% unless you change it.
2. **Below the floor**: what happens when a discount goes under it.
   - **Needs an owner or manager to approve, with a reason** (the default).
   - **Refuse the discount**.
   - **Show margins only**: margins are shown and nothing is ever refused.
3. **Default loaded hourly rate**: the labor cost for tasks without a rate of
   their own. **Open the task library** takes you to the tasks.
4. Select **Save margin floor**.

On a plan below Pro, the card says the margin floor is part of the Pro plan.

On the phone, in app versions that include it, open **Settings › Margin
floor**. The same choices are there as **Minimum margin (%)** and **Below the
floor** (**Require approval**, **Block discount** or **Off**). **Default loaded
hourly cost (company currency)** shows only to people who can see cost amounts.
Select **Save margin floor**.

## Line margins on a quote

On the web, go to the quote's **Send** step and open **Price adjustments and
checks**. The **Line margins** panel lists each line's **Line**, **Price**,
**Discount**, **Cost** and **Margin** after the discount you are typing, and
marks any line **below floor**. The panel says: "Only staff see this; it is
never on the customer's quote." The preview uses the quote as last saved, so a
room you just changed counts after the next autosave.

![Web app: the quote's Send step with Line margins showing a line below the floor, with synthetic records.](/images/docs/quote-line-margins-en-20261102.webp)

On the phone, in app versions that include it, the quote's **Price and notes**
screen has a **Line margins** card. Type the discount and tap **Check this
discount**.

Owners and managers see the **Cost** amounts. Estimators see the margins but
not the costs.

## When a discount goes below the floor

What happens depends on the **Below the floor** setting and on who is typing
the discount.

- **Refuse the discount.** The quote shows **This discount is too deep** and
  asks you to lower the discount before it can be saved. A smaller discount
  saves normally.
- **Needs approval, and you are an owner or manager.** Under **Below the margin
  floor**, enter a **Reason** and select **Apply discount**. The discount goes
  on the quote, and the trail records you as both the person who asked and the
  person who approved.
- **Needs approval, and you are an estimator.** Enter a **Reason** and select
  **Ask for approval**. The quote shows "Request sent. The discount is applied
  once it is approved." Until then it says "Your request is waiting for an
  owner or manager." On the phone, the rest of your changes save right away;
  only the discount waits.
- **Show margins only.** The margins are shown and the discount saves.

## Approve or reject a request

Owners and managers decide requests.

![Web app: Below-floor discounts with a request waiting on you and recent decisions, with synthetic records.](/images/docs/margin-overrides-en-20261102.webp)

![Native UI preview: Discount approvals with a waiting request and a recent decision, with synthetic records.](/images/docs/mobile-discount-approvals-en-20261102.webp)

On the web, open the **Below-floor discounts** page. It is not in the sidebar:
open it with the **Below-floor discounts** button on the **Margin floor** card,
or with **See requests** in a quote's **Line margins** panel. **Waiting on
you** lists the requests to decide, and **Your requests** lists the ones you
sent. Add a **Note (optional)**, then select **Approve and apply** or
**Reject**. Approving puts the discount on the quote. **Recent decisions**
keeps what was decided.

On the phone, in app versions that include it, open the **Quotes** tab and tap
**Discount approvals** in the toolbar. A badge shows how many requests are
waiting. Under **Waiting for approval**, tap **Approve** or **Reject**, with an
optional note.

## The report by salesperson

The **Below-floor discounts** page has a **By salesperson** report for the last
90 days: requests, approvals, rejections, the ones still waiting, the discount
given and the average lowest margin. The phone's **Discount approvals** screen
has a report by salesperson too. Owners and managers see it. It is a quick way
to see who discounts deepest, and how often it is approved.

## What is checked, and what is not

- Only a discount that gets **deeper** is checked. A new discount, or a larger
  one, that takes a costed line below the floor is gated. Lowering a discount,
  removing it or sending the quote again is never refused.
- Editing rooms on a quote that already has an approved discount is not a
  discount change, so it does not ask again.
- The discounts in a [price for each schedule](/docs/pricing-a-quote) are
  checked the same way. A waiting request covers the quote's discount only.
- Lines without a cost basis have no margin, so they never block a discount.
- Duplicating a quote keeps an approved discount, or copies the quote without
  it.
- There are no promo codes for customers. Every discount is one your team typed.

Who can approve, and who can see costs, follows the roles in
[Team, roles and permissions](/docs/team-roles-and-permissions).
