Self-Serve
Pays a share of closed-won revenue. Runs on every closed deal, as it closes.
Only counts deals where lead source is plg.
| Attainment | Pays |
|---|---|
| 0% and above | 4% of closed-won revenue |
In a product-led business the pipeline contains two very different things. Some revenue arrived because the product worked and a customer upgraded themselves. Some arrived because a rep found an account, built a case, and closed it. A single commission rate treats those as the same event, which overpays for the first and underpays for the second.
Splitting a product-led plan means answering two things that are easy to conflate.
What rate does each motion earn? Sales-assisted revenue costs more to produce and usually earns a full rate. Self-serve revenue that a rep expanded or converted earns something lower. Self-serve revenue a rep never touched may earn nothing at all.
What counts toward quota? Separately, does self-serve revenue contribute to attainment, and at what value? This is the question most plans skip, and it is where the distortion comes from.
The two are independent. A plan can pay a reduced rate on self-serve revenue while still crediting it fully toward quota, and that combination produces an outcome most teams do not intend.
Two reps, both with a $500,000 quarterly quota. Rep A works a territory with heavy self-serve adoption; Rep B works enterprise accounts with almost none. Both close $600,000. The plan pays 4 percent on self-serve and 10 percent on sales-assisted, and credits all revenue toward quota at full value.
| Rep A | Rep B | |
|---|---|---|
| Self-serve revenue | $400,000 | $50,000 |
| Sales-assisted revenue | $200,000 | $550,000 |
| Attainment, all revenue counted | 120 percent | 120 percent |
| Commission earned | $36,000 | $57,000 |
Both reps show 120 percent attainment. Both appear on the same line of the leaderboard, both reach the same accelerator, and one earned 58 percent more than the other. Rep A's territory made their quota easy and their earnings poor at the same time.
If self-serve revenue is genuinely lower-effort, the honest fix is to credit it toward quota at a reduced value as well, so attainment reflects the work rather than the total. Otherwise attainment stops being a comparable measure across territories, and every downstream mechanism built on it inherits the distortion.
Splitting the pipeline needs a field that already separates the two motions. Lead source is the usual one; a product-written flag such as self-serve signup is better where it exists, because it is set by the system that actually knows.
Each rule then carries a condition and only counts deals matching it. Both rules live in the same plan, so a rep's statement shows one total assembled from two clearly labelled components rather than arriving from two systems. Crucially, a deal matches exactly the rules whose conditions it satisfies, so mixed months work without anyone sorting deals by hand.
The routing is only as good as the field. Which is the next problem.
A stale source field pays the wrong rate silently. This is the dominant failure in product-led plans. The rules are right, the field is not. A deal that began as a self-serve trial and became a sales-assisted enterprise contract pays the self-serve rate if nobody updated the source, and nothing about the payout looks wrong. Audit the field before trusting the plan, and again whenever routing rules change.
Deals that match no rule pay nothing, quietly. Conditions are filters, so a deal whose source value is empty or unexpected matches neither rule and produces no commission. It does not error. Reps find these; it is better to find them first by checking that every closed deal in a period matched at least one rule.
Reclassification moves money after the fact. Correcting a deal's source changes which rule applies and therefore what was earned, including for periods already paid. That is the correct behaviour and it means source data corrections are compensation events, which is worth saying out loud to whoever maintains the CRM.
Two rules in one plan, each with a condition on the field that distinguishes the motion. The self-serve rule pays a reduced flat rate; the sales-assisted rule carries the full rate and the accelerator. Both measure the same revenue field and share a quarterly attainment period.
Adding a third motion, partner-sourced for example, is a third rule with its own condition rather than a restructure. Before switching, run the previous quarter through it and check two things: that every closed deal matched a rule, and how far apart the resulting attainment figures sit across territories.
This plan has 2 rules, all in a single config.
Pays a share of closed-won revenue. Runs on every closed deal, as it closes.
Only counts deals where lead source is plg.
| Attainment | Pays |
|---|---|
| 0% and above | 4% of closed-won revenue |
Pays a share of closed-won revenue, with the rate chosen by quarterly quota attainment. Runs on every closed deal, as it closes.
Only counts deals where lead source is one of outbound or ae_sourced.
| Attainment | Pays |
|---|---|
| 0% to 100% | 10% of closed-won revenue |
| 100% and above | 14% of closed-won revenue |
Crossing a tier re-rates the whole quarter at the higher rate, not just the revenue above it.
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": "PLG + Sales-Assisted 2026",
"effectiveStart": "2026-01-01",
"config": {
"rules": [
{
"name": "Self-Serve",
"measure": "closed_won_revenue",
"executionPhase": "per_deal",
"attainmentPeriod": "quarterly",
"dealConditions": [
{
"field": "lead_source",
"operator": "equals",
"value": "plg"
}
],
"tierBy": "attainment",
"tierMode": "full_rate",
"tiers": [
{
"minThreshold": 0,
"rate": 0.04
}
]
},
{
"name": "Sales-Assisted",
"measure": "closed_won_revenue",
"executionPhase": "per_deal",
"attainmentPeriod": "quarterly",
"dealConditions": [
{
"field": "lead_source",
"operator": "in",
"value": [
"outbound",
"ae_sourced"
]
}
],
"tierBy": "attainment",
"tierMode": "full_rate",
"tiers": [
{
"minThreshold": 0,
"rate": 0.1
},
{
"minThreshold": 1,
"rate": 0.14
}
]
}
]
}
}'
Connect your CRM, create the plan with one call, and simulate before anyone gets paid.
Start free →