# CBAM Calculator - CBAM Certificate Cost & Default Values (`atlasdata/cbam-cost-calculator-reliable`) Actor

CBAM calculator: estimate EU CBAM certificates and EUR cost per import line (CN code, origin, tonnes) from official default values incl. mark-ups (2025/2621), Column B benchmarks (2025/2620) and quarterly certificate prices. Bundled, versioned data; every result shows its dataset version.

- **URL**: https://apify.com/atlasdata/cbam-cost-calculator-reliable.md
- **Developed by:** [Christian Machon](https://apify.com/atlasdata) (community)
- **Categories:** Business, Developer tools, Automation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 line calculateds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## CBAM Calculator - CBAM Certificate Cost & Default Values

**CBAM calculator: estimate how many EU CBAM certificates an import needs and what they cost in EUR, from the official default values. $1 per 1,000 lines.**

Estimate how many **EU CBAM certificates** an import needs and what they cost in EUR. Give it a CN/TARIC code, a country of origin and the net mass in tonnes. The calculation uses the **official default values**, **CBAM benchmarks** and **quarterly CBAM certificate prices** published by the European Commission.

All official tables are **bundled into the Actor, with their version, source URL, retrieval date and SHA-256 hash**. Runs make no outside web requests, so they are fast (about 1–4 s), cheap, and give the same answer every time. **Every result line shows which dataset version and date it used.**

> ⚠️ **Not legal or tax advice, and not legally binding.** This is an informational estimate based on the default-value method. Only the acts published in the *Official Journal of the European Union* are authentic. The Commission's Excel files state that they are informational. Your real obligation depends on your CBAM declaration, verified actual emissions, any carbon price you can evidence, and your competent authority. Check with a customs or CBAM adviser.

### What it does

For every import line, the Actor:

1. **Finds the default value.** It matches the CN code (longest prefix) in the country's table of Annex I to Implementing Regulation (EU) 2025/2621, as corrected by Implementing Regulation (EU) 2026/1740 (Commission file v2, 6 Aug 2026).
   - If the country has no table, or its value is "–", it uses *"Other countries and territories"*.
   - With `precursorUnknownOrigin` it uses **Annex IV**.
   - The "total" column is used. Indirect emissions are N/A for steel, aluminium and hydrogen.
2. **Adds the phase-in mark-up** printed in the Annex:
   - cement, iron & steel, aluminium and hydrogen: **10% / 20% / 30%** for 2026 / 2027 / 2028+;
   - fertilisers: **1%**.
3. **Subtracts the free allocation adjustment.** This is the CBAM factor × CSCF × the **Column B benchmark** (point 5 of the Annex to Implementing Reg. (EU) 2025/2620), for the production route of the default-value row.
   - CBAM factor: 0.975 in 2026, 0.95 in 2027, 0.90 in 2028 … 0 in 2034.
   - CSCF: 100% for 2026–2030 (Implementing Decision (EU) 2026/1862).
4. **Multiplies by tonnes**, and optionally deducts the carbon price paid in the country of origin.
5. **Prices the certificates** at the **official quarterly price** for the quarter of the import date. You can also supply your own price.
   - If the quarter's price has not been published yet, the Actor uses the latest published price and sets `certificatePriceIsEstimate: true`.

**Conservative choices.** These are always explained in `notes`:

- A code that is less specific than the table uses the **highest** sub-code default value.
- An ambiguous benchmark (several routes) uses the **lowest** benchmark.

**Special statuses:**

| Status | Meaning |
|---|---|
| `exempt_country` | Origin in IS, LI, NO or CH (Annex III of 2023/956). |
| `eu_origin` | Origin in an EU Member State. |
| `not_cbam_good` | The code is not in the CBAM tables. The note suggests valid 2026 CN codes where the heading has CBAM goods. |
| `unsupported` | Electricity (2716). |
| `error` | Invalid input. **Not charged.** |

### Input

| Field | Type | Description |
|---|---|---|
| `lines` | string\[] | `"code|country|tonnes|importDate"`, e.g. `"7208 51 20|TR|100"`. The date is optional. |
| `items` | object\[] | `{id, code, country, tonnes, importDate, productionRoute, carbonPricePaidEurPerTco2e, precursorUnknownOrigin}` |
| `country` | string | The default origin for lines without one. Accepts ISO2, ISO3 or an English name. |
| `importDate` | YYYY-MM-DD | The default import date. Defaults to today. It sets the year (mark-up, CBAM factor) and the price quarter. |
| `certificatePriceEur` | number | Overrides the certificate price. |
| `productionRoute` | A–L | Overrides the benchmark route. A/B: grey or white clinker. C–J: steel routes. K/L: primary or secondary aluminium. |
| `carbonPricePaidEurPerTco2e` | number | A simplified Art. 9 deduction. |
| `mode` | `calculate` / `listPrices` | `listPrices` returns the bundled quarterly prices, CBAM factor and CSCF. |
| `maxItems` | 1–2000 | Default 500. |

Example input:

```json
{ "lines": ["7208 51 20|TR|100", "7601 10 10|CN|25", "2523 29 00|EG|1000", "3102 10 12|RU|50", "2804 10 00|IN|5"], "importDate": "2026-08-15" }
```

### Output (real run, dataset 2026-10-29.1)

| CN code | Origin (table used) | Sector | DV total | Mark-up | Applied DV | Benchmark (route) | FAA/t | Certificates | Price (Q3 2026) | Est. cost |
|---|---|---|---|---|---|---|---|---|---|---|
| 7208 51 20 | Türkiye | Iron and steel | 2.428 | 10% | 2.6708 | 1.37 (C) | 1.33575 | 133.505 | €82.32 | **€10,990.13** |
| 7601 10 10 | China | Aluminium | 3.0 | 10% | 3.3 | 1.423 (K) | 1.387425 | 47.814 | €82.32 | **€3,936.08** |
| 2523 29 00 | Egypt | Cement | 1.29 | 10% | 1.419 | 0.666 | 0.64935 | 769.65 | €82.32 | **€63,357.59** |
| 3102 10 12 | Russian Federation | Fertilisers | 0.49 | 1% | 0.4949 | 0.304 | 0.2964 | 9.925 | €82.32 | **€817.03** |
| 2804 10 00 | India | Hydrogen | 14.03 | 10% | 15.433 | 5.089 | 4.961775 | 52.356 | €82.32 | **€4,309.96** |

Values are tCO2e per tonne of product. FAA is the free allocation adjustment. Run total: 1,180 t, 1,870.49 tCO2e embedded, 1,013.25 certificates, **€83,410.79**.

One dataset item (abridged):

```json
{
 "inputCode": "7208 51 20", "inputCountry": "TR", "tonnes": 100, "status": "ok",
 "description": "Flat-rolled products of iron or non-alloy steel, of a width >= 600 mm, hot-rolled, not clad, plated or coated",
 "sector": "Iron and steel", "matchedDefaultValueCode": "7208", "countryTableUsed": "Türkiye",
 "reportingYear": 2026, "defaultValueDirect": 2.428, "defaultValueIndirect": null, "defaultValueTotal": 2.428,
 "markupPct": 10, "appliedDefaultValue": 2.6708, "productionRoute": "(C)",
 "benchmarkColumnB": 1.37, "benchmarkRoute": "(C)", "cbamFactor": 0.975, "cscf": 1,
 "freeAllocationAdjustmentPerTonne": 1.33575, "netEmissionsPerTonne": 1.33505,
 "totalEmbeddedEmissionsTco2e": 267.08, "certificatesRequired": 133.505,
 "certificatePriceEur": 82.32, "certificatePricePeriod": "2026-Q3", "certificatePriceIsEstimate": false,
 "estimatedCostEur": 10990.13, "costPerTonneEur": 109.9, "notes": [],
 "dataset": { "version": "2026-10-29.1", "retrievedAt": "2026-10-29",
   "defaultValues": "2025/2621 as corrected by 2026/1740 (Commission file v2, 2026-08-06)",
   "benchmarks": "2025/2620 (Commission file v1)", "certificatePrices": "Commission price page, modified 2026-10-05" }
}
```

The `OUTPUT` record in the key-value store holds:

- run totals (tonnes, embedded emissions, certificates, EUR);
- a **de minimis hint** (50 t per importer per calendar year, hydrogen and electricity excluded, Reg. (EU) 2025/2083);
- the full **dataset** block (titles, ELI links, source URLs, file versions, SHA-256, retrieval dates);
- the method, the disclaimer and the attribution.

### Bundled certificate prices

| Quarter | EUR per certificate | Published |
|---|---|---|
| 2026-Q1 | 75.36 | 2026-04-07 |
| 2026-Q2 | 75.28 | 2026-07-06 |
| 2026-Q3 | 82.32 | 2026-10-05 |
| 2026-Q4 | not yet published (expected early Jan 2027). The latest price is used and flagged as an estimate. | — |

From 2027 the Commission publishes weekly prices (methodology: Implementing Reg. (EU) 2025/2548). The Actor is re-released with a new dataset version when new prices or corrected tables appear.

### Sources (retrieved 2026-10-29)

- Regulation (EU) 2023/956 (CBAM), as amended by Regulation (EU) 2025/2083: http://data.europa.eu/eli/reg/2023/956/oj
- Implementing Regulation (EU) 2025/2621: default values, Annexes I and IV, and mark-ups: http://data.europa.eu/eli/reg_impl/2025/2621/oj. Default values file v2 of 2026-08-06, reflecting the corrections of Implementing Regulation (EU) 2026/1740: https://taxation-customs.ec.europa.eu/document/download/1c05d211-80cb-4aaa-8ef0-e08005a95d7e_en
- Implementing Regulation (EU) 2025/2620: benchmarks: http://data.europa.eu/eli/reg_impl/2025/2620/oj. Benchmarks file: https://taxation-customs.ec.europa.eu/document/download/9877523c-2a02-4926-a211-aefae7cf6d0d_en
- Implementing Decision (EU) 2026/1862: CSCF 2026–2030: http://data.europa.eu/eli/dec_impl/2026/1862/oj
- CBAM factor: Art. 10a(1a) of Directive 2003/87/EC, as tabulated in Commission Guidance Document No. 4.
- Certificate prices: https://taxation-customs.ec.europa.eu/carbon-border-adjustment-mechanism/price-cbam-certificates_en

**Not included:** Annexes II and III of 2025/2621 (electricity emission factors). They derive from IEA data under a **non-commercial** licence (CC BY-NC-SA), so this Actor does not bundle them and does not calculate electricity imports.

### Licence and attribution

The data is © European Union, reused under Commission Decision 2011/833/EU (CC BY 4.0 for Commission documents). Atlas Data compiled and transformed it. This is not an official EU publication, and the Commission is not responsible for this tool.

### Pricing

Pay per event:

- **$0.00005 per run start**, plus
- **$0.001 per calculated line** ($1 per 1,000 lines).

Invalid lines (`status: "error"`) are free. A 5-line run costs about $0.005.

### Limits and FAQ

- **Up to 2,000 lines per run.** 2,000 lines took 3.8 s on the platform.
- **Default-value method only.** If you have verified actual emissions, use those instead.
- **Simplified carbon-price deduction.** Article 9 requires evidence and netting of rebates.
- **Codes must use the 2026 CN.** For example, 7601 10 00 became 7601 10 10 / 90. Older codes get a note.
- **Why is my country "Other countries and territories"?** Annex I has its own table for only about 121 countries. For the rest, the regulation uses the "Other countries and territories" values.

# Actor input Schema

## `mode` (type: `string`):

calculate = estimate certificates and cost per import line; listPrices = return the bundled quarterly certificate prices, CBAM factor and CSCF.

## `lines` (type: `array`):

One import per line: CN/TARIC code | country of origin (ISO2/ISO3/English name) | net mass in tonnes | optional import date YYYY-MM-DD.

## `items` (type: `array`):

Structured alternative: \[{"id":"INV-1","code":"72085120","country":"TR","tonnes":100,"importDate":"2026-08-15","productionRoute":"C","carbonPricePaidEurPerTco2e":0,"precursorUnknownOrigin":false}]

## `country` (type: `string`):

Used for lines without a country. Empty = 'Other countries and territories' table.

## `importDate` (type: `string`):

Determines reporting year (mark-up, CBAM factor) and the quarterly certificate price. Default: today (UTC).

## `certificatePriceEur` (type: `number`):

Use your own price per CBAM certificate (e.g. a forecast) instead of the bundled official quarterly price.

## `productionRoute` (type: `string`):

Benchmark route for the free allocation adjustment. Normally taken from the default-value table (Annex I of 2025/2621).

## `carbonPricePaidEurPerTco2e` (type: `number`):

Optional simplified Art. 9 deduction (effective price after rebates).

## `maxItems` (type: `integer`):

Upper limit of lines calculated (and charged).

## Actor input object example

```json
{
  "mode": "calculate",
  "lines": [
    "7208 51 20|TR|100",
    "7601 10 10|CN|25",
    "2523 29 00|EG|1000",
    "3102 10 12|RU|50"
  ],
  "productionRoute": "",
  "maxItems": 500
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `table` (type: `string`):

No description

## `summary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "lines": [
        "7208 51 20|TR|100",
        "7601 10 10|CN|25",
        "2523 29 00|EG|1000",
        "3102 10 12|RU|50"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("atlasdata/cbam-cost-calculator-reliable").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "lines": [
        "7208 51 20|TR|100",
        "7601 10 10|CN|25",
        "2523 29 00|EG|1000",
        "3102 10 12|RU|50",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("atlasdata/cbam-cost-calculator-reliable").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "lines": [
    "7208 51 20|TR|100",
    "7601 10 10|CN|25",
    "2523 29 00|EG|1000",
    "3102 10 12|RU|50"
  ]
}' |
apify call atlasdata/cbam-cost-calculator-reliable --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,atlasdata/cbam-cost-calculator-reliable"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/HhPJCpMycVPHt640U/builds/Kgc5beQd961n5LPEU/openapi.json
