Planning guide · Not legal advice

They want a not-to-exceed. Here’s what you keep if hours run long.

They wrote a lid on the invoice. The hours did not. Type the hours this job is actually taking, your hourly floor, and the cap they named. Billed is the smaller of hours × floor and that cap. If hours run long, the leftover clock is unpaid unless they open a change-order — not a 10% “NTE buffer” someone invented for a blog.

$0
Billed (capped)
Unpaid hours
Hours × floor
Cap they named
Implied hourly under the cap

Copy-paste sentence (cap vs hours × floor):

Next money on this hub:

A lid is a lid. It is not a 10% cushion.

A procurement PDF will tell you “not-to-exceed means pad 10%.” That percent is not a law, not a tax table, and not what this card computes. They wrote a dollar ceiling. Your floor still exists — the same hourly floor you already set on the hub. This page does not clone that tax buffer and does not run a 50-state tax engine. Labels here are USD so the arithmetic stays readable.

Billed = min(hours you type × hourly floor, cap you type). If hours × floor sits under the cap, you bill hours × floor. If it sits over, you bill the cap. Unpaid hours = (hours × floor − cap) ÷ floor when the product overshoots, else 0. The leftover clock is not extra NEW screens. It is the original job running long under a lid they wrote. The door for those hours is a change-order — extra hours × floor on that card — not a quiet gift.

20 hours at $90 vs a $1,500 cap

Preset: 20 hours. Floor $90. Cap $1,500. 20 × $90 = $1,800. min($1,800, $1,500) = $1,500 billed. $300 leftover ÷ $90 = 3.33 hours unpaid. Those 3.33 hours are still on the calendar. They are not in the invoice. They stay unpaid unless they open a change-order for them.

Implied hourly under the cap is $1,500 ÷ 20 = $75. That is below the $90 floor you already built. The lid did not “include a buffer.” It cut the rate.

Hours stay under the cap

Preset: 15 hours, same $90, same $1,500 lid. 15 × $90 = $1,350. min($1,350, $1,500) = $1,350. Unpaid hours: 0. The cap does not raise the bill. It only bites when hours × floor would have gone past it. A not-to-exceed is not a guaranteed $1,500.

You were going to eat the overrun

Preset: same 20 hours, same $1,500 cap. Eating 3.33 hours does not make the PO easier. It trains the next lid. Name the unpaid hours, or give them away on purpose — do not pretend the $300 was a 10% courtesy.

This card is not the other money cards

There is no tiny inbound offer and no smallest-block N. A $40 tweak with no live quote is the minimum-fee card: minimum = max(their offer, N hours × floor). Default N is a 1-hour worked example they can change. That is a floor under a small ask. This card is a ceiling over a real job. max() and min() are not the same comparison.

There is no uncapped quote here. Hours × floor with no lid — plus a buffer you type — lives on quote a project. If they have not named a cap, stay there. If they named a ceiling after (or instead of) that quote, come back here and type the lid.

They did not add extra NEW hours. Extra screens, extra round, extra week on a live quote is the change-order add-on: extra = those new hours × floor; new total = original quote + that product. This page’s leftover 3.33 hours are the original clock overflowing a cap, not new scope. The change-order card is the door once they agree those hours are extra. Do not start them inside the lid.

The calendar is not the fight. Same hours squeezed into Friday is the rush-job card. A not-to-exceed with a normal deadline is still a lid. Price the cap first; rush only if they also stole the days.

If you do not trust the hourly floor yet, rebuild it on how to set a freelance rate — income, billable hours, tax buffer you set — then come back and type hours, floor, and cap.

Send the sentence before the hours overflow

Name the hours. Name the floor product. Name the cap. Name billed. Name the unpaid hours. Copy from the card so the dollars match.

Skip guilt, fake scarcity, and “industry standard NTE.” Those lines turn a lid into a lecture. If the brief is actually a new project with no ceiling, stop using this card and build a number on quote a project. If the leftover hours are extra NEW screens, name them on change-order before you work them.

This is planning math, not a contract

Educational only — not legal, tax, or collections advice. We do not invent a required 10% NTE buffer, a statutory cap fee, marketplace not-to-exceed rules, or a 50-state tax engine. Confirm live terms in whatever agreement you already use. If you need an enforceable cap or change clause, a lawyer in your jurisdiction writes it before hours run long. Typing numbers here does not create one.

The math is: hours you type, hourly floor, cap they named, hours × floor, billed = min(that product, the cap), unpaid hours when the product overshoots, implied hourly under the cap, one email-sized sentence. USD labels on this page; currency and tax buffer live on the hub.

Rate calculator Quote a project (no cap) Tiny job floor Change-order for unpaid hours Set the hourly floor Same hours, they need it Friday

Rebuild the floor on the hub if billable weeks moved. A lid on a live invoice gets a min() on this card. A tiny inbound offer gets a max() on minimum-fee. A real brief with no ceiling still wants a project quote. Leftover hours under a cap become extra NEW hours only after they open a change-order. If the floor itself is still a guess, start on how to set a freelance rate.

FAQ

How do I price a freelance not-to-exceed cap?

Billed = min(hours you type × your hourly floor, the cap they named). If hours × floor is under the cap, you bill hours × floor. If it is over, you bill the cap. Unpaid hours = (hours × floor − cap) ÷ floor. Those leftover hours stay unpaid unless they open a change-order. Planning math, not a contract.

Is a freelance not-to-exceed 10% extra on the quote?

Not on this page. There is no official 10% NTE buffer here, and this card will not invent one. A not-to-exceed is a dollar lid they wrote. Billed is the smaller of hours × floor and that lid. A percent of the quote is not the math.

What if hours × floor is under the not-to-exceed cap?

Then billed is hours × floor and unpaid hours are 0. The cap does not raise the invoice. It only bites when hours × floor would have gone past it.

What if the job runs past the not-to-exceed cap?

You still bill the cap. The leftover hours are unpaid on this invoice. Worked example: 20 hours × $90 = $1,800 vs a $1,500 cap → billed $1,500, 3.33 hours unpaid. The door for those hours is a change-order — extra NEW hours × floor — not a quiet gift and not a 10% cushion.

Is a not-to-exceed the same as a minimum fee, a project quote, a change order, or a rush job?

No. Minimum fee = a tiny inbound offer vs N hours × floor, using max(). Project quote = hours × floor with no cap. Change order = extra NEW hours after the quote. Rush = same hours, fewer days. This card is a lid on the original hours: billed = min(hours × floor, cap).

Is this not-to-exceed math a contract, tax engine, or legal advice?

No. Educational planning only — not legal, tax, or collections advice. USD labels here so the arithmetic is readable. Set live currency and a tax buffer on the hub. This page does not clone a 50-state tax table. Typing numbers here does not create a cap clause.