
The two numbers most CBAM calculations get wrong
CBAM arithmetic looks simple enough to do in a spreadsheet. Mass, an emissions figure, a price, a couple of factors. Most people who try it get an answer, and the answer looks plausible.
Two of those factors are routinely applied to the wrong thing. Not miscalculated — misplaced. The numbers are right; they are multiplied against the wrong quantity. One of the two inflates the result by roughly twenty times. The other understates it, which is the more dangerous direction.
We know the second one intimately, because it was in our own shipped code before we caught it.
Mistake one: the mark-up rises with the calendar, not with the material
The EU default values in Implementing Regulation (EU) 2025/2621 carry a statutory mark-up. Ask around and you will hear it described as a property of the goods — steel is twenty percent, cement is ten.
It isn't. The mark-up is a property of the reporting year.
| Reporting year | Mark-up on the default value |
|---|---|
| 2026 | +10 % |
| 2027 | +20 % |
| 2028 and later | +30 % |
Same goods, same origin, same production route — the figure rises purely because the calendar moved. The annex publishes three year columns for every row, and they differ only by that factor.
There is exactly one exception, and it is a large one: fertilisers carry a flat 1 %, in every year. Not 10, not 20, not 30. Across the published table that exception covers a few thousand rows, so if you import fertiliser and someone has applied the steel logic to it, your number is out by about a quarter.
The rows where "multiply by 1.2" fails
Here is the detail that makes the shortcut dangerous rather than merely imprecise.
The act does not publish a raw value and leave you to apply the mark-up. It publishes the marked-up figure for each year, and on five rows it compounds the mark-up instead of stepping it.
Those five rows are cement from Angola and Argentina. Where every other row goes ×1.10, ×1.20, ×1.30, these go ×1.10, ×1.21, ×1.331. On a 2028 figure that is a 2.4 % difference — small, and precisely the kind of small that survives review and shows up years later in a correction.
The lesson generalises: read the year's value out of the annex; never derive it. Any process that stores one number and computes the others will be wrong on those rows, and will look right everywhere else.
Mistake two: free allocation reduces the deduction, not your emissions
This is the expensive one, and it is easy to see why people get it wrong.
The phase-out schedule is usually described as "free allocation falls away: 2.5 % is withdrawn in 2026, 5 % in 2027, 10 % in 2028." Those percentages are correct. The natural next step is to multiply your embedded emissions by them — 2.5 % of your carbon is what you pay for in 2026.
That reading is wrong, and it is wrong by a lot. The regulation does not scale your emissions. It scales the benchmark you are allowed to deduct:
Certificates = max(0, M × (SEE − SEFA)), where SEFA = CBAM_y × CSCF_y × BM
- SEE — the specific embedded emissions of your goods (the marked-up default value, on the default path)
- BM — the EU benchmark for that good
- CBAM_y — the remaining free allocation: 0.975 in 2026, 0.95 in 2027, 0.9 in 2028
- CSCF_y — the cross-sectoral correction factor
CBAM_y sits on the benchmark. It shrinks the free amount you may subtract. Your emissions are never touched by it.
What the difference actually costs
Take 100 tonnes of imported steel, CN 7208 51 20, origin Argentina, 2026.
The correct way. The published default value is 2.849 tCO₂e per tonne. The benchmark for that route is 1.37. So the deductible free allocation is 0.975 × 1.0 × 1.37 = 1.33575 tonnes of CO₂e per tonne of goods, and what remains is 2.849 − 1.33575 = 1.51325. Across 100 tonnes that is 151.3 certificates. At the Q2 2026 price of EUR 75.28:
EUR 11,391.75
The wrong way. Multiply the emissions by the withdrawn share: 2.849 × 0.025 = 0.07123 tonnes per tonne, 100 tonnes, same price:
EUR 536.18
The same shipment, the same published inputs, a factor of twenty-one between them — and the wrong method is the one that produces the comforting number.
(One honest caveat: the CSCF for 2026 has not been published by the Commission, so the 1.0 above is an assumption. When the real factor lands, every figure calculated on this basis moves. That is worth knowing before anyone books a provision against it.)
Why the direction of the error matters
If you overstate your obligation you buy certificates you did not need. Unpleasant, recoverable.
Understating is a different category. Under-surrender is penalised at three to five times EUR 100 per tonne of CO₂e (Art. 26(2)), and the penalty is assessed against the shortfall, not against your good intentions. On the example above, an importer who budgeted EUR 536 against a real obligation of EUR 11,392 is short by about 145 certificates — and the exposure that creates is an order of magnitude larger than the sum they thought they owed.
This is also why "we'll refine the number later" is a weaker plan than it sounds. The refinement usually goes upward.
What to check this week
You do not need to redo anyone's arithmetic. Three questions will tell you whether a CBAM figure was built on solid ground.
1. Ask which year's column the emissions figure came from. If the answer is "we took the value and applied twenty percent", the number is derived rather than read — and it is wrong on the compounding rows and on every fertiliser line.
2. Ask what the free-allocation factor was multiplied by. If the answer is "the emissions", the figure is too low, probably by a large multiple. It should have been multiplied by the benchmark.
3. Ask what CSCF was assumed. If nobody can name a value, nobody has thought about it — and the figure will move when the Commission publishes.
None of that requires a consultant. It requires knowing that both factors attach to something specific, and asking what.
A note on getting it wrong
We are not describing these mistakes from a distance. The second one was in our own calculation for a while: we multiplied embedded emissions by the withdrawn share, exactly as described above. The comment that now sits in that part of our code says so in plain language, deliberately, so nobody reintroduces it later.
It survived because it produced numbers that looked reasonable. That is the property that makes this class of error worth writing about — a misplaced factor does not announce itself. It gives you an answer, in the right units, of a believable size. The only way to catch it is to check what each factor is attached to.
This article explains the rules as we read them; it is not legal advice. The default values and their mark-up are set out in Implementing Regulation (EU) 2025/2621, the free-allocation basis in Implementing Regulation (EU) 2025/2620, and the penalty regime in Regulation (EU) 2023/956 as amended. Verify your own position with your customs agent or the competent authority in your member state — in Germany, the DEHSt.