How wrong are spend-based GHG estimates? We measured it
We tested EXIOBASE, Open CEDA and USEEIO against 7,040 EPDs. Half the spend-based estimates were off by more than a factor of 2.
Robin Dierckx10 min read
Key finding. In our test, half of the spend-based estimates were off by more than a factor of 2, and one in ten by a factor of 6 or more. We checked three widely used spend libraries against 7,040 product footprints, almost all EPDs, of construction products, furniture and lighting.
What is a spend-based estimate? It turns money into emissions: what you paid, times an average emission factor per euro for the sector you bought from. EUR 10,000 of cement times the cement industry's kg CO2e per euro gives the cement's emissions. It needs no quantities, which is why so many scope 3 inventories start there. Its blind spot: the factor is an average over a whole industry, so it knows what you paid, not what you bought. Spend-based vs activity-based factors, explained.
The better route is often already in your system. Many procurement exports carry quantities next to the amounts. Match them on activity data instead: send your raw export, no cleaning needed.
The test: 7,040 products, three spend libraries#
A spend-based estimate is fast. But how far is it from the footprint of the product you actually bought? An EPD (Environmental Product Declaration) answers that for one product, so we used EPDs as the yardstick.
- We took 7,040 product footprints (6,873 EPDs and 167 generic product datasets) in 24 product classes: cement, concrete, steel, aluminium, insulation, plasterboard, glass, bricks, tiles, timber, wood panels, paint, mortar, asphalt, cables, luminaires, furniture and carpet. We gave each a price, in one of two ways:
- Method 1: the official EU average factory-gate price of its product class, for all 7,040.
- Method 2: the real price of that exact product, found by searching shops and price lists, for 54 products.
- We computed each product's emissions with a spend-based factor: price times the factor of the matching sector, in three widely used libraries (EXIOBASE, Open CEDA and USEEIO).
- We compared that estimate with the EPD for the same quantity, cradle-to-gate (modules A1 to A3) on both sides, and summarised the error in two numbers:
- k50, the median error: half of the estimates fall within a factor k50 of the EPD.
- k90, the 90th percentile: 9 estimates in 10 fall within a factor k90; the last 1 in 10 is further off.
A k of 2 means "no more than twice too high and no less than half". The factor works the same in both directions, so being 2 times too high and 2 times too low count as the same error.
The results: a factor of 2, and a long tail#
On average, a spend-based estimate has a k50 of 2.1 and a k90 of 6.0: half of your lines are off by more than a factor of 2, and 1 in 10 by a factor of 6 or more. Each library is tested with the price it was built for (see Method 1 and Method 2 below).
| Library | Price used | Products | k50 | k90 | Half of your lines are at least | 1 line in 10 is more than |
|---|---|---|---|---|---|---|
| EXIOBASE | Method 1: EU factory-gate price | 7,040 | 2.5 | 6.4 | 146% too high or 59% too low | 6.4 times too high, or 84% too low |
| Open CEDA | Method 1: EU factory-gate price | 7,040 | 2.3 | 7.2 | 125% too high or 56% too low | 7.2 times too high, or 86% too low |
| USEEIO | Method 2: real shop price | 42 | 1.6 | 4.5 | 64% too high or 39% too low | 4.5 times too high, or 78% too low |
| Average | 2.1 | 6.0 | 112% too high or 53% too low | 6.0 times too high, or 83% too low |
Worse, the errors lean one way. With factory-gate prices, EXIOBASE comes out below the EPD for 71% of products and Open CEDA for 61%: on these materials, both libraries tend to underestimate. USEEIO with shop prices shows no lean (52% below, 48% above). A lean matters more than the spread: random errors partly cancel when you add up many lines, a lean does not.
Method 1: the EU average factory-gate price (EXIOBASE and Open CEDA)#
With one official average price per product class, EXIOBASE has a k50 of 2.5 and a k90 of 6.4 on 7,040 products, and Open CEDA 2.3 and 7.2.
How it works. Eurostat's PRODCOM survey reports, for every industrial product code, the value and the quantity of what EU factories sold. Value divided by quantity is the average factory-gate price. We used the EU27 figures for 2023 and pooled the codes of each class, weighted by volume. Every product in a class gets the same price:
| Product class | Average factory-gate price, EU27 2023 |
|---|---|
| Cement | EUR 0.12 per kg |
| Ready-mix concrete | EUR 0.036 per kg |
| Steel rebar | EUR 0.64 per kg |
| Paint and coatings | EUR 2.04 per kg |
| Plasterboard | EUR 2.68 per m2 |
| Sawn timber | EUR 252 per m3 |
| Luminaires | EUR 46 per piece |
| Furniture | EUR 108 per piece |
Why these two libraries. EXIOBASE and Open CEDA are built on producer prices, the price at the factory gate before transport and trade margins. A factory-gate price is the matching input. EXIOBASE factors are in 2019 euros, so we brought the 2023 price back to 2019 with Eurostat's producer price index (how to deflate a spend factor). Open CEDA factors are per 2023 US dollar, converted to euros.
An example. A CEM III/B cement EPD declares 0.353 kg CO2e per kg. One kg costs EUR 0.120 in 2023, or EUR 0.076 in 2019 euros. The EXIOBASE cement sector emits 1.81 kg CO2e per euro, so the estimate is 1.81 × 0.076 = 0.138 kg CO2e per kg. That is 2.6 times below the EPD.
What we found.
- Heavy materials are underestimated. Cement, steel, flat glass and mortar carry more carbon per euro than the sector average, so a spend estimate comes out low. Flat glass is the extreme: the typical flat glass product comes out 12 times too low.
- Some light or cheap products are overestimated. Asphalt, aggregates, bricks and luminaires come out high.
- One price per class hides the price spread. A premium product and a basic one get the same price here, so Method 1 measures how much the carbon varies between products, not how much the price does. Method 2 tests that.
Method 2: the product's own shop price (USEEIO)#
With the price a buyer actually pays for that exact product, USEEIO has a k50 of 1.6 and a k90 of 4.5 on 42 products, with no lean either way.
How it works. For 385 EPD products, balanced across product classes, we searched the web for a public price of that manufacturer's product: DIY chains, builders' merchants, manufacturers' web shops and published price lists. We accepted only the same manufacturer and product line, never a competitor's. We kept 54 products with a usable public price, and USEEIO has a sector for 42 of them. Each price is converted to euros, VAT is removed, and the price is divided by the quantity it buys (a 25 kg bag, a 2.6 m2 board, one lamp).
Why this library. USEEIO is built on purchaser prices, the price a buyer pays including transport and trade margins. A shop price is the matching input. A spend line in your ledger is also a purchaser price.
Two examples.
- An OSB board, close. An 18 mm SmartPly MAX board costs EUR 32.48 before VAT at an Irish builders' merchant, or EUR 606 per m3. The USEEIO wood panel sector emits 0.241 kg CO2e per euro. For one m3 the estimate is 146 kg CO2e, against 156 kg in the EPD: 7% too low.
- A lamp, far off. A Steinel RS 16 ceiling light costs EUR 38.35 at a German DIY chain, or EUR 32.23 before VAT. The USEEIO lighting sector gives 0.132 × 32.23 = 4.3 kg CO2e. The EPD declares 40.3 kg, so the estimate is 9.5 times too low. Lighting is one of the most scattered classes: in Method 1 as well, one luminaire in ten is off by more than 16 times with EXIOBASE.
What we found.
- Shop prices are far above factory prices. The median product sells at 3.6 times its class's factory-gate price. One product in ten sells at more than 8 times.
- Expensive products carry only slightly more carbon. Within a class, price and carbon move together only weakly (rank correlation 0.29). A product's own price helps, but much less than you might expect.
- The price basis matters more than the price. USEEIO fed the factory-gate class price instead of the shop price falls to a k50 of 3.6 and comes out too low for 98% of products.
Watch out. Do not feed shop prices to a factory-price library. On the same 54 products with their shop prices, EXIOBASE comes out too high for 80% of them (k90 8.9), and Open CEDA for 70% (k90 19). Your invoice amounts are shop prices. With EXIOBASE or Open CEDA, remove trade and transport margins first, or expect a systematic overestimate. Price basis, explained.
What to do about it#
A spend-based line is an order of magnitude, not a measurement: usually within a factor of 2, and one line in ten off by 5 to 7 times or more.
- Match the price basis to the library. Your invoices are purchaser prices. USEEIO takes them as they are. EXIOBASE and Open CEDA expect factory-gate prices, so remove trade and transport margins first.
- Replace your largest lines with physical data. The mass, volume or count of what you bought, matched to a physical factor or to the supplier's EPD, does better, and our matching agent does it on your raw export (see below).
The limits of this test#
- Scope. 24 classes of construction products, furniture, lighting and carpet. Services, food, energy and transport were not tested.
- The EPD is treated as the truth. EPDs have their own uncertainty, and their scope and method differ between programmes.
- Method 1 uses one price per class. It cannot tell a premium product from a basic one. This means real errors are probably higher: on the Method 2 products, giving EXIOBASE each product's own price, with the typical shop margin removed, raised its k90 from 4.0 to 4.6.
- Method 2 is a small sample. 42 products for USEEIO, tilted toward products sold in shops, since most industrial products have no public price. 23 of the 54 prices come from search-result snippets. VAT rates and exchange rates are approximate, which moves a price by a few percent against errors of a factor of 2 or more.
- Large classes weigh more. Giving every class the same weight gives EXIOBASE 2.5 and 7.0, Open CEDA 2.4 and 7.8: the same picture.
Use the quantities you already have#
A spend-based estimate is the fallback for when you know nothing but the amount. Most procurement exports know more: tonnes of cement, square metres of plasterboard, numbers of chairs, litres of diesel, in a column next to the amount or buried in the line description.
Our matching agent reads that export as it is:
- No cleaning, no template. Send the raw file from your ERP or accounting tool, with its own column names, languages and abbreviations.
- Activity data first. Each line is matched on what was bought, with its quantity and unit, to an activity-based factor. A spend factor is used only when a line carries nothing but an amount.
- Every match cited. Each line comes back with its factor, library, year, unit and licence, and the reason for the choice.
Send us your raw procurement export and get every line back with a cited emission factor. No account needed.