Cost Plus vs TNMM: Gross Mark-Up vs Net Margin Testing
Cost Plus and TNMM both use the cost base, but they answer different questions. The mechanics of each, the risk profile of each, and the documentation that survives audit.
Cost Plus and TNMM look like the same method wearing different clothes: both start from the tested party’s cost, both compare against a mark-up or margin reference, and both are one-sided. They are not the same method. Cost Plus prices the transaction — cost base plus a benchmarked mark-up is the arm’s length price. TNMM tests the profitability — is the tested party’s net margin inside the range earned by comparable companies. The direction of travel and the evidence each needs are different, and the choice between them has real consequences in examination.
The mechanics, side by side
| Cost Plus | TNMM | |
|---|---|---|
| Question answered | What should the price be? | Is the booked margin arm’s length? |
| Output | an arm’s length price | a position inside a range |
| Reference | a benchmarked mark-up (from comparables or a pool) | the IQR of the PLI across the comparable pool |
| Cost base role | the literal base of the price | the denominator of the PLI (OP/OC, NCP) |
| Adjustment target | the mark-up, for comparability differences | the PLI, for differences that materially affect it |
| Typical tested party | contract manufacturer, routine service provider | service provider, distributor, contract R&D |
| Data needed | cost base detail + mark-up comparables | the tested party’s PLI + the pool’s PLI distribution |
Why the choice matters
Cost Plus fixes the price first. The file computes: cost base ₹X, benchmarked mark-up Y%, arm’s length price = X × (1 + Y). If the booked price is below that, the adjustment is mechanical — and the size of the adjustment is driven by the cost base definition. An item in the cost base that should not be there (a captive overhead allocation, an intercompany charge, extraordinary cost) inflates the base and the resulting price. The TPO’s favourite attack on a cost-plus file is the cost base, not the mark-up.
TNMM tests the outcome. The file computes the tested party’s OP/OC and asks whether it sits inside the pool’s IQR. The cost base still matters — it is the denominator of the PLI — but the failure mode is different: a wrong PLI, a contaminated pool, or a tested-party definition that does not match the comparables. TNMM’s defence lives in the Accept-Reject matrix and the PLI choice; Cost Plus’s defence lives in the cost-base schedule.
The overlap and the trap
The trap is using both and letting them disagree. A common pattern:
- Price the controlled transaction at cost plus a mark-up taken from a comparable set (Cost Plus logic).
- Then run TNMM on the same tested party with the same pool and find the resulting OP/OC is outside the pool’s IQR.
The file now contains two results that contradict each other, and the TPO gets to pick the one it likes. The two methods only reconcile when:
- the cost base definition in the cost-plus computation matches the operating cost definition behind the TNMM PLI (line by line),
- the mark-up reference and the pool come from the same comparables,
- and the file states which method is the declared method and treats the other as a consistency check — not as an independent second opinion.
Risk profile of each
| Risk | Cost Plus | TNMM |
|---|---|---|
| Cost base dispute | High — every line examinable | Medium — denominator dispute, but inside the PLI |
| Mark-up / range dispute | Medium | High — pool quality, PLI, period |
| Price-vs-margin mismatch | n/a (price method) | Possible if the price is separately set |
| Works when | cost capture is clean and complete | pool is solid and the PLI isolates the routine return |
| Fails when | costs are allocated, blended or incomplete | the pool is thin, mixed or the PLI is wrong |
Worked contrast on the same data
A contract service provider: revenue ₹500 cr, operating cost ₹420 cr, operating profit ₹80 cr. OP/OC = 19.0%.
Cost Plus view. Cost base (defined: employee cost + direct expenses + allocated overheads of ₹30 cr) = ₹420 cr. Comparable contract providers earn a cost mark-up of 18%–24% (median 21%). Arm’s length revenue = 420 × 1.21 = ₹508.2 cr. The booked ₹500 cr is slightly below → adjustment of ₹8.2 cr.
TNMM view. Same comparable pool, OP/OC IQR 17.5%–23.1%. Booked OP/OC 19.0% is inside the range → no adjustment.
Same pool, same company, different verdicts. The difference is the allocated-overhead line inside the cost base: it raises the base (helping Cost Plus) and it is already inside the operating cost that OP/OC divides by (neutral in TNMM). The file must decide once, on the cost definition, and carry that decision consistently.
Documentation that survives
- One cost definition, used everywhere — cost-plus base, TNMM denominator, and the financials in the Local File all from the same schedule.
- The declared method named in the Local File (Rule 10D block on the method), with the other method shown as a cross-check.
- The mark-up reference and the pool from the same Accept-Reject matrix — one screening, two uses, documented as such.
- The variance analysis where the two methods give different results: what drives the gap (the cost base line, the PLI, the period) and why the declared method’s answer is the arm’s length one.
See also
Run the screens as a study, not a spreadsheet
Quartyl applies the method, PLI and screening steps above as a pipeline — and keeps a documented reason for every exclusion.
Related docs
Cost Plus Method: Cost Base, Mark-Up and Common Mistakes (2026)
The cost plus method for Indian transfer pricing — building the cost base, what belongs in it, mark-up logic, the tested party profile, comparability issues and a worked example.
Read docTNMM in India: How to Select the Right PLI
How to select the right Profit Level Indicator (PLI) for TNMM benchmarking in India — PLI options, decision rules and a worked OP/OC example.
Read doc