> ## Documentation Index
> Fetch the complete documentation index at: https://code.dcycle.io/llms.txt
> Use this file to discover all available pages before exploring further.

# S3. Category 3: Fuel and Energy-Related Activities

> Learn how Dcycle automatically calculates upstream emissions from fuels and electricity not included in Scope 1 or 2

## Understanding Scope 3 Category 3

**Fuel and energy-related activities** (not included in Scope 1 or 2) cover the upstream emissions associated with the production and delivery of fuels and electricity consumed by your organization. According to the [GHG Protocol Scope 3 Standard](https://ghgprotocol.org/sites/default/files/2022-12/Chapter3.pdf), Category 3 includes:

* **Upstream emissions of purchased fuels**: Extraction, refining, and transportation of fuels (Well-to-Tank / WTT)
* **Upstream emissions of purchased electricity**: Extraction, refining, and transportation of fuels used in electricity generation
* **Transmission and distribution (T\&D) losses**: Energy lost in the grid during transmission
* **Generation of purchased electricity**: Emissions from power plants (when using market-based method)

```
┌─────────────────────────────────────────────────────────────────────────────┐
│              SCOPE 3 CATEGORY 3: Fuel & Energy-Related Activities           │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                              │
│  YOUR SCOPE 1 & 2 EMISSIONS                CATEGORY 3 (UPSTREAM)            │
│  ────────────────────────                  ──────────────────────           │
│                                                                              │
│  ┌─────────────────────┐                   ┌─────────────────────┐          │
│  │ Scope 1: Stationary │ ◄──────────────── │ WTT: Fuel           │          │
│  │ (Boilers, heaters)  │   Fuel burned     │ extraction &        │          │
│  │                     │                   │ refining            │          │
│  └─────────────────────┘                   └─────────────────────┘          │
│                                                                              │
│  ┌─────────────────────┐                   ┌─────────────────────┐          │
│  │ Scope 1: Mobile     │ ◄──────────────── │ WTT: Fuel           │          │
│  │ (Vehicles, fleet)   │   Fuel burned     │ production &        │          │
│  │                     │                   │ transport           │          │
│  └─────────────────────┘                   └─────────────────────┘          │
│                                                                              │
│  ┌─────────────────────┐                   ┌─────────────────────┐          │
│  │ Scope 2: Electricity│ ◄──────────────── │ Grid T&D losses +   │          │
│  │ (Grid power)        │   Power consumed  │ Upstream generation │          │
│  │                     │                   │                     │          │
│  └─────────────────────┘                   └─────────────────────┘          │
│                                                                              │
└─────────────────────────────────────────────────────────────────────────────┘
```

<Note>
  **Automatic Calculation**

  **Category 3 emissions are automatically calculated by Dcycle.** You don't need to upload any additional data—simply ensure your Scope 1 and Scope 2 data is complete, and Category 3 will be calculated automatically.

  This guide explains:

  * What Category 3 includes
  * How Dcycle calculates it
  * How to view Category 3 emissions in reports
</Note>

## How Category 3 Works in Dcycle

When you upload Scope 1 or Scope 2 data, Dcycle automatically calculates the corresponding Category 3 emissions:

| Your Input (Scope 1/2)    | Dcycle Calculates (Category 3)                            |
| ------------------------- | --------------------------------------------------------- |
| Fuel invoice (stationary) | `stationary_generation` - WTT emissions                   |
| Vehicle consumption       | `transport_generation` - WTT emissions                    |
| Electricity invoice       | `electricity_generation` - Upstream generation            |
| Electricity invoice       | `electricity_transmission_and_distribution` - T\&D losses |

```
┌─────────────────────────────────────────────────────────────────────────────┐
│                     AUTOMATIC CATEGORY 3 CALCULATION                         │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                              │
│  STEP 1: You upload data          STEP 2: Dcycle calculates automatically   │
│  ─────────────────────────        ───────────────────────────────────────   │
│                                                                              │
│  POST /invoices                   ┌─────────────────────────────────┐       │
│  {                                │ Scope 1: Stationary combustion  │       │
│    "type": "heat",        ───────►│ + Category 3: WTT emissions     │       │
│    "quantity": 5000,              └─────────────────────────────────┘       │
│    "facility_fuel_id": "..."                                                │
│  }                                                                          │
│                                                                              │
│  POST /vehicle_consumptions       ┌─────────────────────────────────┐       │
│  {                                │ Scope 1: Mobile combustion      │       │
│    "quantity": 500,       ───────►│ + Category 3: WTT emissions     │       │
│    "vehicle_id": "..."            └─────────────────────────────────┘       │
│  }                                                                          │
│                                                                              │
│  POST /invoices                   ┌─────────────────────────────────┐       │
│  {                                │ Scope 2: Electricity            │       │
│    "type": "electricity", ───────►│ + Category 3: T&D losses        │       │
│    "quantity": 10000,             │ + Category 3: Upstream gen      │       │
│    "unit_id": "kwh-uuid"          └─────────────────────────────────┘       │
│  }                                                                          │
│                                                                              │
└─────────────────────────────────────────────────────────────────────────────┘
```

## Category 3 Sub-Categories

### 3a. Upstream Emissions of Purchased Fuels (WTT)

**Well-to-Tank (WTT)** emissions cover the full upstream lifecycle of fuels before combustion:

* Extraction of raw materials (crude oil, natural gas, coal)
* Refining and processing
* Transportation to point of sale

<Tabs>
  <Tab title="Stationary Combustion (WTT)">
    When you upload a **fuel invoice** for stationary combustion (boilers, heaters, generators), Dcycle automatically calculates:

    * **Scope 1**: Direct emissions from burning the fuel (Tank-to-Wheel / TTW)
    * **Category 3**: Upstream emissions from fuel production (Well-to-Tank / WTT)

    ```
    Natural Gas Example:
    ─────────────────────────────────────────────────────────────────
    Your invoice: 5,000 m³ natural gas

    Scope 1 (TTW):     5,000 m³ × 2.0 kg CO₂e/m³  = 10,000 kg CO₂e
    Category 3 (WTT):  5,000 m³ × 0.4 kg CO₂e/m³  =  2,000 kg CO₂e
    ─────────────────────────────────────────────────────────────────
    Total lifecycle:                               = 12,000 kg CO₂e
    ```

    **Dcycle category:** `stationary_generation`
  </Tab>

  <Tab title="Mobile Combustion (WTT)">
    When you upload a **vehicle consumption** record, Dcycle automatically calculates:

    * **Scope 1**: Direct emissions from burning fuel in vehicle (TTW)
    * **Category 3**: Upstream emissions from fuel production (WTT)

    ```
    Diesel Vehicle Example:
    ─────────────────────────────────────────────────────────────────
    Your consumption: 500 liters diesel

    Scope 1 (TTW):     500 L × 2.68 kg CO₂e/L  = 1,340 kg CO₂e
    Category 3 (WTT):  500 L × 0.61 kg CO₂e/L  =   305 kg CO₂e
    ─────────────────────────────────────────────────────────────────
    Total lifecycle:                           = 1,645 kg CO₂e
    ```

    **Dcycle category:** `transport_generation`
  </Tab>
</Tabs>

<AccordionGroup>
  <Accordion title="WTT Emission Factor Sources">
    For Well-to-Tank (WTT) emissions, Dcycle uses emission factors from:

    **DEFRA (UK Department for Environment, Food & Rural Affairs):**

    * Comprehensive WTT factors for all fuel types
    * Covers extraction, refining, and transportation of fuels
    * Updated annually with UK Government GHG Conversion Factors
    * Source: [UK Government GHG Conversion Factors](https://www.gov.uk/government/collections/government-conversion-factors-for-company-reporting)

    Factors are automatically selected based on:

    * Fuel type (natural gas, diesel, petrol, LPG, etc.)
    * Year of consumption
  </Accordion>

  <Accordion title="WTT Calculation Details">
    WTT emissions are calculated as:

    **WTT CO₂e = Fuel Quantity × WTT Emission Factor**

    Where:

    * **Fuel Quantity**: Amount of fuel consumed (liters, m³, kg, kWh)
    * **WTT EF**: Well-to-Tank emission factor (kg CO₂e/unit)

    WTT factors typically represent 15-25% of total lifecycle emissions for most fuels:

    | Fuel Type   | TTW (Scope 1) | WTT (Category 3) | WTT as % of Total |
    | ----------- | ------------- | ---------------- | ----------------- |
    | Natural Gas | \~0.18 kg/kWh | \~0.03 kg/kWh    | \~14%             |
    | Diesel      | \~2.5 kg/L    | \~0.6 kg/L       | \~19%             |
    | Petrol      | \~2.2 kg/L    | \~0.5 kg/L       | \~19%             |
    | LPG         | \~1.6 kg/L    | \~0.3 kg/L       | \~16%             |

    \*Note: Actual values vary by country and year.
  </Accordion>
</AccordionGroup>

### 3b. Upstream Emissions of Purchased Electricity

When you upload an **electricity invoice**, Dcycle calculates upstream emissions from electricity generation:

```
Electricity Example:
─────────────────────────────────────────────────────────────────
Your invoice: 10,000 kWh electricity (Spain, 2024)

Scope 2 (Location-based):     10,000 kWh × 0.10 kg/kWh = 1,000 kg CO₂e
Category 3 (Upstream gen):    10,000 kWh × 0.02 kg/kWh =   200 kg CO₂e
─────────────────────────────────────────────────────────────────
```

**Dcycle category:** `electricity_generation`

<Accordion title="Electricity Generation Emission Factor Sources">
  For upstream electricity generation, Dcycle uses:

  * **Grid emission factors** adjusted for upstream fuel production
  * Factors account for the fuel mix used in electricity generation
  * Regional/national grid averages

  The upstream generation factor represents emissions from:

  * Extraction and processing of fuels used in power plants
  * Transportation of fuels to power plants
  * Construction and maintenance of generation infrastructure
</Accordion>

### 3c. Transmission and Distribution (T\&D) Losses

Grid electricity is lost during transmission and distribution. Dcycle calculates emissions associated with generating this lost electricity:

```
T&D Losses Example:
─────────────────────────────────────────────────────────────────
Your invoice: 10,000 kWh electricity delivered

T&D Loss Rate (Spain): ~5%
Electricity lost in grid: 10,000 × 5% = 500 kWh

Category 3 (T&D losses): 500 kWh × 0.10 kg/kWh = 50 kg CO₂e
─────────────────────────────────────────────────────────────────
```

**Dcycle category:** `electricity_transmission_and_distribution`

<Accordion title="T&D Loss Factor Sources">
  Transmission and distribution loss rates vary by country:

  | Country      | Typical T\&D Loss Rate |
  | ------------ | ---------------------- |
  | Spain        | \~5%                   |
  | Germany      | \~4%                   |
  | France       | \~6%                   |
  | UK           | \~8%                   |
  | US (average) | \~5%                   |

  Dcycle uses country-specific T\&D loss rates from:

  * IEA (International Energy Agency) statistics
</Accordion>

## Prerequisites for Category 3

Since Category 3 is automatically calculated, you simply need to ensure complete Scope 1 and Scope 2 data:

<Steps>
  <Step title="Complete Scope 1 Data">
    Upload all fuel consumption records:

    * Stationary combustion invoices (boilers, heaters, generators)
    * Vehicle consumption records (company fleet)

    [See Step 2: Scope 1 Guide →](/guides/emissions/ghg-protocol-step-2-scope-1)
  </Step>

  <Step title="Complete Scope 2 Data">
    Upload all electricity consumption records:

    * Electricity invoices for all facilities
    * District heating/cooling (if applicable)

    [See Step 3: Scope 2 Guide →](/guides/emissions/ghg-protocol-step-3-scope-2)
  </Step>

  <Step title="Category 3 Auto-Calculated">
    Dcycle automatically calculates Category 3 based on your Scope 1 and Scope 2 data.

    No additional action required!
  </Step>
</Steps>

<Tip>
  **Ensure Complete Coverage**

  Category 3 emissions are only calculated for data you upload. To get accurate Category 3 totals:

  * Include all fuel types across all facilities
  * Cover all vehicles in your fleet
  * Upload electricity for all locations

  Missing Scope 1/2 data = Missing Category 3 data
</Tip>

## Viewing Category 3 Emissions

### Query Category 3 by Sub-Category

```python theme={"theme":{"light":"github-light","dark":"github-dark"}}
import requests
import os

headers = {
    "Authorization": f"Bearer {os.getenv('DCYCLE_API_KEY')}",
    "Content-Type": "application/json",
    "x-organization-id": os.getenv("DCYCLE_ORG_ID"),
    "x-user-id": os.getenv("DCYCLE_USER_ID"),
}

# Query total impacts filtered by Category 3 categories
category_3_categories = [
    "stationary_generation",          # WTT from stationary fuels
    "transport_generation",           # WTT from mobile fuels
    "electricity_generation",         # Upstream electricity
    "electricity_transmission_and_distribution",  # T&D losses
]

response = requests.get(
    "https://api.dcycle.io/v1/total_impacts",
    headers=headers,
    params={
        "start_date": "2024-01-01",
        "end_date": "2024-12-31",
        "categories": ",".join(category_3_categories),
    },
).json()

# Aggregate by sub-category
from collections import defaultdict
by_category = defaultdict(float)

for impact in response.get("items", []):
    by_category[impact["category"]] += impact["emissions_per_day"]

print("📊 Scope 3 Category 3: Fuel & Energy-Related Activities")
print("=" * 60)

total = 0
for category, co2e in by_category.items():
    label = {
        "stationary_generation": "3a. WTT - Stationary Fuels",
        "transport_generation": "3a. WTT - Mobile Fuels",
        "electricity_generation": "3b. Upstream Electricity",
        "electricity_transmission_and_distribution": "3c. T&D Losses",
    }.get(category, category)

    print(f"   {label}: {co2e:,.0f} kg CO₂e")
    total += co2e

print("=" * 60)
print(f"   Total Category 3: {total:,.0f} kg CO₂e")
```

### Compare Category 3 to Scope 1 and 2

```python theme={"theme":{"light":"github-light","dark":"github-dark"}}
# Get Scope 1 emissions
scope1_response = requests.get(
    "https://api.dcycle.io/v1/total_impacts",
    headers=headers,
    params={
        "start_date": "2024-01-01",
        "end_date": "2024-12-31",
        "categories": "stationary,transport,recharge",
    },
).json()

scope1_total = sum(i["emissions_per_day"] for i in scope1_response.get("items", []))

# Get Scope 2 emissions
scope2_response = requests.get(
    "https://api.dcycle.io/v1/total_impacts",
    headers=headers,
    params={
        "start_date": "2024-01-01",
        "end_date": "2024-12-31",
        "categories": "electricity",
    },
).json()

scope2_total = sum(i["emissions_per_day"] for i in scope2_response.get("items", []))

# Category 3 total (from previous query)
cat3_total = total

print("\n📊 Emissions Comparison")
print("=" * 60)
print(f"   Scope 1 (Direct):        {scope1_total:>15,.0f} kg CO₂e")
print(f"   Scope 2 (Electricity):   {scope2_total:>15,.0f} kg CO₂e")
print(f"   Category 3 (Upstream):   {cat3_total:>15,.0f} kg CO₂e")
print("=" * 60)

# Calculate Category 3 as percentage of Scope 1+2
if (scope1_total + scope2_total) > 0:
    cat3_pct = cat3_total / (scope1_total + scope2_total) * 100
    print(f"   Category 3 as % of Scope 1+2: {cat3_pct:.1f}%")
```

<Note>
  **Typical Category 3 Ratios**

  Category 3 typically represents 15-25% of combined Scope 1 and Scope 2 emissions:

  * **WTT emissions**: \~15-20% of Scope 1
  * **Electricity upstream + T\&D**: \~5-10% of Scope 2

  If your Category 3 is significantly different, check that all Scope 1/2 data is uploaded.
</Note>

## Emission Factor Details

### WTT Factors by Fuel Type

| Fuel              | Unit        | TTW (Scope 1) | WTT (Cat 3) | WTT % |
| ----------------- | ----------- | ------------- | ----------- | ----- |
| Natural Gas       | kg CO₂e/kWh | \~0.18        | \~0.03      | \~14% |
| Diesel / Gas Oil  | kg CO₂e/L   | \~2.5         | \~0.6       | \~19% |
| Petrol / Gasoline | kg CO₂e/L   | \~2.2         | \~0.5       | \~19% |
| LPG               | kg CO₂e/L   | \~1.6         | \~0.3       | \~16% |
| Fuel Oil          | kg CO₂e/L   | \~2.9         | \~0.5       | \~15% |

\*Values are indicative. Actual factors vary by country and year.

### Electricity Factors (Spain Example)

| Component           | Typical Value (2024) |
| ------------------- | -------------------- |
| Scope 2 Grid EF     | \~0.10 kg CO₂e/kWh   |
| Category 3 Upstream | \~0.02 kg CO₂e/kWh   |
| T\&D Loss Rate      | \~5%                 |
| Category 3 T\&D     | \~0.005 kg CO₂e/kWh  |

<Accordion title="Emission Factor Update Frequency">
  Dcycle updates Category 3 emission factors:

  * **DEFRA WTT factors**: Updated annually when UK Government publishes new GHG Conversion Factors
  * **Grid factors**: Updated with each new Ecoinvent release or regulatory update
  * **T\&D loss rates**: Updated based on national grid operator data

  When factors are updated, you can recalculate historical data to apply new factors.
</Accordion>

## Best Practices

### 1. Ensure Complete Scope 1/2 Coverage

Category 3 is only as complete as your Scope 1 and Scope 2 data:

```python theme={"theme":{"light":"github-light","dark":"github-dark"}}
# Check for gaps in data coverage
def check_category_3_coverage(org_id, year):
    """Verify that Category 3 data is complete."""

    # Get all facilities
    facilities = requests.get(
        "https://api.dcycle.io/v1/facilities",
        headers=headers,
    ).json()

    # Get all vehicles
    vehicles = requests.get(
        "https://api.dcycle.io/v1/vehicles",
        headers=headers,
    ).json()

    coverage_issues = []

    # Check each facility has fuel/electricity data
    for facility in facilities.get("items", []):
        # Check for invoices
        invoices = requests.get(
            f"https://api.dcycle.io/v1/invoices",
            headers=headers,
            params={
                "facility_id": facility["id"],
                "start_date": f"{year}-01-01",
                "end_date": f"{year}-12-31",
            },
        ).json()

        if not invoices.get("items"):
            coverage_issues.append(
                f"⚠️ Facility '{facility['name']}' has no invoices for {year}"
            )

    # Check each vehicle has consumption data
    for vehicle in vehicles.get("items", []):
        consumptions = requests.get(
            f"https://api.dcycle.io/v1/vehicle_consumptions",
            headers=headers,
            params={
                "vehicle_id": vehicle["id"],
                "start_date": f"{year}-01-01",
                "end_date": f"{year}-12-31",
            },
        ).json()

        if not consumptions.get("items"):
            coverage_issues.append(
                f"⚠️ Vehicle '{vehicle['name']}' has no consumptions for {year}"
            )

    return coverage_issues
```

### 2. Use Dcycle Reports for Category 3

Category 3 is automatically included in Dcycle's GHG reports:

* **ISO 14064 Report**: Category 3 mapped to appropriate sub-categories
* **GHG Protocol Report**: Separate Category 3 line items
* **ESG Reports**: Included in Scope 3 totals

### 3. Track Category 3 Trends

Monitor Category 3 over time to validate data quality:

```python theme={"theme":{"light":"github-light","dark":"github-dark"}}
# Compare Category 3 as % of Scope 1+2 across years
for year in [2022, 2023, 2024]:
    # Get totals for each year
    scope1_2 = get_scope_1_2_total(year)
    cat3 = get_category_3_total(year)

    ratio = cat3 / scope1_2 * 100 if scope1_2 > 0 else 0

    print(f"{year}: Category 3 = {ratio:.1f}% of Scope 1+2")

# Ratio should be relatively stable (15-25%)
# Large variations may indicate data gaps
```

## Troubleshooting

### Issue: Category 3 is Zero or Missing

```python theme={"theme":{"light":"github-light","dark":"github-dark"}}
# Check if Category 3 is being calculated
cat3_total = get_category_3_total(2024)

if cat3_total == 0:
    print("⚠️ Category 3 is zero. Possible causes:")
    print("   1. No Scope 1 fuel data uploaded")
    print("   2. No Scope 2 electricity data uploaded")
    print("   3. Custom emission factors used (WTT not calculated)")

    # Check for custom emission factors
    # Custom EFs bypass automatic WTT calculation
```

### Issue: Custom Emission Factors and Category 3

<Warning>
  **Custom Emission Factors**

  When you use a **custom emission factor** for fuel or electricity, Dcycle does **not** automatically calculate Category 3 WTT emissions. This is because custom factors may already include lifecycle emissions.

  If your custom factor is:

  * **TTW only**: You should manually add Category 3 data
  * **WTW (lifecycle)**: Category 3 is already included—don't double count

  Check with your custom factor source to understand what's included.
</Warning>

### Issue: Category 3 Seems Too High/Low

```python theme={"theme":{"light":"github-light","dark":"github-dark"}}
# Verify ratio is within expected range
expected_range = (0.15, 0.25)  # 15-25% of Scope 1+2

scope1_2 = get_scope_1_2_total(2024)
cat3 = get_category_3_total(2024)
ratio = cat3 / scope1_2 if scope1_2 > 0 else 0

if ratio < expected_range[0]:
    print(f"⚠️ Category 3 ({ratio:.1%}) below typical range")
    print("   Possible causes:")
    print("   - Some fuels using custom EFs (no WTT calculated)")
    print("   - Fuel types with low WTT factors")

elif ratio > expected_range[1]:
    print(f"⚠️ Category 3 ({ratio:.1%}) above typical range")
    print("   Possible causes:")
    print("   - High proportion of electricity vs direct fuel")
    print("   - Countries with high T&D losses")
```

## Next Steps

<CardGroup cols={2}>
  <Card title="Step 2: Scope 1" icon="fire" href="/guides/emissions/ghg-protocol-step-2-scope-1">
    Complete your Scope 1 data for accurate Category 3
  </Card>

  <Card title="Step 3: Scope 2" icon="bolt" href="/guides/emissions/ghg-protocol-step-3-scope-2">
    Complete your Scope 2 data for T\&D calculations
  </Card>

  <Card title="Category 4: Upstream Transport" icon="truck" href="/guides/emissions/logistics-tutorial">
    Track transportation of purchased goods
  </Card>

  <Card title="Scope 3 Overview" icon="layer-group" href="/guides/emissions/ghg-protocol-step-4-scope-3">
    Back to all Scope 3 categories
  </Card>
</CardGroup>
