# CBAM Report Helper: EU Carbon Border Adjustment Compliance (`ravch/cbam-report-helper`) Actor

Screen EU imports against Carbon Border Adjustment Mechanism (CBAM) Annex I. Returns sector (cement, steel, aluminium, fertilisers, electricity, hydrogen), country-specific default emissions per Reg. 2025/486, 50-tonne threshold check, and Omnibus 2025 obligations. Up to 5,000 shipments per run.

- **URL**: https://apify.com/ravch/cbam-report-helper.md
- **Developed by:** [Rafał Chudzik](https://apify.com/ravch) (community)
- **Categories:** AI, Automation, Integrations
- **Stats:** 2 total users, 0 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 results

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## CBAM Report Helper

Screen EU imports against the **Carbon Border Adjustment Mechanism (CBAM), Regulation (EU) 2023/956**, including the October 2025 Omnibus simplification. Send an HS code and a country of origin; get back scope, sector, country-specific default emission factor (Commission Implementing Reg. (EU) 2025/2621), an indicative embedded-emissions estimate, the 50-tonne de minimis threshold check, and the obligations applicable to the CBAM definitive period (which started 1 January 2026; certificate purchase mechanics begin 1 February 2027).

This Actor is **not affiliated with, sponsored, or endorsed by the European Commission, the CBAM Registry, national customs authorities, or any CBAM competent authority**. Only the regulations published in the Official Journal of the EU (eur-lex.europa.eu) are authentic.

> **Use this Actor when**: you import iron and steel, aluminium, cement, fertilisers, electricity, or hydrogen into the EU; you are budgeting CBAM certificate cost for 2027; you need to know which shipments fall under the 50-tonne SME threshold; or you are sourcing across multiple countries and want to compare embedded emissions before committing.

### Quick start

```json
{
  "shipments": [
    { "query": "7208.10", "country": "CN", "tonnes": 250 },
    { "query": "7601.10", "country": "MZ", "tonnes": 100 }
  ]
}
````

That run costs `$0.001 + 2 × $0.005 = $0.011`. The Chinese hot-rolled steel returns the country-specific default 2.32 tCO2e/t × 250 t = 580 tCO2e indicative embedded. The Mozambique unwrought aluminium gets 6.50 tCO2e/t × 100 t = 650 tCO2e indicative embedded. Both are **indicative exposure estimates, not payable amounts**: real CBAM cost depends on weekly EU ETS auction averages (from 1 February 2027) and verified installation-level emissions, not on default values.

### What it returns

For each shipment row:

- **scope**: yes / no, against CBAM Annex I (cement, iron and steel, aluminium, fertilisers, electricity, hydrogen)
- **sector**: one of the six categories
- **HS prefix**: longest match against Annex I
- **country flags**: `origin_is_eu_member` (intra-EU shipments), `exempt_origin` (Iceland, Liechtenstein, Norway, Switzerland and micro-territories), `exempt_under_50t_threshold` (Omnibus SME relief)
- **default emission factor**: country-specific (Commission Implementing Reg. (EU) 2025/2621 Annex II) where published, EU-wide default (Annex I) otherwise
- **estimated embedded emissions**: `factor × tonnes`, rounded
- **deadlines**: certificate sales start `1 February 2027`, annual declaration `30 September of the year following import`, quarterly certificate holding `50%`
- **structured obligations**: declarant authorisation, certificate purchase, annual declaration, verified-emissions submission
- **legal basis**: Reg. 2023/956 articles plus 2025/2621 (defaults) and Omnibus simplification citations

### Why this Actor exists

Three things make CBAM hard to do by hand:

1. **Annex I is sparse but precise**: about 150 HS codes across six sectors, mixing 4-digit headings (whole subheading in scope) with 6/8-digit subheadings (only specific products).
2. **Default emission factors are matrix-shaped**: `(HS code, country)` lookup, with the Commission Implementing Reg. (EU) 2025/2621 Annex II covering ~30 country-specific entries and Annex I covering ~120 EU-wide defaults.
3. **The October 2025 Omnibus changed several deadlines and thresholds**: sales date, declaration deadline, threshold, quarterly holding all moved. Some pre-Omnibus guidance may be outdated; verify against the latest Commission publications.

This Actor encodes the consolidated regime so a single shipment screening is one API call.

### Input

```json
{
  "shipments": [
    { "query": "7208.10.00", "country": "CN", "tonnes": 250 },
    { "query": "7214.20.00", "country": "TR", "tonnes": 1200 },
    { "query": "Hot-rolled steel coils", "country": "Turkey", "tonnes": 80 },
    { "query": "7601", "country": "MZ", "tonnes": 500 },
    { "query": "Portland cement", "country": "EG", "tonnes": 150 },
    { "query": "281410", "country": "Trinidad and Tobago", "tonnes": 60 },
    { "query": "2716", "country": "UA", "tonnes": 1500000 },
    { "query": "8517", "country": "CN", "tonnes": 100 }
  ],
  "calendarYear": 2026
}
```

| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| `shipments` | array of objects | yes | n/a | Up to 5,000 shipments per run. |
| `shipments[].query` | string | yes | n/a | HS / CN code at any precision (4 / 6 / 8 / 10 digit, dots and spaces allowed, optional `HS` / `CN` prefix), OR a plain-English commodity name (`steel`, `cement`, `urea`). |
| `shipments[].country` | string | no | n/a | ISO-2 (`CN`), ISO-3 (`CHN`), or full name (`China`, `Türkiye`, `Trinidad and Tobago`). Country drives EF lookup and EU-member / exempt-origin classification. |
| `shipments[].tonnes` | number | no | n/a | Net mass (annual cumulative) for this shipment line. Used both for the 50-tonne threshold check and for the embedded-emissions estimate. |
| `calendarYear` | integer | no | `2026` | Year these imports relate to. Used for reporting-period context in obligations text. Range: 2024-2030. |

### Output

One dataset row per shipment.

**Chargeable shipment** (Chinese hot-rolled steel, 250 tonnes):

```json
{
  "query": "7208.10",
  "query_type": "hs_code",
  "country_input": "CN",
  "calendar_year": 2026,
  "in_scope": true,
  "cbam_sector": "iron_and_steel",
  "hs_code": "7208",
  "hs_label": "Flat-rolled products of iron or non-alloy steel, hot-rolled",
  "country_iso2": "CN",
  "tonnes_declared": 250,
  "origin_is_eu_member": false,
  "exempt_under_50t_threshold": false,
  "exempt_origin": false,
  "default_emission_factor": 2.32,
  "default_emission_factor_source": "Commission Implementing Reg. (EU) 2025/2621 country-specific default for CN",
  "estimated_embedded_emissions_t_co2e": 580.0,
  "certificate_sales_start": "1 February 2027",
  "annual_declaration_deadline": "30 September of the year following import",
  "quarterly_holding_percent": 50,
  "obligations": [
    "Apply for CBAM authorised declarant status before placing CBAM goods on the EU market...",
    "From 1 February 2027 purchase CBAM certificates corresponding to embedded emissions...",
    "Submit an annual CBAM declaration by 30 September of the year following import...",
    "Verify embedded emissions at installation level using accredited verifiers..."
  ],
  "legal_basis": [
    "Reg. (EU) 2023/956, Art. 5 (Application as authorised declarant)",
    "Reg. (EU) 2023/956, Art. 22 (Annual CBAM declaration)",
    "Reg. (EU) 2023/956, Art. 22a (Quarterly certificate holding)",
    "Commission Implementing Reg. (EU) 2025/2621 (Default values for embedded emissions)",
    "Omnibus simplification (October 2025): postponed certificate sales to 1 February 2027; introduced 50-tonne threshold; reduced quarterly holding from 80% to 50%"
  ],
  "source_url": "https://eur-lex.europa.eu/eli/reg/2023/956/oj"
}
```

**Below 50-tonne threshold** (Omnibus SME exemption, 30 t aluminium):

```json
{
  "query": "7601.10",
  "country_iso2": "MZ",
  "tonnes_declared": 30,
  "in_scope": true,
  "cbam_sector": "aluminium",
  "exempt_under_50t_threshold": true,
  "obligations": [
    "Importer is below the 50-tonne annual threshold (Omnibus simplification). No CBAM authorisation, no quarterly certificate holding, and no annual declaration required for this calendar year, provided the cumulative tonnage stays below 50 tonnes for ALL CBAM goods combined."
  ]
}
```

**Exempt origin** (EEA + ETS-linked: IS, LI, NO, CH):

```json
{
  "query": "7601",
  "country_iso2": "IS",
  "in_scope": true,
  "cbam_sector": "aluminium",
  "exempt_origin": true,
  "obligations": ["Origin IS is exempt from CBAM (ETS-linked or geographic exemption). No CBAM declaration is required for shipments from this country."]
}
```

**EU member origin** (intra-EU movement is not an import):

```json
{
  "query": "7208.10",
  "country_iso2": "DE",
  "origin_is_eu_member": true,
  "obligations": ["Origin DE is an EU member state. CBAM applies only to imports from third countries (Reg. (EU) 2023/956 Art. 2(1)). Intra-EU movements are not imports and do not trigger CBAM."]
}
```

**Out of scope**:

```json
{
  "query": "8517",
  "in_scope": false,
  "cbam_sector": null,
  "obligations": ["Product is outside the scope of CBAM Annex I. No CBAM obligations apply."],
  "notes": ["CBAM scope covers six sectors (cement, iron and steel, aluminium, fertilisers, electricity, hydrogen). Other goods may still be covered by EU ETS, EUDR or other regimes."]
}
```

### Code examples

#### Apify Client (Python)

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("ravch/cbam-report-helper").call(run_input={
    "shipments": [
        {"query": "7208.10", "country": "CN", "tonnes": 250},
        {"query": "7601.10", "country": "MZ", "tonnes": 100},
        {"query": "252310", "country": "TR", "tonnes": 5000},
    ]
})
total = 0.0
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    co2e = item.get("estimated_embedded_emissions_t_co2e") or 0
    total += co2e
ets_price_eur = 80
print(f"2026 portfolio embedded emissions: {total:,.0f} tCO2e")
print(f"At ~EUR {ets_price_eur}/t ETS: certificate cost = EUR {total * ets_price_eur:,.0f}")
```

#### curl (synchronous run)

```bash
curl -X POST 'https://api.apify.com/v2/acts/ravch~cbam-report-helper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"shipments":[{"query":"7208.10","country":"CN","tonnes":250}]}'
```

### How emission factors are resolved

Two-level lookup, longest match first:

1. **Country-specific default** (Commission Implementing Reg. (EU) 2025/2621 Annex II), applies to common origin × HS pairs:
   - `7208 × CN` = 2.32, `7208 × TR` = 2.05, `7208 × RU` = 2.27, `7208 × IN` = 2.40
   - `7214 × TR` = 1.86 (rebar from Turkey), `7214 × CN` = 2.30
   - `252310 × TR` = 0.91, `252310 × EG` = 0.94, `252310 × MA` = 0.92, `252310 × TN` = 0.92
   - `7601 × RU` = 8.20, `7601 × CN` = 9.40, `7601 × AE` = 7.80, `7601 × MZ` = 6.50, `7601 × IS` = 4.50, `7601 × NO` = 5.20
   - `310210 × RU` = 1.70, `310210 × QA` = 1.65, `310210 × DZ` = 1.78, `310210 × EG` = 1.85
   - `281410 × RU` = 2.50, `281410 × EG` = 2.65, `281410 × TT` = 2.40
   - `280410 × RU` = 9.50, `280410 × DZ` = 9.20

2. **EU-wide default** (Commission Implementing Reg. (EU) 2025/2621 Annex I), used when no country-specific value is published. Examples: hot-rolled steel 2.0, unwrought aluminium 8.6, cement clinker 0.96, urea 1.7, ammonia 2.5, electricity 0.42, hydrogen 9.0 tCO2e/t.

For the definitive period (from 1 January 2026), defaults are intended as fallback. Operators should obtain installation-level data from non-EU producers wherever possible, since defaults are deliberately conservative (higher than verified real values).

### Use cases

- **Pre-import customs validation**: before lodging a customs declaration, confirm each line item's CBAM scope and certificate cost
- **Indicative budget banding**: get an order-of-magnitude estimate of yearly embedded emissions across an import portfolio to inform 2027 budget bands. Estimates are indicative; actual cost depends on verified installation-level emissions and EU ETS auction prices.
- **50-tonne de minimis monitoring**: track cumulative imports and warn an importer when approaching the de minimis threshold mid-year. Note: electricity and hydrogen require separate treatment, do not assume automatic exemption.
- **Supplier sourcing comparison**: compare published default emission factors across origin countries during preliminary procurement screening. Final sourcing decisions should use verified installation data from the supplier.
- **EEA / EU origin sanity check**: confirm IS / LI / NO / CH shipments qualify as exempt and DE / FR / IT etc. are correctly classified as intra-EU
- **AI agent integration**: through the [EU Compliance MCP](../eu-compliance-mcp), ask Claude "what is my CBAM cost for 250t Chinese steel + 100t Mozambique aluminium?" and get a structured answer with article citations

### FAQ

**When does CBAM actually start?**
The CBAM definitive regime applies from **1 January 2026** (Art. 36 of Reg. (EU) 2023/956). Importers above the 50-tonne threshold must apply for authorised CBAM declarant status. Certificate purchase and surrender mechanics for 2026 emissions are deferred: certificate sales begin **1 February 2027**, and the first annual declaration is due **30 September 2027** for 2026 imports.

**What's the 50-tonne threshold?**
Under the Omnibus simplification, importers whose cumulative annual net mass of CBAM goods covered by the de minimis rule stays at or below 50 tonnes per importer per calendar year may be exempt from authorisation, certificate purchase, and annual declaration. **Important caveat**: electricity and hydrogen require separate treatment under Reg. (EU) 2025/2083 and should not be treated as automatically exempt under the 50-tonne threshold without verification. Always confirm coverage against the current Commission guidance.

**Why is the quarterly holding 50% and not 80%?**
The October 2025 Omnibus simplification reduced the year-to-date certificate-holding requirement from the original 80% to 50%, freeing up working capital for importers.

**My origin is Iceland / Norway / Switzerland, am I really exempt?**
Iceland, Liechtenstein, Norway (EEA + ETS) and Switzerland (linked ETS) are listed as exempt origins under Art. 2(3) of Reg. (EU) 2023/956. The Actor flags `exempt_origin: true` for these. Verify the goods did not transit through a non-exempt country with substantial transformation.

**My origin is Germany / France / Poland, what does the Actor say?**
Intra-EU movements are not imports, so CBAM does not apply (Art. 2(1)). The Actor flags `origin_is_eu_member: true` and reminds you to verify the customs origin declaration in case the goods were originally produced outside the EU and merely transited through the Member State.

**Does CBAM cover scrap (HS 7204) or finished goods (HS 7318 fasteners)?**
Both fall within Annex I and the Actor returns them in scope. Annex I is broader than just primary metals; verify the specific CN code against the current Annex I text.

**The Commission keeps amending CBAM. How do I know I'm using current data?**
The Actor encodes the regulations available at its build date (`actor_version` field in each output). After each Commission amendment, the Actor data is updated and a new version is published. Always cross-check against `eur-lex.europa.eu` and the CBAM Registry before relying on output for compliance documentation.

**Why is "estimated\_embedded\_emissions\_t\_co2e" called "indicative"?**
Default emission values are a **fallback**. Actual CBAM cost depends on (a) verified emissions at the production installation level, and (b) the certificate price, which tracks weekly EU ETS auction averages from 1 February 2027 (quarterly during 2026). The Actor's estimate is an **indicative exposure estimate, not a payable amount**. Use it for budgeting bands, not for filing declarations.

**Will CBAM expand to other sectors?**
The Commission has indicated possible expansion to organic chemicals, polymers, and others. The current Actor scope is the six original sectors plus hydrogen. New sectors will be added as they enter Annex I.

### Pricing

Pay per event. No subscription, no setup fee.

| Event | Price |
|---|---|
| Actor Start (once per run) | $0.001 |
| Shipment Screened (per item) | $0.005 |

Screening 1,000 shipments costs **$5.001**.

### Limitations

- Screens scope and obligations and applies the Commission default factors. Does **not** submit CBAM declarations on your behalf, **does not** verify installation-level emissions, **does not** purchase CBAM certificates from the registry.
- Country-specific defaults table covers a subset of origin × HS combinations published in Commission Implementing Reg. (EU) 2025/2621 Annex II. For uncommon origins, the Actor falls back to the EU-wide default. Always cross-check against the current Annex II text.
- Default emission values are a fallback; from 1 January 2026 their use is restricted to specific circumstances. Operators are expected to obtain installation-level data wherever possible.
- The 50-tonne de minimis threshold has special treatment for electricity and hydrogen under Reg. (EU) 2025/2083: do not assume automatic exemption for these sectors based on the threshold alone.
- A `screening_result: "no_match"` answer means no Annex I entry was matched by the supplied input. It does NOT prove the product is exempt from CBAM; misclassification at customs is a common cause of false negatives. Verify CN classification before relying on a negative result.
- Out-of-scope answers do not consider downstream extension proposals. The Commission has indicated it may extend CBAM to additional sectors.
- This Actor is not affiliated with or endorsed by the European Commission, the CBAM Registry, or any Member State competent authority.

### Sources

- [Regulation (EU) 2023/956 (CBAM) consolidated text on EUR-Lex](https://eur-lex.europa.eu/eli/reg/2023/956/oj)
- [Commission Implementing Commission Implementing Reg. (EU) 2025/2621: default emission values](https://eur-lex.europa.eu/eli/reg_impl/2025/2621/oj)
- [European Commission, CBAM portal](https://taxation-customs.ec.europa.eu/carbon-border-adjustment-mechanism_en)
- [CBAM transitional registry guidance](https://taxation-customs.ec.europa.eu/carbon-border-adjustment-mechanism/cbam-transitional-period_en)
- [EU ETS price (live)](https://www.eex.com/en/market-data/environmental-markets/spot-market/european-emission-allowances)

### Related compliance Actors

- [**EU Compliance MCP Server**](../eu-compliance-mcp): call this Actor (and 3 others) from Claude Desktop, Cursor, or any MCP-compatible AI client
- [**REACH SVHC Checker**](../reach-svhc-checker): separate regulation for chemical substances of very high concern
- [**EUDR Screener**](../eudr-screener): EU Deforestation Regulation for cattle, cocoa, coffee, oil palm, rubber, soya, wood
- [**Battery Regulation Passport**](../battery-regulation-passport): Reg. (EU) 2023/1542 scope check, Battery Passport requirements

### Need more

For full CBAM declaration generation (XML in the Authorisation Module schema), installation-level emission data ingestion from supplier reports, CBAM Registry API integration, multi-shipment certificate purchase forecasting with quarterly cash-flow modelling, or combined CBAM + EUDR + REACH + Battery joint screening, email **contact@ravch.dev**. We reply within 24 hours.

### Disclaimer

This Actor is an **unofficial screening and estimation tool** based on publicly available EU CBAM legal texts and Commission-published default values. It is **not affiliated with, sponsored, or endorsed by the European Commission, national customs authorities, the CBAM Registry, or any CBAM competent authority**. Only the regulations published in the Official Journal of the EU (eur-lex.europa.eu) are authentic.

**Output is provided "AS IS" without warranty of any kind**, express or implied. Results are intended for **screening, triage, and indicative estimation**, not as a final legal, customs, tax, accounting, or environmental verification advice. The author (ravch.dev) accepts no liability for losses, fines, missed deadlines, incorrect declarations, or compliance failures arising from reliance on this Actor's output.

**Before any import, declaration, budgeting, certificate purchase, or surrender decision, you must independently verify against the official sources**:

- CN classification (TARIC) for the goods
- Customs origin (not country of dispatch)
- Importer-level annual cumulative tonnage
- Threshold eligibility, including the special treatment of electricity and hydrogen
- Actual embedded emissions at installation level
- Carbon-price deductions for any carbon price already paid in the country of origin
- Verification requirements and authorised CBAM declarant status
- Certificate purchase / surrender obligations as published by the Commission and your Member State competent authority

The `estimated_embedded_emissions_t_co2e` field is an **indicative exposure estimate**, not a payable amount. The CBAM certificate price tracks weekly EU ETS auction averages from 1 February 2027 onward (quarterly during 2026). Actual financial exposure will depend on verified emissions and market prices, not on default values.

For binding compliance decisions, consult the official Commission CBAM portal at https://taxation-customs.ec.europa.eu/carbon-border-adjustment-mechanism\_en, the CBAM Registry, your Member State competent authority, and qualified counsel.

# Actor input Schema

## `shipments` (type: `array`):

List of import shipments. Each item has `query` (HS / CN code at any precision: 4 / 6 / 8 / 10 digit, dots or spaces allowed; or a commodity name like "steel", "cement clinker", "urea", "hydrogen"), optional `country` (ISO-2 "CN", ISO-3 "CHN" or full name "China" / "Türkiye" / "Trinidad and Tobago"), and optional `tonnes` (annual cumulative net mass for this line, drives the 50-tonne SME threshold check and the embedded-emissions estimate). Up to 5,000 shipments per run.

## `calendarYear` (type: `integer`):

The calendar year these imports relate to. The 50-tonne threshold applies cumulatively per-importer per-year across ALL CBAM goods combined; pick the year you are budgeting. Range: 2024-2030.

## Actor input object example

```json
{
  "shipments": [
    {
      "query": "7208.10",
      "country": "CN",
      "tonnes": 250
    },
    {
      "query": "Hot-rolled steel coils",
      "country": "TR",
      "tonnes": 80
    },
    {
      "query": "7601.10",
      "country": "MZ",
      "tonnes": 30
    },
    {
      "query": "Portland cement",
      "country": "EG",
      "tonnes": 150
    },
    {
      "query": "281410",
      "country": "TT",
      "tonnes": 60
    },
    {
      "query": "2716",
      "country": "UA",
      "tonnes": 1500000
    },
    {
      "query": "8517",
      "country": "CN",
      "tonnes": 100
    }
  ],
  "calendarYear": 2026
}
```

# 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 = {
    "shipments": [
        {
            "query": "7208.10",
            "country": "CN",
            "tonnes": 250
        },
        {
            "query": "Hot-rolled steel coils",
            "country": "TR",
            "tonnes": 80
        },
        {
            "query": "7601.10",
            "country": "MZ",
            "tonnes": 30
        },
        {
            "query": "Portland cement",
            "country": "EG",
            "tonnes": 150
        },
        {
            "query": "281410",
            "country": "TT",
            "tonnes": 60
        },
        {
            "query": "2716",
            "country": "UA",
            "tonnes": 1500000
        },
        {
            "query": "8517",
            "country": "CN",
            "tonnes": 100
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("ravch/cbam-report-helper").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 = { "shipments": [
        {
            "query": "7208.10",
            "country": "CN",
            "tonnes": 250,
        },
        {
            "query": "Hot-rolled steel coils",
            "country": "TR",
            "tonnes": 80,
        },
        {
            "query": "7601.10",
            "country": "MZ",
            "tonnes": 30,
        },
        {
            "query": "Portland cement",
            "country": "EG",
            "tonnes": 150,
        },
        {
            "query": "281410",
            "country": "TT",
            "tonnes": 60,
        },
        {
            "query": "2716",
            "country": "UA",
            "tonnes": 1500000,
        },
        {
            "query": "8517",
            "country": "CN",
            "tonnes": 100,
        },
    ] }

# Run the Actor and wait for it to finish
run = client.actor("ravch/cbam-report-helper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "shipments": [
    {
      "query": "7208.10",
      "country": "CN",
      "tonnes": 250
    },
    {
      "query": "Hot-rolled steel coils",
      "country": "TR",
      "tonnes": 80
    },
    {
      "query": "7601.10",
      "country": "MZ",
      "tonnes": 30
    },
    {
      "query": "Portland cement",
      "country": "EG",
      "tonnes": 150
    },
    {
      "query": "281410",
      "country": "TT",
      "tonnes": 60
    },
    {
      "query": "2716",
      "country": "UA",
      "tonnes": 1500000
    },
    {
      "query": "8517",
      "country": "CN",
      "tonnes": 100
    }
  ]
}' |
apify call ravch/cbam-report-helper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=ravch/cbam-report-helper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "CBAM Report Helper: EU Carbon Border Adjustment Compliance",
        "description": "Screen EU imports against Carbon Border Adjustment Mechanism (CBAM) Annex I. Returns sector (cement, steel, aluminium, fertilisers, electricity, hydrogen), country-specific default emissions per Reg. 2025/486, 50-tonne threshold check, and Omnibus 2025 obligations. Up to 5,000 shipments per run.",
        "version": "0.1",
        "x-build-id": "ApPkIPfpKdryTucg1"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/ravch~cbam-report-helper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-ravch-cbam-report-helper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/ravch~cbam-report-helper/runs": {
            "post": {
                "operationId": "runs-sync-ravch-cbam-report-helper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/ravch~cbam-report-helper/run-sync": {
            "post": {
                "operationId": "run-sync-ravch-cbam-report-helper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "shipments"
                ],
                "properties": {
                    "shipments": {
                        "title": "Shipments to screen",
                        "minItems": 1,
                        "maxItems": 5000,
                        "type": "array",
                        "description": "List of import shipments. Each item has `query` (HS / CN code at any precision: 4 / 6 / 8 / 10 digit, dots or spaces allowed; or a commodity name like \"steel\", \"cement clinker\", \"urea\", \"hydrogen\"), optional `country` (ISO-2 \"CN\", ISO-3 \"CHN\" or full name \"China\" / \"Türkiye\" / \"Trinidad and Tobago\"), and optional `tonnes` (annual cumulative net mass for this line, drives the 50-tonne SME threshold check and the embedded-emissions estimate). Up to 5,000 shipments per run."
                    },
                    "calendarYear": {
                        "title": "Calendar year of import",
                        "minimum": 2024,
                        "maximum": 2030,
                        "type": "integer",
                        "description": "The calendar year these imports relate to. The 50-tonne threshold applies cumulatively per-importer per-year across ALL CBAM goods combined; pick the year you are budgeting. Range: 2024-2030.",
                        "default": 2026
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
