Your business travel emissions
are probably wrong
Most companies report travel emissions using flat-rate estimates that ignore cabin class, skip hotel stays, and treat EVs as zero-carbon everywhere. CSRD and SECR require better. We calculate accurate Scope 3 Category 6 from your booking data — with a full audit trail your assessor can verify.
Transparent pricing · 500 free requests/month · No sales calls
Three things most companies get wrong
And why their Scope 3 Category 6 numbers don't survive an audit.
Ignoring cabin class
A business class seat takes 3x the floor space of economy — so it carries 3x the emissions. First class is 4x. London to New York:
Most calculators report the economy figure regardless of cabin. That's a 3x undercount for business class flights.
Forgetting hotels
Accommodation is 10–40% of total trip emissions. A week in the Maldives produces more CO₂ from the hotel than most return flights:
The GHG Protocol includes accommodation in Scope 3 Category 6. If you're reporting flights but not hotels, you're not compliant.
No audit trail
CSRD requires disclosed emissions to be verifiable. That means your assessor needs to see which emission factor was applied, from which dataset, for which year.
Every emissions.dev response includes a source_trail — factor name, source, dataset, year, and region. Hand it straight to your assessor.
One trip. Two API calls. Full disclosure.
A London → Dubai business trip with 4 nights accommodation. Transport and hotel combined — that's complete Scope 3 Category 6 in two requests.
The hotel adds 10% to this trip. For destinations like South Africa or Maldives, it can exceed the flight. Reporting flights without hotels is incomplete — and your assessor will flag it.
// London → Dubai business trip: flights + hotel
const [travel, hotel] = await Promise.all([
fetch('https://api.emissions.dev/v1/travel/emissions?' +
new URLSearchParams({
origin_country: 'GB',
origin_location: 'London',
destination_country: 'AE',
destination_location: 'Dubai',
transport_mode: 'flight',
cabin_class: 'business',
return_trip: true
}), { headers: { Authorization: `Bearer ${key}` }}
),
fetch('https://api.emissions.dev/v1/hotel/emissions?' +
new URLSearchParams({
country: 'AE',
nights: 4
}), { headers: { Authorization: `Bearer ${key}` }}
)
]);
const t = (await travel.json()).data.attributes;
const h = (await hotel.json()).data.attributes;
// Total: 3,108 kg CO₂e
// Both report GHG Protocol Scope 3 Category 6
// Both include full source_trail for audit
From booking data to disclosure
You already have the data. We do the carbon maths.
Connect your travel data
Flight bookings, rail tickets, car hire, hotel stays — data your TMC, expense system, or booking tool already captures. Origin, destination, mode, cabin class.
We calculate the emissions
DEFRA 2025 emission factors, real road routing, cabin class multipliers, location-aware EV calculations, country-specific hotel factors. All automatic.
Export disclosure-ready data
Every response arrives pre-categorised by GHG Protocol scope with a full source trail. Aggregate and export — no manual factor lookups, no spreadsheets.
A typical company's travel footprint
200 employees. 50 fly monthly, mostly short-haul business class. 20 long-haul trips per year. Here's what DEFRA 2025 says that costs in carbon.
If this company reported economy-class factors for all flights and skipped hotels, they'd report ~140 tonnes — a 58% undercount. That's the gap between a flat estimate and actual calculation.
// Pull all travel bookings for the reporting year
$trips = BusinessTrip::whereYear('departure', 2025)->get();
$scope3_cat6 = 0;
foreach ($trips as $trip) {
// Transport emissions
$travel = Http::withToken($apiKey)
->get('https://api.emissions.dev/v1/travel/emissions', [
'origin_country' => $trip->from_country,
'origin_location' => $trip->from_city,
'destination_country' => $trip->to_country,
'destination_location' => $trip->to_city,
'transport_mode' => $trip->mode,
'cabin_class' => $trip->cabin,
'return_trip' => $trip->is_return,
]);
// Hotel emissions (if applicable)
$hotel = $trip->hotel_nights
? Http::withToken($apiKey)
->get('https://api.emissions.dev/v1/hotel/emissions', [
'country' => $trip->hotel_country,
'nights' => $trip->hotel_nights,
])
: null;
$scope3_cat6 += $travel->json('data.attributes.emissions.co2e');
$scope3_cat6 += $hotel?->json('data.attributes.emissions.co2e') ?? 0;
}
// $scope3_cat6 = 338,240 kg (338.2 tonnes)
// Every response included source_trail for audit
Nudge employees toward rail — with data
"Take the train when possible" is a vague policy. "This route produces 91% less CO₂ by rail" is a fact. Show the comparison at booking time.
For 50 employees making monthly London–Paris trips, switching to rail saves 6,600 kg CO₂e per year. That's a line item in your reduction strategy.
// Check carbon before approving a booking
async function checkTravelPolicy(booking, policy) {
// Get emissions for the requested mode
const res = await fetch(
`/v1/travel/emissions?` +
`origin_country=${booking.from_country}` +
`&destination_country=${booking.to_country}` +
`&transport_mode=${booking.mode}` +
`&cabin_class=${booking.cabin}` +
`&return_trip=true`
).then(r => r.json());
const co2e = res.data.attributes.emissions.co2e;
// Policy: suggest rail if flight < 800km
const dist = res.data.attributes.route.total_distance_km;
if (booking.mode === 'flight' && dist < 800) {
const rail = await fetch(
/* same params, mode=rail */
).then(r => r.json());
const saving = Math.round(
(1 - rail.data.attributes.emissions.co2e / co2e) * 100
);
return {
approved: false,
message: `Rail saves ${saving}% CO₂ on this route`,
flight_co2e: co2e,
rail_co2e: rail.data.attributes.emissions.co2e
};
}
return { approved: true, co2e };
}
Fits your existing stack
A REST API that plugs into any travel management or expense system.
Expense Platforms
Add a CO₂e column to expense reports. Calculate emissions from receipt data — origin, destination, mode, cabin class.
Travel Management
Show carbon at booking time. Compare modes. Flag high-carbon bookings for approval before they're confirmed.
ESG Platforms
Feed accurate travel data into your carbon accounting platform. Pre-categorised by GHG Protocol scope.
Custom Systems
REST API with JSON responses. Works with any language, any framework. Laravel, Django, Express, .NET — whatever you run.
CSRD, SECR, and the GHG Protocol all require this
The reporting landscape has shifted. Scope 3 is no longer optional for large companies. Business travel (Category 6) is one of the most straightforward categories to calculate — if you have the right data layer.
European Sustainability Reporting Standards require Scope 3 disclosure. Category 6 (Business Travel) must be quantified with verifiable methodology.
Streamlined Energy and Carbon Reporting requires UK companies to report energy use and carbon emissions in their annual reports.
The Corporate Value Chain (Scope 3) Standard defines Category 6 as all business travel in vehicles not owned by the reporting company.
Science Based Targets initiative requires companies to measure and reduce Scope 3 emissions. Accurate baselines start with accurate data.
// From the Travel API response
{
"emissions": {
"co2e": 1409,
"co2e_unit": "kg",
"co2e_calculation_method": "ipcc_ar6_gwp100",
"source_trail": [{
"data_category": "emission_factor",
"name": "Long-Haul Flight - Business Class",
"source": "DEFRA",
"source_dataset": "GHG Conversion Factors 2025",
"year": "2025",
"region": "GB"
}]
},
"meta": {
"standards_compliance": {
"GHG_Protocol": "Scope 3 Category 6 (Business Travel)"
}
}
}
// Your assessor sees:
// ✓ Which factor was applied
// ✓ From which dataset
// ✓ Which year
// ✓ Which GHG Protocol category
Build it yourself, or don't
Here's what accurate business travel carbon reporting actually requires.
Do it yourself
Download DEFRA spreadsheets, parse cabin class tables, map haul categories, update annually
Integrate road routing API, implement great circle for flights, handle haul band classification
License Ember data, map countries to grid intensity, recalculate annually
Source Cornell CHSB index, map to 60+ countries, handle regional fallbacks
Build factor provenance tracking, version control, methodology documentation
Estimated effort: 3–6 months engineering time + annual maintenance
Use emissions.dev
DEFRA 2025, cabin class multipliers, haul bands — always current, applied automatically
Pass origin + destination. We handle real road routing, haversine for flights, everything
110+ countries. Pass the origin country, we use the right grid. Updated annually.
60+ countries with DEFRA/Cornell factors. One extra API call per trip.
source_trail in every response. Factor name, dataset, year, region. Done.
Estimated effort: One afternoon to integrate. We handle the rest.
Two APIs. Complete coverage.
Business travel reporting uses our Travel API and Hotel API together.
Start reporting business travel emissions
Get your API key in 30 seconds. Calculate your first trip in under a minute. 500 free requests per month — enough to test with real data before committing.
No credit card · No sales calls · No procurement