Retainer
Pays a share of recurring revenue. Runs on every closed deal, as it closes.
Only counts deals where engagement type is retainer.
| Attainment | Pays |
|---|---|
| 0% and above | 5% of recurring revenue |
An agency sells three things that behave nothing alike. A retainer recurs for as long as the client stays. A project bills once and consumes delivery capacity. A referral costs almost nothing to fulfil. Paying one commission percentage across all three is the default because it is easy to write down, and it is wrong for at least two of them.
The question is not what percentage to pay. It is how many percentages there are, and what each one is attached to.
Retainers are recurring and their value is in duration. The design question is whether commission pays once at signing or continues while the client stays.
Projects are one-off and margin varies with delivery. A percentage of project value works, and often needs to scale with size because a larger project is not proportionally harder to sell.
Referrals carry high margin and roughly constant effort. A percentage rewards the size of a deal the agency did not have to win, which is why a flat fee per referral usually fits better.
Three revenue types, three structures, one plan.
An account lead closes a $12,000 monthly retainer, an $80,000 project, and three referrals. Compare a single 6 percent rate on everything against a plan with a structure per revenue type.
| Revenue | Amount | Flat 6 percent | Per-type structure |
|---|---|---|---|
| Retainer, first month | $12,000 | $720 | $600 at 5 percent |
| Project | $80,000 | $4,800 | $6,300 tiered to 9 percent above $50,000 |
| Referrals, three | $9,000 | $540 | $1,500 at $500 flat each |
| Total | $101,000 | $6,060 | $8,400 |
The totals differ, but the composition matters more than the total. Under the flat rate the project, which is the hardest sale and the one that consumes delivery capacity, produces four fifths of the payout by accident of size. The referrals, which took three introductions, pay $540.
Under the per-type structure each line is paid for what it actually is, and the numbers can be tuned independently. Raising referral incentives no longer requires touching project economics.
Projects and referrals are settled by picking a number. Retainers involve a real design choice, because they are the only revenue type with a lifespan.
Paying commission on the first month only is simple and cheap, and it pays for signing the client. It pays nothing for the far harder work of keeping them, which for most agencies is where the economics actually live.
Paying every month for the life of the retainer aligns the account lead with retention, and it accumulates. A book of thirty retainers generates commission every month regardless of new business, which is either a healthy annuity for a long-tenured lead or an uncontrolled cost, depending on how it was modelled.
The common middle is a higher rate in month one and a lower ongoing rate afterwards, which pays for both behaviours and keeps the tail affordable. Whichever is chosen, the plan should state what happens when a retainer is paused, resized, or transferred to a different lead, because all three happen and none resolve themselves.
A missing revenue type pays nothing rather than defaulting. Rules with conditions are filters. A deal whose engagement type is blank, misspelled, or newly invented matches no rule and earns no commission, silently. Every new service line an agency launches is a chance to create revenue the plan does not recognise.
Flat referral fees need a definition of a referral. A percentage is self-limiting; a flat fee is not. If a referral is worth $500 regardless of size, the plan needs to say what qualifies, whether a referral that does not close still counts, and what happens when two people claim the same introduction.
Retainer changes are compensation events. Resizing a retainer from $12,000 to $8,000 changes ongoing commission from that point. If the change is backdated in the finance system, it changes commission already paid. Agencies that backdate contract changes routinely should decide in advance whether commission follows.
Three rules in one plan, each with a condition on the engagement type field. Two pay percentages, one on recurring revenue and one tiered on project value, and the third pays a flat amount per referral. They share a plan and a statement, so a mixed month resolves without anyone splitting deals by hand.
A fourth service line is a fourth rule rather than a new plan. Before adopting it, run a closed month through and check that every deal matched exactly one rule: the failure mode here is not a wrong rate, it is a deal that quietly matched nothing.
This plan has 3 rules, all in a single config.
Pays a share of recurring revenue. Runs on every closed deal, as it closes.
Only counts deals where engagement type is retainer.
| Attainment | Pays |
|---|---|
| 0% and above | 5% of recurring revenue |
Pays a share of project value, with the rate chosen by the deal's project value. Runs on every closed deal, as it closes.
Only counts deals where engagement type is project.
| Deal value | Pays |
|---|---|
| $0 to $50,000 | 6% of project value |
| $50,000 and above | 9% of project value |
Each band pays its own rate on the portion that falls inside it.
Pays a fixed amount per qualifying deal rather than a percentage. Runs on every closed deal, as it closes.
Only counts deals where engagement type is referral.
| Per qualifying deal | Pays |
|---|---|
| $0 and above | $500 flat |
This is the whole plan. Send it to POST /v1/plans and it is live; change a rate and re-send it to ship a revision.
curl -X POST https://api.compcode.ai/v1/plans \
-H "Authorization: Bearer $COMPCODE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Agency Comp 2026",
"effectiveStart": "2026-01-01",
"config": {
"rules": [
{
"name": "Retainer",
"measure": "recurring_revenue",
"executionPhase": "per_deal",
"attainmentPeriod": "monthly",
"dealConditions": [
{
"field": "engagement_type",
"operator": "equals",
"value": "retainer"
}
],
"tierBy": "attainment",
"tierMode": "full_rate",
"tiers": [
{
"minThreshold": 0,
"rate": 0.05
}
]
},
{
"name": "Project",
"measure": "project_value",
"executionPhase": "per_deal",
"attainmentPeriod": "quarterly",
"dealConditions": [
{
"field": "engagement_type",
"operator": "equals",
"value": "project"
}
],
"tierBy": "value",
"tierValueField": "project_value",
"tierMode": "marginal",
"tiers": [
{
"minThreshold": 0,
"rate": 0.06
},
{
"minThreshold": 50000,
"rate": 0.09
}
]
},
{
"name": "Referral Bonus",
"measure": "closed_won_revenue",
"executionPhase": "per_deal",
"attainmentPeriod": "quarterly",
"dealConditions": [
{
"field": "engagement_type",
"operator": "equals",
"value": "referral"
}
],
"tierBy": "value",
"tierValueField": "closed_won_revenue",
"tierMode": "full_rate",
"tiers": [
{
"minThreshold": 0,
"flatAmount": 500
}
]
}
]
}
}'
Connect your CRM, create the plan with one call, and simulate before anyone gets paid.
Start free →