
Most retainer engagements no longer fit a single billing model. A fractional CRO closes a six-figure deal and earns a commission. A consultant ships a launch and earns a fixed milestone payout. The base retainer is just the floor.
If you have been tracking those payouts in a spreadsheet, you already know the problem. The numbers drift. The client questions the invoice. You spend an hour reconciling something that should have taken five minutes.
RetainerOps now treats milestones and commissions as first-class objects on the package tier. Here is how to set them up and what changes once you do.
Step 1: Choose the right package type
Open Settings → Package Tiers and create a new tier. The form now asks for a type:
- Retainer: hour-based, the classic model
- Milestone: fixed payout when a defined outcome ships
- Commission: percentage of revenue, deal value, or another tracked metric
- Hybrid: any combination of the above on a single tier
The type drives which fields appear next. Pick milestone and you define payout triggers. Pick commission and you define the rule. Pick hybrid and you get both, with a base retainer underneath.
This matters because RetainerOps stores the structure with the tier itself. When you assign that tier to a client, the milestone definitions and commission rules copy across automatically. No re-entry. No drift between what you sold and what you track.
Step 2: Define milestones with clear triggers
Inside a milestone tier, add definitions like:
- Launch complete: $5,000 on delivery
- First paying customer: $2,500 on event
- 30-day retention hit: $1,500 on metric threshold
Each definition holds the payout amount, the trigger description, and optional notes. Once you ship the work, open the client detail page, find the MilestoneCard, and click achieve. The system logs the event, locks the payout amount, and rolls it into revenue.
If the actual payout differs from the default (a negotiated bump, a partial credit) the override field on the achievement record handles it cleanly. The portal shows the effective amount the client owes, not the original default.
Step 3: Set commission rules that compute themselves
Commissions trip up most teams because the math sits in someone's head. RetainerOps stores the rule on the package tier so the math runs on the server, not in a spreadsheet.
A commission rule has three parts: the event type (deal closed, MRR added, milestone hit), the basis (deal value, monthly revenue, custom amount), and the rate (percentage or fixed).
When you log a commission event from the client detail page, the server pulls the rule, computes the payout, and writes the result. You enter the deal value once. The amount appears in the CommissionCard, in the profitability summary, and on the next Excel report.
This is one of the most important shifts in the recent build. Commission amounts are computed server-side from the stored rule. Manual overrides are still possible, but the default math is no longer a human task.
Step 4: Give clients visibility through the portal
The client portal now includes read-only milestone and commission pages. Clients see what was earned, when, and the payout amount in effect.
Two reasons this matters:
- Fewer invoice disputes. The client saw the milestone get marked. They saw the commission event get logged. The invoice line is not a surprise.
- It tightens the engagement. When a client can see the milestone roadmap, the conversation shifts from "what did you do last month" to "what is the next outcome we are hitting."
You do not need to grant separate permissions. If the client has portal access, they see the new pages. If you want to hide a specific item, leave it as a draft definition until you are ready.
Step 5: Pull it all into a report
Generate a client report and the Excel workbook now includes two new sheets: Milestones and Commissions. Each row shows the event, the date, the payout, the override (if any), and the running total.
The profitability summary on the client detail page already factored these in. Total revenue now includes milestoneRevenue and commissionRevenue alongside retainer hours. If a client is on a pure milestone or commission tier with zero hour usage, the math still works. Zero used hours no longer poisons the total.
Why this changes how you sell
Three things shift once the system is set up:
You can quote hybrid packages without fear. A $3,000 base retainer plus a 5% commission on attributed revenue plus a $2,500 launch bonus is no longer a tracking burden. You configure it once and the system holds it.
You can show clients exactly what triggered a payout. No more emails explaining the math. The portal does it.
You can see which engagement type actually pays. Profitability now separates revenue by source. If your commission deals are subsidizing your retainer hours, that becomes visible in a single view.
Where to start
If you already have an active client on a flat retainer, do not migrate them mid-engagement. Wait for the next renewal cycle. For new engagements, build the tier with the right type from the start.
If you are running a fractional or commission-heavy practice and have been resisting RetainerOps because the old hours-first model did not fit, this is the build that changes that. The product is no longer hour-centric. It is engagement-centric.
Open Settings → Package Tiers and try it on one tier. The setup takes ten minutes. The spreadsheet replacement takes about a month off your reconciliation work each quarter.
Have a milestone or commission structure that does not fit cleanly into the current types? Reply to this post or email support. We are watching how teams use the new fields and the model will keep evolving.