GHG Protocol · IPCC AR6 GWP100 · ISO 14083

Automate your
carbon reporting

Five APIs that map directly to GHG Protocol scopes. Calculate Scope 1, 2, and 3 emissions across your entire operation — with a full audit trail in every response. No spreadsheets. No manual factors.

500 free requests/month · No credit card · View pricing

Every scope. One platform.

Each API response includes ghg_protocol_scopes — your emissions pre-categorised for disclosure.

Scope 1 Direct emissions

Fuel burned in owned or controlled sources — boilers, furnaces, fleet vehicles.

Freight API — owned fleet
"scope_1": 2512.1
Scope 2 Purchased energy

Electricity, heating, and cooling purchased for your own facilities. Location-based and market-based methods supported.

"scope_2": {
  "location_based": 1085.0,
  "market_based": null
}
Scope 3 Value chain

Upstream and downstream emissions across your entire value chain — typically 70–90% of a company's total footprint.

Freight API — Cat. 4 & 9
Travel API — Cat. 6
Hotel API — Cat. 6
Fuel & Electricity — Cat. 3 (WTT)
"scope_3_category_4": 156.78
In every response

Your auditor's
favourite API

Every response includes a source_trail — the exact emission factor name, source dataset, year, and region used in the calculation. No black boxes. No "contact us for methodology."

Emission factor name & dataset — exactly which factor was applied
Source organisation & year — GLEC, DEFRA, Ember, EPA with vintage
Region & compliance flags — ISO 14083, EN 16258, GHG Protocol category
Lifecycle breakdown — WTT and TTW split for Scope 1/3 allocation
json source_trail · Freight API response
{
  "emissions": {
    "co2e": 156.78,
    "co2e_unit": "kg",
    "co2e_calculation_method": "ipcc_ar6_gwp100",
    "lifecycle_breakdown": {
      "vehicle_operation": 125.42,
      "energy_provision": 31.36
    },
    "ghg_protocol_scopes": {
      "freight_buyer": {
        "scope_3_category_4": 156.78
      },
      "asset_owner": {
        "scope_1": 125.42,
        "scope_3_category_3": 31.36
      }
    },
    "source_trail": [{
      "data_category": "emission_factor",
      "name": "Articulated HGV - Diesel",
      "source": "GLEC",
      "source_dataset": "Default fuel efficiency and GHG emission intensity values v3.1",
      "year": "2025",
      "region": "GLOBAL"
    }]
  },
  "meta": {
    "standards_compliance": {
      "ISO_14083": true,
      "EN_16258": true,
      "GHG_Protocol": "Scope 3 Category 4"
    }
  }
}

Stop building what we've already built

You could maintain emission factor spreadsheets, track annual DEFRA updates, geocode freight routes, handle unit conversions, and build GHG Protocol scope mapping yourself. Or:

Building it yourself
Emission factors Download DEFRA spreadsheets, parse GLEC PDFs, license Ember data, track annual updates
Distance calculations Integrate OSRM for road, maritime APIs for sea, great circle for air
GHG Protocol mapping Build scope classification logic, handle WTT/TTW splits, asset owner vs buyer views
Audit trail Build provenance tracking, factor versioning, methodology documentation
Maintenance Update factors annually, monitor regulatory changes, fix edge cases
~3–6 months engineering time
Using emissions.dev
Emission factors GLEC, DEFRA, Ember, EPA eGRID, Cornell CHSB — always current
Distance calculations Pass origin + destination, we handle routing for every mode
GHG Protocol mapping ghg_protocol_scopes in every response, both perspectives
Audit trail source_trail with factor name, dataset, year, region
Maintenance We update factors, you call the same endpoint
One afternoon to integrate

One report, five APIs

Pull emissions across your entire operation into a single disclosure-ready dataset. Every response already contains the scope mapping — just aggregate and export.

php Annual GHG Protocol disclosure — all scopes
// Aggregate emissions across all five APIs for annual disclosure
$report = [
    'reporting_period' => '2025-01-01 / 2025-12-31',
    'methodology'      => 'GHG Protocol Corporate Standard',
    'gwp'              => 'IPCC AR6 GWP100',
];

// Scope 1 — Direct emissions (fuel burned on-site)
$fuelRecords = FuelRecord::whereYear('date', 2025)->get();
foreach ($fuelRecords as $record) {
    $res = Http::withToken($apiKey)->get('https://api.emissions.dev/v1/fuel/emissions', [
        'fuel_type' => $record->fuel_type,
        'value'     => $record->kwh,
        'unit'      => 'kwh',
    ]);
    $scope1 += $res->json('data.attributes.emissions.ghg_protocol_scopes.scope_1');
}

// Scope 2 — Purchased electricity (per-office, per-country)
$offices = Office::with('electricityBills')->get();
foreach ($offices as $office) {
    $res = Http::withToken($apiKey)->get('https://api.emissions.dev/v1/electricity/emissions', [
        'country' => $office->country_code,
        'state'   => $office->state_code,
        'kwh'     => $office->annual_kwh,
    ]);
    $scope2 += $res->json('data.attributes.emissions.ghg_protocol_scopes.scope_2.location_based');
}

// Scope 3 Cat. 4 — Upstream freight
$shipments = Shipment::whereYear('shipped_at', 2025)->get();
foreach ($shipments as $s) {
    $res = Http::withToken($apiKey)->get('https://api.emissions.dev/v1/freight/emissions', [
        'origin_country'      => $s->origin_country,
        'destination_country'  => $s->dest_country,
        'weight'              => $s->weight_kg,
        'transport_mode'      => $s->mode,
    ]);
    $scope3_cat4 += $res->json('data.attributes.emissions.ghg_protocol_scopes.freight_buyer.scope_3_category_4');
}

// Scope 3 Cat. 6 — Business travel (flights + hotels)
$trips = BusinessTrip::whereYear('departure_date', 2025)->get();
foreach ($trips as $trip) {
    $flight = Http::withToken($apiKey)->get('https://api.emissions.dev/v1/travel/emissions', [
        'origin'      => $trip->origin_iata,
        'destination' => $trip->dest_iata,
        'mode'        => 'flight',
        'class'       => $trip->cabin_class,
    ]);
    $hotel = Http::withToken($apiKey)->get('https://api.emissions.dev/v1/hotel/emissions', [
        'country' => $trip->hotel_country,
        'nights'  => $trip->hotel_nights,
    ]);
    $scope3_cat6 += $flight->json('data.attributes.emissions.co2e')
                  + $hotel->json('data.attributes.emissions.co2e');
}

// Complete GHG Protocol disclosure
$report['scope_1']           = round($scope1, 1);
$report['scope_2_location']  = round($scope2, 1);
$report['scope_3_category_3'] = 'WTT included in each API response';
$report['scope_3_category_4'] = round($scope3_cat4, 1);
$report['scope_3_category_6'] = round($scope3_cat6, 1);
$report['total_co2e_kg']     = round($scope1 + $scope2 + $scope3_cat4 + $scope3_cat6, 1);
1
Your business data

Fuel bills, electricity invoices, shipping records, travel bookings, hotel stays — data you already have.

2
emissions.dev calculates

We apply the right emission factors, handle unit conversions, calculate distances, and map to GHG Protocol scopes.

3
Disclosure-ready output

CO₂e totals by scope, lifecycle breakdowns, and complete source trails for your auditor.

For your sustainability team

Share this with colleagues who need to know the methodology is sound — even if they'll never see the code.

GHG Protocol

All emissions categorised by scope and category per the GHG Protocol Corporate Standard.

IPCC AR6 GWP100

All factors expressed in CO₂e using the latest IPCC Global Warming Potential values over 100 years.

Recognised sources

GLEC Framework, UK DEFRA, US EPA eGRID, Ember, Cornell CHSB — named in every response.

Reproducible

Pin calculations to a factor year. Re-run any historical period and get the same results.

Carbon reporting FAQ

ScopeCategoryAPI
Scope 1Direct emissionsFuel API, Freight API (owned fleet)
Scope 2Purchased electricityElectricity API (location & market-based)
Scope 3, Cat. 3Fuel & energy-related (WTT)Fuel API, Electricity API
Scope 3, Cat. 4Upstream transportFreight API
Scope 3, Cat. 6Business travelTravel API, Hotel API
Scope 3, Cat. 9Downstream transportFreight API

Every response includes ghg_protocol_scopes with the emissions pre-mapped to the correct category.

The Electricity API returns both in the ghg_protocol_scopes.scope_2 object. Location-based is calculated automatically from grid intensity data (Ember, EPA eGRID). For market-based, pass your supplier's emission factor via the market_based_factor parameter — useful if you have renewable energy certificates or a green tariff.

If no market-based factor is provided, that field returns null with a note explaining why, so you can clearly document the gap in your report.

Yes. Every response includes the exact emission factor name, source dataset, year, and region in the source_trail. As long as you store the API responses (or just the source_trail), you can document exactly which factors were used. For consistency across a reporting period, we recommend making all calculations for a given year within the same quarter to ensure factor versions remain consistent.

SourceCoverageUsed by
GLEC Framework v3.1Freight (all modes, global)Freight API
DEFRA 2025UK Government factors, widely adoptedTravel, Hotel, Fuel APIs
Ember 2025100+ country electricity gridsElectricity API
US EPA eGRID 202350 US state-level gridsElectricity API
Cornell CHSB Index60+ country hotel benchmarksHotel API

All factors are expressed in CO₂e using IPCC AR6 GWP100 values. The exact source, dataset name, and year are included in the source_trail of every response.

No — use only the APIs relevant to your emission sources. A logistics company might only need Freight and Fuel. A consulting firm might only need Travel, Hotel, and Electricity. All five APIs share the same API key, authentication, and response format, so adding a new scope later is trivial.

For annual carbon reporting (typically a batch job), most companies need the Starter or Growth plan:

PlanRequests/monthPrice
Free500$0
Launch5,000$39/mo
Starter10,000$79/mo
Growth50,000$199/mo
Scale200,000$499/mo

A company with 1,000 shipments, 5 offices, and 200 business trips would use roughly 1,200 API calls for a full annual report — well within the Free tier. See full pricing.

Start automating your carbon report

Get your API key in 30 seconds. Calculate your first emission in under a minute. No credit card required.