September 3, 2026 · 8 min read
Quote the project, then quote every change
Someone in consulting asked how you look ahead at revenue when the retainer bill keeps moving. The answer is a contract that records every agreed change as its own order — and a short list of rules you have to write before it can.
Under a post about Revenue Hub this week, someone in consulting described a shape I recognise from my own business. You quote a one-time project. It goes well, and it rolls into a retainer sized by a range — an expected band of work and revenue each month — and then the monthly bill does what monthly bills on that kind of arrangement do, which is move around. Their point was that this makes it hard to look ahead, at revenue and at who is going to be available for what. I have felt that, and I think the reason is more specific than retainers being variable, so it is worth working through where the number actually goes.
Where the number goes
Take the engagement from the top. The proposal gets accepted and a quote is written for the project. That quote carries one figure, and it is the last time in the life of the engagement that the commercial record and the actual arrangement are the same thing. From there the project finishes, the retainer starts, scope gets added on a call, something gets dropped on another, the band gets widened in an email nobody would think to call an amendment, and each month an invoice goes out for what actually happened. The invoice is true. The quote is true, for the moment it was signed. Nothing in between recorded what changed, so when you try to look forward, the only two numbers available are the original quote and last month's invoice, and neither of them is what you and the client currently agree to.
So it is not really a variability problem. A retainer that moves around is fine as long as something records the moves. What most firms have is a snapshot at the start and a receipt at the end of every month, and a great deal of judgement in between that lives in someone's head — usually the person who runs the account, which is likely why it has worked so far and also why it stops working the month they are on holiday.
The motion
Here is the sequence I would run it on. I have watched every step of it happen on a live portal, which is the next section.
| Step | What happens | What the revenue view reads |
|---|---|---|
| The project is agreed | The deal closes and the original quote is written for the project, with the retainer line on it if you already know its shape | Nothing yet. The deal is process, not revenue |
| The quote is signed | A contract is created from the accepted quote. The contract's effective date is set on the quote, not afterwards | Committed revenue: the contract as signed |
| The engagement changes | A change quote is raised against the contract — the band widened, a recurring service added or dropped, a quantity moved — and the client signs it | Still the contract as it stood. A pending change is not revenue |
| The change is accepted | The contract updates itself, and an order is created carrying only the lines that changed, associated to both the quote and the contract | Committed revenue moves to the new state. The order is the record of the move |
| Billing follows | Invoices bill at the new state. An invoice that was already issued for the old state is voided | Billed revenue: the invoices, which now reconcile to the contract |
The part the question was really about is the order. Each accepted change produces one, and it carries only the difference — so a month where the retainer widened by two thousand shows up as an order for two thousand, dated when the client agreed to it, rather than as a larger invoice somebody has to explain in the quarterly review. And because every one of those records is an ordinary CRM record, a workflow can fire the moment an order exists and send finance the change in whatever shape they keep their books in, effective date and deltas included. That is what was missing from the arrangement as described: not a better invoice, a record of each change at the moment it was agreed.
What I watched it do
On 23 August I ran the change path end to end in a client's sandbox, as the buyer, with nobody on the selling side touching anything. A signed quote had created the contract. A change was raised against it — quantity fifteen to seventeen on one line — routed to a change quote and e-signed. On acceptance the platform updated the contract itself, annual value from 1,400.04 to 1,520.04, effective at the renewal boundary. It created a new order associated to both the quote and the contract, carrying only the delta: minus fifteen, plus seventeen. It voided the invoice that was now stale so the renewal bills at the new quantities. And three other open changes against the same contract were cancelled automatically when that one was accepted, which is the right behaviour and not one I had to build.
That was a quantity change on a per-seat contract, because that is what the sandbox had. A retainer line going from one band to another is the same change on the same object, and it mints the same order. What it does not cover, and I want to be precise about this because it is the services case: a change quote can only update recurring line items. A one-time phase added mid-engagement is not a change to the contract today. It is a separate quote, and its revenue sits on that quote's order rather than in the contract's history — which is a gap worth knowing before you promise a client one record of everything.
The rules you have to write first
None of this is configuration in the sense of settings. The platform will carry any change you route through it, which means the decisions about what counts as a change are yours, and they were previously left implicit because nothing could hold them. These are the ones I would settle before building.
- What is a change, and what is just a heavy month
- This one decides whether the model works. A widened band, a dropped recurring service, a scope add that changes what recurs: change quote, signed, contract updates, order minted. A one-time phase is a separate quote, for the reason above. A month that simply ran towards the top of the agreed band is not an amendment, and if you treat it as one you will issue thirty change quotes a year and the client will stop signing them. The band itself belongs on the contract as the committed line. Movement within it is billing.
- Direct or signed
- A change can be applied directly by someone with the rights, or sent to the client as a quote for signature. Same effect on the record, completely different position on whether the client agreed. Correcting your own error is direct. A price change is not, however routine it feels. Decide which changes need a signature before anyone has the tooling to skip one.
- Proration
- Explicit on every change, and the preview shows exactly what the contract becomes before anything persists. Decide the default once: a scope change agreed on the twelfth bills from the twelfth, or from the next cycle.
- Who moves a bill date
- Project phases bill on milestones and milestones slip. The billing schedule was generated from dates, so when implementation runs six weeks late someone has to move one, and who is allowed to is a governance decision most firms have never made. Make it, and make it before the first slip.
- The retainer line's term
- A recurring line left to renew automatically with no payment count has no end date. That is true of most retainers and it is honest to state, but it also means the line drops out of any renewal report, so if you want to see the retainer coming up for review, give it a term and let the renewal quote inherit the current state.
- When the clock starts
- The contract's effective date is set on the quote. If your deal closes on a verbal yes and the paper follows, the rule for what date goes on that quote has to exist, because once billing is on the date cannot be moved backwards.
Where it stops today
Change quotes update recurring line items only, so one-time work added mid-engagement lives on its own quote. Quotes built in the new CPQ editor do not yet support one-time discounts, fees, taxes or payment schedules, so a project quote that needs a deposit and a balance is not on this path yet. Milestone billing is not shipped; a phase bills on a date someone sets. And the contracts side is a beta — the endpoint that changes are raised through moved once in August without notice. I would build on it, and I would pin the version I built against and re-check it on a schedule rather than in front of a client.
What you get to see
Expected revenue stops being an estimate made from the last invoice and becomes the contract as it stands, which is a number you and the client both signed. Resource planning reads the same record: the committed band is capacity you have sold, and anything you are holding above it is capacity you are carrying at your own cost, which is worth knowing when the next proposal comes in. And when someone asks how the engagement got from the original quote to this month's bill, the answer is a list of orders, each one a change the client agreed to on a date, rather than the account manager's memory.
The run above was in a sandbox on 23 August 2026, on the Quotes API and the contracts beta as they stood that day. The recurring-only limit on change quotes is HubSpot's own documentation, read on 4 September 2026; an earlier version of this piece said a one-time phase would mint the same order, and it will not. The rules are the part I would actually spend the time on with a client, because the platform will faithfully record whatever your business decides a change is — including a decision you never made.