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

# Calculations

# Detailed walkthrough of calculations

## Entity Definitions

### Channels

| Channel             | Description                                    |
| ------------------- | ---------------------------------------------- |
| `web`               | Website that is not primarily social or CTV    |
| `app`               | Mobile app that is not primarily social or CTV |
| `social`            | A social platform (Snapchat, Facebook, etc)    |
| `ctv-bvod`          | A TV-like streaming platform                   |
| `streaming-video`   | Website or app with online video content       |
| `digital-audio`     | Audio content (podcasts, streaming music)      |
| `dooh`              | Digital out of home - billboards, transit, etc |
| `search`            | A Search engine (Google, Bing, etc)            |
| `linear-tv`         | Scheduled broadcast or cable television        |
| `traditional-radio` | Scheduled audio broadcast                      |

### Device Types

| Device type     | Description                                 |
| --------------- | ------------------------------------------- |
| `phone`         | A phone                                     |
| `tablet`        | A tablet                                    |
| `pc`            | A pc with a monitor or a laptop             |
| `tv`            | A TV                                        |
| `smart-speaker` | A smart speaker - Amazon Echo or equivalent |

### Network Types

| Network type | Description                 |
| ------------ | --------------------------- |
| `mobile`     | A mobile network (3G/4G/5G) |
| `fixed`      | A fixed network (broadband) |

### Video Player

| Field               | Description                                                              |
| ------------------- | ------------------------------------------------------------------------ |
| `size_bytes`        | Size of the javascript/html for a video player if present                |
| `buffering_seconds` | Video player buffering - if player preloads content, leave blank         |
| `download_trigger`  | What starts the content download - impression, view (ie lazy load), play |

### [Ad Format](./creative#terminology-placements-ad-formats-creatives-and-assets)

| Field                    | Description                                                                                  |
| ------------------------ | -------------------------------------------------------------------------------------------- |
| `rendered_width_pixels`  | Width of the creative when rendered. Leave blank for responsive (will assume screen width)   |
| `rendered_height_pixels` | Height of the creative when rendered. Leave blank for responsive (will assume screen height) |
| `image_sizes`            | Array of image dimensions (eg `["300x250", "70x70"]`)                                        |
| `audio_duration_seconds` | Audio duration (if applicable)                                                               |
| `video_duration_seconds` | Video duration (if applicable)                                                               |
| `video_player`           | Video player used to render video (if applicable)                                            |
| `other_assets_bytes`     | Metadata, text, html, etc                                                                    |
| `ad_platforms`           | Ad serving, verification, and measurement ad platforms wrapping or embedded in the ad format |

#### Sample Ad Formats:

300x250 programmatic banner

```
image_sizes = ['300x250']
rendered_width_pixels = 300,
rendered_height_pixels = 250
```

30 second audio inserted into a podcast

```
audio_duration_seconds = 30
```

15 second outstream video

```
video_duration_seconds = 15;
video_player = 'default',
rendered_width_pixels = 500,
rendered_height_pixels = 400
```

Native product carousel

```
  image_sizes = ['400x400','400x400','400x400'],
  other_assets_bytes = 7321,
  rendered_height_pixels = 600,
  rendered_width_pixels = 450
```

### Property

| Field                                           | Description                                                                                    |
| ----------------------------------------------- | ---------------------------------------------------------------------------------------------- |
| `channels`                                      | The channel(s) of this property                                                                |
| `average_seconds_per_session_excluding_ads`     | The average length of a session on this property excluding ads (eg 44 min of a 60 min TV show) |
| `average_imps_per_session`                      | The average number of impressions per session                                                  |
| `average_data_kb_per_session_excluding_ads`     | The average number of KB transferred during a session excluding ads                            |
| `video_bitrate_kbps`                            | The average bitrate for a CTV-BVOD property (e.g. 4200 kbps)                                   |
| `ad_funded_percentage`                          | 0-100 The percentage of content funded by advertising (eg 50)                                  |
| `allocated_adjusted_corporate_emissions_kgco2e` | This property's share of corporate emissions                                                   |
| `total_sessions`                                | Number of sessions in the same time period as corporate emissions                              |
| `organization_model_quality`                    | Parent organization model quality (1-5)                                                        |
| `model_quality`                                 | Model quality (1-5)                                                                            |

### Ad Platform

| Field                                                   | Description                                                                                 |
| ------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
| `emissions_per_creative_request_per_geo_gco2_per_imp`   | Adjusted, allocated emissions per creative request by continent (NAMER, LATAM, EMEA, JAPAC) |
| `usage_emissions_per_bid_request_per_geo_gco2_per_imp`  | Adjusted, allocated emissions per bid request by continent (NAMER, LATAM, EMEA, JAPAC)      |
| `usage_emissions_per_rtdp_request_per_geo_gco2_per_imp` | Adjusted, allocated emissions per rtdp request by continent (NAMER, LATAM, EMEA, JAPAC)     |
| `bidders`                                               | Array of ad platforms that are sent bid requests                                            |
| `real_time_data_providers`                              | Array of ad platforms that are sent real-time data requests (not propagated)                |
| `distribution_rate_by_bidder_by_country`                | Traffic shaping data for each bidder by country (eg `'xandr.com', 'US', 0.58`)              |
| `average_bid_request_size`                              | Average size of a client-side bid request                                                   |
| `sends_client_side_requests`                            | Does this platform send client-side bid requests (eg prebid client)                         |
| `model_quality`                                         | Model quality (1-5)                                                                         |

### Placement

| Field          | Description                               |
| -------------- | ----------------------------------------- |
| `ad_platforms` | The ad platforms called by this placement |

### Delivery Row

| Field                                      | Description                                                                                                 |
| ------------------------------------------ | ----------------------------------------------------------------------------------------------------------- |
| `impressions`                              | The number of impressions counted (required for all channels other than DOOH)                               |
| `views`                                    | The number of views counted                                                                                 |
| `plays`                                    | The number of plays (required for DOOH)                                                                     |
| `utc_datetime`                             | Date and time, in UTC, when impressions were delivered                                                      |
| `country`                                  | The country where the impression was delivered                                                              |
| `region`                                   | The region of the country where the impression was delivered                                                |
| `channel`                                  | See [channels](#channels)                                                                                   |
| `device_type`                              | See [device types](#device-types)                                                                           |
| `network_type`                             | See [network types](#network-types)                                                                         |
| `property`                                 | See [property](#property)                                                                                   |
| `creative_ad_format`                       | Either a basic or vendor-provided ad format                                                                 |
| `creative_ad_platforms`                    | Ad serving, verification, and measurement ad platforms wrapping or embedded in the creative                 |
| `creative_total_image_data_transfer_bytes` | Total bytes for the data transfer for the image itself for all impressions, ideally measured by the CDN     |
| `creative_image_sizes`                     | Array of image sizes included in the creative                                                               |
| `creative_total_audio_data_transfer_bytes` | Total bytes for the data transfer for the core audio asset for all impressions, ideally measured by the CDN |
| `creative_audio_duration_seconds`          | Average audio duration in seconds for a single impression                                                   |
| `creative_total_video_data_transfer_bytes` | Total bytes for the data transfer for the core video asset for all loads, ideally measured by the CDN       |
| `creative_video_vast_bytes`                | Average size of VAST/VPAID wrapper for the video in bytes for a single load                                 |
| `creative_video_bitrate_kbps`              | Video bitrate *as delivered* in kilobits per second                                                         |
| `creative_video_size_bytes`                | Average video size *as delivered* in bytes for a single load                                                |
| `creative_video_duration_seconds`          | Video duration in seconds                                                                                   |
| `creative_video_view_time_seconds`         | Average time, in seconds, that a video is viewed                                                            |
| `creative_video_view_rate`                 | Average percentage of a video that is viewed                                                                |
| `creative_time_in_view_seconds`            | Time that the creative was visible on the device                                                            |
| `creative_is_3p_served`                    | Is the ad format served by a third party ad server                                                          |

## Defaults

### Conventional model data transfer by network type

The Scope3 values below are from [GMSF 1.2](https://adnetzero.com/wp-content/uploads/2025/06/GlobalMediaSustainabilityFrameworkV1.2.pdf).
SRI values from [SRIxAD database 2.1](https://github.com/SRISyndicatRegiesInternet/SRIxAD-DigitalCampaignsCarbonFramework/releases/download/v2.1.0/Referentiel.SRI.x.AD.-.V2.1_partage.zip), original source ADEME\_220830\_v1.4 (now considered outdated).

```
default_usage_kwh_per_gb:
  scope3:
    fixed:  0.0165
    mobile: 0.117
  sri:
    fixed:  0.0687
    mobile: 0.236
default_network_embodied_emissions_gco2e_per_kb:
  scope3:
    fixed:  0.00000214
    mobile: 0.00000870
  sri:
    fixed:  0.00000443
    mobile: 0.00000797
```

### Power model data transfer by network type

From [Carbon impact of video streaming (Carbon Trust)](https://ctprodstorageaccountp.blob.core.windows.net/prod-drupal-files/documents/resource/public/Carbon-impact-of-video-streaming.pdf), Table 5; and calculated [here](./data_transfer#fixed-network)

```
default_baseload_watts:
  fixed:     9.55
  mobile:    1.2
default_dynamic_watts_per_mbps:
  fixed:    0.030
  mobile:    1.53
```

### Mobile to fixed ratios by country

From [ITU Data Hub](https://datahub.itu.int/) (2024 data), these ratios do not apply to TV and Smart Speakers for which a specific `default_percent_mobile_by_device_type` is set.

```
default_percent_mobile:
  scope3: 23.6
  sri:    10.0
default_percent_mobile_by_country:
  scope3:
    AD: 2.982
    AE: 12.538
    AL: 11.136
    AM: 12.329
    AO: 81.256
    AT: 42.451
    AU: 10.022
    AZ: 3.017
    BD: 47.386
    BE: 6.379
    BG: 14.554
    BH: 37.964
    BJ: 80.867
    BR: 14.080
    BS: 6.093
    BT: 99.203
    BW: 50.891
    BY: 18.362
    CA: 3.853
    CH: 17.137
    CI: 45.733
    CL: 16.351
    CM: 23.455
    CN: 13.541
    CO: 39.500
    CR: 7.691
    CU: 83.348
    CV: 23.001
    CY: 14.170
    CZ: 8.683
    DE: 6.048
    DJ: 72.578
    DK: 15.555
    DZ: 31.775
    EC: 13.019
    EG: 18.791
    ES: 9.643
    ET: 46.640
    FI: 40.870
    FR: 48.973
    GB: 5.660
    GE: 10.658
    GH: 85.514
    GQ: 99.999
    GR: 13.514
    HK: 16.645
    HN: 43.333
    HR: 23.090
    HU: 13.856
    ID: 66.646
    IE: 14.068
    IN: 68.162
    IQ: 9.969
    IR: 75.197
    IS: 18.209
    IT: 17.130
    JM: 13.521
    JO: 32.758
    JP: 16.092
    KE: 40.356
    KG: 51.686
    KM: 99.934
    KR: 8.777
    KW: 88.149
    KZ: 46.552
    LI: 5.123
    LK: 69.934
    LS: 70.932
    LV: 30.723
    MA: 30.585
    MC: 7.871
    ME: 18.232
    MG: 50.644
    MK: 13.946
    MN: 36.233
    MU: 21.725
    MV: 5.177
    MW: 98.758
    MX: 11.922
    MY: 52.676
    NG: 99.451
    NI: 51.951
    NZ: 4.667
    OM: 10.984
    PF: 21.958
    PK: 50.498
    PL: 13.454
    PT: 8.261
    QA: 15.876
    RO: 12.554
    RS: 22.423
    RU: 23.846
    RW: 39.736
    SA: 22.528
    SC: 27.379
    SI: 14.154
    SK: 15.316
    SM: 7.767
    SN: 45.455
    ST: 16.373
    TG: 10.455
    TH: 36.910
    TN: 15.826
    TR: 19.035
    TT: 6.732
    TW: 26.130
    TZ: 98.330
    UG: 92.443
    US: 5.723
    UY: 14.077
    UZ: 59.382
    VE: 4.700
    VN: 8.577
    VU: 97.689
    YE: 16.667
    ZA: 35.193
    ZW: 22.887
default_percent_mobile_by_device_type:
  scope3:
    pc: 3.0
    smart-speaker: 0.001
    tablet: 10.0
    tv: 0.001
```

### Video player characteristics

Default video player size from [GMSF 1.2](https://adnetzero.com/wp-content/uploads/2025/06/GlobalMediaSustainabilityFrameworkV1.2.pdf)

```
default_video_player_size_bytes: 350000
default_video_player_download_trigger:
  web:      'impression'
  app:      'impression'
  ctv-bvod: 'impression'
  streaming-video: 'impression'
  dooh:     'play'
  search:   'impression'
  social:   'impression'
```

### Media size

Based on [YouTube recommendations](https://support.google.com/youtube/answer/1722171), [Wikipedia](https://en.wikipedia.org/wiki/JPEG)

```
default_image_compression_ratio:   10
default_non_primary_video_bitrate_kbps: 1200
default_video_bitrate_kbps:
  phone:           800
  tablet:          1000
  pc:              1200
  tv:              3690
default_audio_bitrate_kbps:
  phone:            160
  tablet:           160
  pc:               160
  tv:               160
  smart-speaker:    160
  radio:            160
```

### Device size

From common devices (Quad HD 27” monitor, iPhone 13, Nexus 5X, iPad Air 1/2, iPad 2/3, Nexus 9, 1080P TV).

**Note**: We use the software resolution, not the hardware resolution, to avoid underestimating the actual visual coverage of the ad displayed on screen.

```
default_rendered_device_height:
  pc: 1080
  phone: 844
  tablet: 820
  tv: 1080
default_rendered_device_width:
  pc: 1920
  phone: 390
  tablet: 1180
  tv: 1920
```

### Device energy use and embodied emissions

See [Consumer Devices](./consumer_devices)

```
default_device_watts:
  scope3:
    pc: 55.44
    phone: 4.68
    radio: 6.55
    smart-speaker: 2.5
    tablet: 5.04
    tv: 136.8
  sri:
    phone:          2.856
    pc:            29.4
    tablet:        29.4
    tv:            81.6
default_device_embodied_emissions_per_second:
  scope3:
    phone:          0.00655
    pc:             0.00545
    tablet:         0.0257
    tv:             0.00865
    smart-speaker:  0.0061
    radio:          0.002514375
  sri:
    phone:          0.00946
    pc:             0.0132
    tablet:         0.0128
    tv:             0.00889
default_audio_power_utilization:
  pc: 0.84
  phone: 0.36
  tablet: 0.36
  tv: 0.92
  smart-speaker: 1.0
  radio: 1.0
default_device_usage_emissions_from_fuel_consumption_per_second:
  phone:          0
  pc:             0
  tablet:         0
  tv:             0
  smart-speaker:  0
  radio:          0.005
```

### Time in view for non-video ads

Default in view time from [GMSF 1.2](https://adnetzero.com/wp-content/uploads/2025/06/GlobalMediaSustainabilityFrameworkV1.2.pdf)

```
default_time_in_view_seconds: 3
```

### Ad platform defaults

Observations from various channels and CDN / Edge Node emission factors from [GMSF 1.2](https://adnetzero.com/wp-content/uploads/2025/06/GlobalMediaSustainabilityFrameworkV1.2.pdf)

```
default_consumer_device_request_size_bytes:
  web:             3000
  app:             3000
  ctv-bvod:        3000
  dooh:            3000
  audio:           3000
  social:          3000
  streaming-video: 3000
  search: 300

default_emissions_per_creative_request_gco2_per_imp: 0.0003
default_emissions_per_bid_request_gco2_per_imp:      0.11442
default_emissions_per_rtdp_request_gco2_per_imp:     0.01
default_emissions_generic_ad_server_gco2_per_imp: 0.000016
default_emissions_generic_ad_server_gco2_per_imp_by_channel:
  social: 0.0043
default_emissions_ad_selection_gco2_per_imp_by_channel:
  search: 0.0012293
  dooh: 0.00384
default_count_ad_platform:
  search: 1
  dooh: 6

generic_creative_ad_server:
  emissions_per_creative_request_per_geo_gco2_per_imp:
    NAMER: 0.0001
    EMEA: 0.0001
    JAPAC: 0.0003
    LATAM: 0.0001
generic_measurement_platform:
  emissions_per_creative_request_per_geo_gco2_per_imp:
    NAMER: 0.0001
    EMEA: 0.0001
    JAPAC: 0.0003
    LATAM: 0.0001
default_platform_embodied_emissions_per_bid_request_gco2e_per_imp: 0.000015
edge_node_embodied_gco2e_per_kb: 0.000000588
edge_node_use_watts_per_kb: 0.00000043
```

### Channel and device type mappings

The default ad formats for the Web and App channels are based on the [GMSF 1.2](https://adnetzero.com/wp-content/uploads/2025/06/GlobalMediaSustainabilityFrameworkV1.2.pdf) defaults for creative payload.

```
default_channel_by_device:
  phone:
    - social
    - ctv-bvod
    - digital-audio
    - app
    - web
    - search
    - streaming-video
    - linear-tv
    - traditional-radio
  tablet:
    - social
    - ctv-bvod
    - digital-audio
    - app
    - web
    - search
    - streaming-video
    - linear-tv
    - traditional-radio
  pc:
    - ctv-bvod
    - social
    - digital-audio
    - web
    - search
    - streaming-video
    - linear-tv
    - traditional-radio
  tv:
    - linear-tv
    - ctv-bvod
    - digital-audio
    - traditional-radio
    - web
    - search
  smart-speaker:
    - digital-audio
  radio:
    - traditional-radio
default_device_by_channel:
  social:          phone
  ctv-bvod:        tv
  streaming-video: pc
  digital-audio:   phone
  app:             phone
  web:             pc
  dooh:            tv
  linear-tv:       tv
  search:          phone
  traditional-radio: radio
default_platform_ad_format_identifier_by_channel:
  dooh:               landscape-dooh
  social:             1080-1920-sponsored-post-social-phone
  ctv-bvod:           15s-video-ctv-bvod-tv
  streaming-video:    15s-video-streaming-video-pc
  digital-audio:      30s-audio-digital-audio-phone
  app:                generic-gmsf-1-2-display-ad-app-phone
  web:                generic-gmsf-1-2-display-ad-web-pc
  linear-tv:          30s-video-ctv-bvod-tv
  search:             generic-search-ad-search-phone
  traditional-radio:  30s-radio-traditional-radio-radio
  classic-ooh: 6-sheet-classic-ooh-panel
default_platform_ad_format_by_channel:
  dooh:     Landscape - 1920x1080 Image
  social:   Sponsored Post - 1080x1920 Image
  ctv-bvod: 15s Video
  streaming-video: 15s Video
  digital-audio:    30s Audio
  app:      Generic GMSF 1.2 Display Ad
  web:      Generic GMSF 1.2 Display Ad
  linear-tv: 30s Video
  search:    Generic Search Ad
  traditional-radio: 30s Radio
  classic-ooh: 6 Sheet
default_print_ad_format_by_medium:
  journal:   Full Page Magazine
  newspaper: Quarter Page Newspaper
  magazine:  Full Page Magazine
  leaflet:   Full Page Leaflet
default_property_average_imps_per_session_by_channel:
  social:   24
  ctv-bvod: 18
  streaming-video: 1
  digital-audio:    4.8
  app:      14
  web:      32
  linear-tv: 30
  search: 12
  traditional-radio: 21.5
default_property_ad_funded_percentage_by_channel:
  dooh:     100
  social:   100
  ctv-bvod: 100
  streaming-video: 100
  digital-audio:    100
  app:      100
  web:      100
  linear-tv: 100
  search:    100
  traditional-radio: 100
default_average_seconds_per_session_excluding_ads_by_channel:
  social:   240
  ctv-bvod: 2580
  streaming-video: 143
  digital-audio:    1500
  app:      140
  web:      320
  linear-tv: 2580
  search:    120
  traditional-radio: 2580
default_average_data_kb_per_session_seconds_excluding_ads_by_channel:
  social:   38
  app:      29.5
  web:      1.011
  search:   1.011
default_property_g_per_imp_by_channel:
  dooh:     0.049
  social:   0.15
  streaming-video: 0.049
  ctv-bvod: 0.280
  digital-audio:    0.049
  app:      0.049
  web:      0.049
  search: 0.049
```

### Broadcasting defaults

```
default_percent_tv_distribution_method:
  cable: 28.6
  iptv: 25.2
  ota: 26.2
  satellite: 20
default_percent_tv_distribution_method_by_country:
  AU:
    cable: 9.2
    iptv: 40.8
    ota: 45.4
    satellite: 4.6
  DE:
    cable: 41.5
    iptv: 9.6
    ota: 3.4
    satellite: 45.5
  FR:
    cable: 0
    iptv: 46
    ota: 46
    satellite: 8
  GB:
    cable: 8.9
    iptv: 27.5
    ota: 40.6
    satellite: 23
  US:
    cable: 43.3
    iptv: 20.7
    ota: 19.3
    satellite: 16.7
default_tv_signal_preparation_power_watt: 16700
default_tv_signal_transmission_power_by_tv_distribution_method_watt:
  cable: 16000
  ota: 165000
  satellite: 3150
default_tv_signal_transmission_embodied_gco2e_per_second: 27
default_tv_home_equipment_power_by_tv_distribution_method_watt:
  cable: 16
  iptv: 21
  ota: 1
  satellite: 22
default_tv_home_equipment_embodied_gco2e_per_second_by_tv_distribution_method:
  cable: 0.005346759
  iptv: 0.005492307
  ota: 0.001354252
  satellite: 0.011423331
default_device_per_impression:
  app: 1
  digital-audio: 1
  ctv-bvod: 1
  linear-tv: 0.667
  streaming-video: 1
  web: 1
  traditional-radio: 0.667
default_property_g_per_play_by_channel:
  linear-tv: 790
  traditional-radio: 790
default_iptv_network_distribution:
  fixed: 0.999
  mobile: 0.001
default_percent_radio_distribution_method:
  fm: 60
  am: 15
  ota: 20
  satellite: 5
default_radio_signal_transmission_power_by_radio_distribution_method_watt:
  fm: 245000
  am: 273000
  ota: 106000
  satellite: 3150
default_radio_signal_transmission_embodied_by_radio_distribution_method_gco2e_per_second:
  fm: 7
  am: 10
  ota: 5
  satellite: 6
```

### Creative storage defaults

Emission factors from [GMSF 1.2](https://adnetzero.com/wp-content/uploads/2025/06/GlobalMediaSustainabilityFrameworkV1.2.pdf), along with assumptions on average distribution per storage type, default multipliers to estimate the required storage space based on the delivered creative size and default impressions per creative.

```
default_impressions_per_creative: 1000000
default_storage_kgco2e_per_gb:
  cloud_storage: 0.0253
  hard_disk_drive: 0.16
  linear_tape_open: 0.00114
  solid_state_drive: 0.02
default_storage_usage_pct:
  cloud_storage: 45
  hard_disk_drive: 25
  linear_tape_open: 10
  solid_state_drive: 20
creative_raw_asset_size_factor_by_channel:
  app: 20
  ctv-bvod: 50
  digital-audio: 5
  dooh: 5
  linear-tv: 50
  search: 0
  social: 20
  streaming-video: 20
  traditional-radio: 5
  web: 20
creative_work_iterations_factor_by_channel:
  app: 1
  ctv-bvod: 1
  digital-audio: 1
  dooh: 1
  linear-tv: 1
  search: 1
  social: 1
  streaming-video: 1
  traditional-radio: 1
  web: 1
```

### Asset size defaults

```
default_display_other_assets_bytes: 50000
default_display_creative_overhead_factor: 0.2
```

### Classic OOH defaults

```
default_ad_landfill_emissions_kgco2e_per_sq_metre: 0.291
default_ad_pct_recycling:
  classic-ooh: 20.0
default_ad_recycling_emissions_kgco2e_per_sq_metre: 0.1
default_corporate_emissions_kgco2e_per_panel_per_day: 0.3
default_embodied_emissions_kgco2e_per_sq_metre: 115.0
default_emissions_kgco2e_per_km_travelled: 0.2543
default_mechanical_rotation_power_draw_watts_per_sq_metre_per_hour: 12.5
default_digital_screen_landfill_emissions_kgco2e_per_sq_metre: 20.9
default_expected_lifetime_years: 10.0
default_illumination_power_draw_watts_per_sq_metre_per_hour: 100.0
default_ooh_ad_production_kgco2e_emissions_per_sq_metre: 3.78
default_ooh_campaign_duration_days: 14
default_ooh_share_of_time_pct: 100.0
default_panel_to_disposal_distance_per_ad_km: 4.0
default_printing_to_storage_distance_km_per_ad:
  classic-ooh:
    AD: 0.5
    AE: 0.5
    AL: 0.5
    AM: 0.5
    AO: 0.5
    AT: 0.5
    AU: 0.5
    AZ: 0.5
    BD: 0.5
    BE: 0.5
    BG: 0.5
    BH: 0.5
    BJ: 0.5
    BR: 0.5
    BS: 0.5
    BT: 0.5
    BW: 0.5
    BY: 0.5
    CA: 0.5
    CH: 0.5
    CI: 0.5
    CL: 0.5
    CM: 0.5
    CN: 0.5
    CO: 0.5
    CR: 0.5
    CU: 0.5
    CV: 0.5
    CY: 0.5
    CZ: 0.5
    DE: 0.5
    DJ: 0.5
    DK: 0.5
    DZ: 0.5
    EC: 0.5
    EG: 0.5
    ES: 0.5
    ET: 0.5
    FI: 0.5
    FR: 0.5
    GB: 0.5
    GE: 0.5
    GH: 0.5
    GQ: 0.5
    GR: 0.5
    HK: 0.5
    HN: 0.5
    HR: 0.5
    HU: 0.5
    ID: 0.5
    IE: 0.5
    IN: 0.5
    IQ: 0.5
    IR: 0.5
    IS: 0.5
    IT: 0.5
    JM: 0.5
    JO: 0.5
    JP: 0.5
    KE: 0.5
    KG: 0.5
    KM: 0.5
    KR: 0.5
    KW: 0.5
    KZ: 0.5
    LI: 0.5
    LK: 0.5
    LS: 0.5
    LV: 0.5
    MA: 0.5
    MC: 0.5
    ME: 0.5
    MG: 0.5
    MK: 0.5
    MN: 0.5
    MU: 0.5
    MV: 0.5
    MW: 0.5
    MX: 0.5
    MY: 0.5
    NG: 0.5
    NI: 0.5
    NZ: 0.5
    OM: 0.5
    PF: 0.5
    PK: 0.5
    PL: 0.5
    PT: 0.5
    QA: 0.5
    RO: 0.5
    RS: 0.5
    RU: 0.5
    RW: 0.5
    SA: 0.5
    SC: 0.5
    SI: 0.5
    SK: 0.5
    SM: 0.5
    SN: 0.5
    ST: 0.5
    TG: 0.5
    TH: 0.5
    TN: 0.5
    TR: 0.5
    TT: 0.5
    TW: 0.5
    TZ: 0.5
    UG: 0.5
    US: 0.5
    UY: 0.5
    UZ: 0.5
    VE: 0.5
    VN: 0.5
    VU: 0.5
    YE: 0.5
    ZA: 0.5
    ZW: 0.5
default_storage_emissions_kgco2e_per_panel: 0.01648333
default_storage_to_installation_distance_km_per_ad:
  classic-ooh:
    AD: 4.0
    AE: 4.0
    AL: 4.0
    AM: 4.0
    AO: 4.0
    AT: 4.0
    AU: 4.0
    AZ: 4.0
    BD: 4.0
    BE: 4.0
    BG: 4.0
    BH: 4.0
    BJ: 4.0
    BR: 4.0
    BS: 4.0
    BT: 4.0
    BW: 4.0
    BY: 4.0
    CA: 4.0
    CH: 4.0
    CI: 4.0
    CL: 4.0
    CM: 4.0
    CN: 4.0
    CO: 4.0
    CR: 4.0
    CU: 4.0
    CV: 4.0
    CY: 4.0
    CZ: 4.0
    DE: 4.0
    DJ: 4.0
    DK: 4.0
    DZ: 4.0
    EC: 4.0
    EG: 4.0
    ES: 4.0
    ET: 4.0
    FI: 4.0
    FR: 4.0
    GB: 4.0
    GE: 4.0
    GH: 4.0
    GQ: 4.0
    GR: 4.0
    HK: 4.0
    HN: 4.0
    HR: 4.0
    HU: 4.0
    ID: 4.0
    IE: 4.0
    IN: 4.0
    IQ: 4.0
    IR: 4.0
    IS: 4.0
    IT: 4.0
    JM: 4.0
    JO: 4.0
    JP: 4.0
    KE: 4.0
    KG: 4.0
    KM: 4.0
    KR: 4.0
    KW: 4.0
    KZ: 4.0
    LI: 4.0
    LK: 4.0
    LS: 4.0
    LV: 4.0
    MA: 4.0
    MC: 4.0
    ME: 4.0
    MG: 4.0
    MK: 4.0
    MN: 4.0
    MU: 4.0
    MV: 4.0
    MW: 4.0
    MX: 4.0
    MY: 4.0
    NG: 4.0
    NI: 4.0
    NZ: 4.0
    OM: 4.0
    PF: 4.0
    PK: 4.0
    PL: 4.0
    PT: 4.0
    QA: 4.0
    RO: 4.0
    RS: 4.0
    RU: 4.0
    RW: 4.0
    SA: 4.0
    SC: 4.0
    SI: 4.0
    SK: 4.0
    SM: 4.0
    SN: 4.0
    ST: 4.0
    TG: 4.0
    TH: 4.0
    TN: 4.0
    TR: 4.0
    TT: 4.0
    TW: 4.0
    TZ: 4.0
    UG: 4.0
    US: 4.0
    UY: 4.0
    UZ: 4.0
    VE: 4.0
    VN: 4.0
    VU: 4.0
    YE: 4.0
    ZA: 4.0
    ZW: 4.0
default_structure_expected_lifetime_years: 10.0
default_structure_landfill_emissions_kgco2e_per_sq_metre: 2.2
default_structure_pct_recycling:
  classic-ooh: 58.75
default_structure_recycling_emissions_kgco2e_per_sq_metre: 0.0
```

### Print defaults

```
default_downstream_transport_emissions_kgco2e_tonne_transported_per_km: 0.6382
default_downstream_travelled_distance_km: 100.0
default_freight_transport_emissions_kgco2e_tonne_transported_per_km: 0.11
default_papermill_to_printer_distance_km: 500.0
default_print_avg_readership:
  journal: 5.0
  newspaper: 2.0
  magazine: 5.0
  leaflet: 0.5
default_print_media_corporate_emissions_per_page_gco2e: 0.05
default_print_medium_ad_to_edit_ratio:
  journal: 0.50
  newspaper: 0.40
  magazine: 0.50
  leaflet: 1.0
default_print_medium_incineration_emission_factor_kgco2e_per_kg: 0.00641
default_print_medium_landfill_emission_factor_kgco2e_per_kg: 1.16
default_print_medium_page_surface_sq_meter:
  journal: 0.062
  newspaper: 0.228
  magazine: 0.062
  leaflet: 0.031
default_print_medium_paper_gsm:
  journal: 90
  newspaper: 45
  magazine: 90
  leaflet: 90
default_print_medium_paper_production_emissions_gco2e_gram: 0.001345
default_print_medium_reader_incineration_percentage: 15.0
default_print_medium_reader_incineration_percentage_by_country:
  GB: 17.0
  FR: 25.0
  DE: 13.0
  NL: 13.0
  ES: 20.0
  IT: 16.0
  US: 8.0
  CA: 10.0
  AU: 12.0
  JP: 17.0
  CN: 15.0
  IN: 10.0
default_print_medium_reader_landfill_percentage: 20.0
default_print_medium_reader_landfill_percentage_by_country:
  GB: 5.0
  FR: 5.0
  DE: 2.0
  NL: 1.0
  ES: 7.0
  IT: 5.0
  US: 24.0
  CA: 20.0
  AU: 10.0
  JP: 1.0
  CN: 35.0
  IN: 60.0
default_print_medium_reader_recycling_percentage: 65.0
default_print_medium_reader_recycling_percentage_by_country:
  GB: 78.0
  FR: 70.0
  DE: 85.0
  NL: 86.0
  ES: 73.0
  IT: 79.0
  US: 68.0
  CA: 70.0
  AU: 78.0
  JP: 82.0
  CN: 50.0
  IN: 30.0
default_print_medium_recycling_emission_factor_kgco2e_per_kg: 0.00641
default_print_medium_total_pages:
  journal: 100
  newspaper: 40
  magazine: 100
  leaflet: 1
default_print_medium_unsold_incineration_percentage: 15.0
default_print_medium_unsold_landfill_percentage: 5.0
default_print_medium_unsold_recycling_percentage: 80.0
default_print_sellthrough_rate_pct:
  journal: 65.0
  newspaper: 80.0
  magazine: 65.0
  leaflet: 100.0
default_print_spoilage_waste_rate:
  journal: 0.05
  newspaper: 0.05
  magazine: 0.05
default_printing_finishing_emissions_gco2e_per_page:
  journal: 1.5
  newspaper: 1.0
  magazine: 1.5
  leaflet: 2.0
default_printer_to_storage_distance_km: 100.0
```

### DOOH defaults

```
default_digital_screen_embodied_emissions_kgco2e_per_second: 0.0000249
```

## Lookups from external sources

### Carbon intensity by country, region, and UTC Date/Time

Providers should clearly and publicly document:

* Which data provider is used for carbon intensity data (for instance, WattTime or ElectricityMaps)
* What carbon intensity metric is used (marginal vs average)

`lookup_carbon_intensity_gco2e_per_kwh(country, region, utc_datetime)` should look up the carbon intensity in gCO2e based on 100-year global warming potential (GWP100) from a database at no less than hourly granularity.

`lookup_carbon_intensity_quality(country, region)` should return the quality of the underlying grid mix data on a scale of 1-5 per [Model Quality](#model-quality).

## Fallbacks

We use all data we have available on every single request but in many situations we may lack some information, for this
we have a series of fallbacks to be able to provide reasonable estimates in most situations.

To determine network when it's not submitted we calculate costs associated to network type
as a weighted average of the fixed and mobile usage in the country (if available) or worldwide.

We can also generally determine the channel from the property or when that is ambiguous but we have device information
we fall back to a default channel by device.

```
  pct_mobile =
      country ?
      default_percent_mobile_by_country[country] / 100 :
      default_percent_mobile / 100

  average_embodied_emissions_gco2e_per_kb =
      default_network_embodied_emissions_gco2e_per_kb['mobile'] x pct_mobile +
      default_network_embodied_emissions_gco2e_per_kb['fixed'] x (1 - pct_mobile)

  embodied_emissions_gco2e_per_kb =
      network_type ?
      default_network_embodied_emissions_gco2e_per_kb[network_type] :
      average_embodied_emissions_gco2e_per_kb

  average_usage_kwh_per_gb =
      default_usage_kwh_per_gb['mobile'] x pct_mobile +
      default_usage_kwh_per_gb['fixed'] x (1 - pct_mobile)

  usage_kwh_per_gb =
      network_type ?
      default_usage_kwh_per_gb['network_type'] :
      average_usage_kwh_per_gb

  average_baseload_watts =
      default_baseload_watts['mobile'] x pct_mobile +
      default_baseload_watts['fixed'] x (1 - pct_mobile)

  average_dynamic_watts_per_mbps =
      default_dynamic_watts_per_mbps['mobile'] x pct_mobile +
      default_dynamic_watts_per_mbps['fixed'] x (1 - pct_mobile)

  baseload_watts =
      network_type ?
      default_baseload_watts[network_type] :
      average_baseload_watts

  dynamic_watts_per_mbps =
      network_type ?
      default_dynamic_watts_per_mbps[network_type] :
      average_dynamic_watts_per_mbps

  lookup_channel:
      if property.channels.length == 1:
            return property.channels[0]
      if channel && channel in property.channels:
            return channel
      is_audio_creative =
            creative_audio_data_transfer_bytes ||
            creative_audio_duration_seconds ||
            ad_format.audio_duration_seconds
      if is_audio_creative && 'audio' in property.channels:
            return 'audio'
      if device_type && default_channel_by_device[device_type] in property.channels:
            return default_channel_by_device[device_type]
      return property.channels[0]

      channel = lookup_channel()
      device_type = device_type ? default_device_by_channel[channel]
```

## Calculating Emissions

### Tech Manipulation - Creative Storage

```
creative_storage_gco2_per_imp =
(default_linear_tape_open_storage_kgco2e_per_gb * default_linear_tape_open_storage_usage_pct
+ default_hard_disk_drive_storage_kgco2e_per_gb * default_hard_disk_drive_storage_usage_pct
+ default_solid_state_drive_storage_kgco2e_per_gb * default_solid_state_drive_storage_kgco2e_per_gb
+ default_cloud_storage_kgco2e_per_gb * default_cloud_storage_usage_pct)
* 1000
* ((creative_data_transfer_bytes * creative_raw_asset_size_factor[Channel] + creative_data_transfer_bytes * creative_work_iterations_factor[Channel]) / 1000000000)
/ default_impressions_per_creative
```

### Creative Delivery - Data Transfer

```
creative_data_transfer_emissions_gco2_per_imp =
      creative_data_transfer_usage_emissions_gco2_per_imp +
      creative_data_transfer_embodied_emissions_gco2_per_imp
```

For all channels other than CTV/BVOD, use the conventional model:

```
creative_data_transfer_bytes =
      video_bytes +
      audio_bytes +
      image_bytes +
      ad_format.video_player.size_bytes +
      ad_format.other_asset_bytes

creative_data_transfer_usage_emissions_gco2 =
      creative_data_transfer_bytes / 1000 x
      usage_kwh_per_gb / 1000000 x
      lookup_carbon_intensity_gco2e_per_kwh(country, region, utc_datetime)

creative_data_transfer_embodied_emissions_gco2 =
      creative_data_transfer_bytes / 1000 x
      embodied_emissions_gco2e_per_kb
```

If data transfer is provided in the delivery row, use it:

```
image_bytes = creative_total_image_data_transfer_bytes
video_bytes = creative_total_video_data_transfer_bytes + (creative_video_vast_bytes x loads)
audio_bytes = creative_total_audio_data_transfer_bytes
```

Otherwise, calculate data transfer:

```
image_sizes = creative_image_sizes ? ad_format.image_sizes
image_bytes = SUM(image_sizes[n].width x image_sizes[n].height) x 3 / default_image_compression_ratio x impressions

audio_duration = creative_audio_duration_seconds ?? ad_format.audio_duration_seconds
audio_bytes = audio_duration_seconds x default_audio_bitrate_kbps[device_type] / 8 x 1000 x impressions

is_primary_experience = !ad_format.rendered_width_pixels && !ad_format.rendered_height_pixels
default_bitrate_kbps =
      is_primary_experience ?
      default_video_bitrate_kbps[device_type] :
      default_non_primary_video_bitrate_kbps
video_bitrate_kbps =
      creative_video_bitrate_kbps ??
      creative_video_size_bytes x 8 / 1000 / creative_video_duration  ??
      property.video_bitrate_kbps[device_type] ??
      default_bitrate_kbps
video_duration = creative_video_duration_seconds ?? ad_format.video_duration_seconds
seconds_watched = creative_video_view_time_seconds ??
                  creative_video_view_rate x video_duration_seconds ??
                  video_duration_seconds
buffer = ad_format.video_player.buffering_seconds ?? infinity
seconds_streamed = MIN(seconds_watched + buffer, video_duration_seconds)
loads = switch(ad_format.video_player.download_trigger):
            'view': views
            'play': plays
            'impression': impressions


video_bytes = (video_bitrate_kbps / 8 x 1000 x seconds_streamed + creative_video_vast_bytes) x loads
```

For CTV/BVOD, use the power model:

```
video_bitrate_kbps =
      creative_video_bitrate_kbps ??
      property.video_bitrate_kbps[device_type] ??
      default_video_bitrate_kbps[device_type]

power_watts =
      baseload_watts +
      dynamic_watts_per_mbps x video_bitrate_kbps / 1000

creative_data_transfer_usage_emissions_gco2_per_imp =
      creative_video_duration_seconds / 3600 x
      power_watts / 1000 x
      lookup_carbon_intensity_gco2e_per_kwh(country, region, utc_datetime)

creative_data_transfer_embodied_emissions_gco2_per_imp =
      creative_video_duration_seconds x
      video_bitrate_kbps / 128 x
      embodied_emissions_gco2e_per_kb
```

### Creative Delivery - Platform

```
default_creative_platforms =
      creative_is_3p_served ?
      [generic_creative_ad_server, generic_measurement_platform] :
      []
creative_platforms = creative_ad_platforms ?? default_creative_platforms

creative_platform_emissions_gco2_per_imp = 0
for platform in [creative_platforms, ad_format.ad_platforms]:
			emissions_per_creative_request_per_geo_gco2_per_imp =
				platform.emissions_per_creative_request_per_geo_gco2_per_imp ??
				((creative_data_transfer_bytes / 1000) x
				(edge_node_use_watts_per_kb / 1000) x
				lookup_carbon_intensity_gco2e_per_kwh(country, region, utc_datetime))
				+
				(creative_data_transfer_bytes / 1000 x
				edge_node_embodied_gco2e_per_kb)

      creative_platform_emissions_gco2_per_imp += emissions_per_creative_request_per_geo_gco2_per_imp
```

### Creative Delivery - Consumer Device

```
device_pixels = default_rendered_device_width[device_type] x default_rendered_device_height[device_type]
rendered_width = ad_format.rendered_width_pixels ?? default_rendered_device_width[device_type]
rendered_height = ad_format.rendered_height_pixels ?? default_rendered_device_height[device_type]
visual_device_coverage =
      is_primary_experience ?
      1 :
      MIN(1, rendered_width x rendered_height / device_pixels)
time_in_view =
      video_duration ??
      creative_time_in_view_seconds ??
      default_time_in_view_seconds

if channel == digital-audio :
	device_power_utilization == 'smart-speaker' ? 1 : default_audio_power_utilization[device_type]
	energy_adjusted_active_seconds = device_power_utilization * audio_duration
else:
	energy_adjusted_active_seconds = visual_device_coverage x time_in_view

creative_consumer_device_usage_emissions_gco2_per_imp =
      device_coverage_seconds / 3600 x
      default_device_watts[device_type] / 1000 x
      lookup_carbon_intensity_gco2e_per_kwh(country, region, utc_datetime)
      + default_device_usage_emissions_from_fuel_consumption_per_second[device_type]

creative_consumer_device_embodied_emissions_gco2_per_imp =
      device_coverage_seconds x
      default_device_embodied_emissions_per_second[device_type]
```

### Media Delivery - Data Transfer

```
media_data_transfer_emissions_gco2_per_imp =
      media_data_transfer_usage_emissions_gco2_per_imp +
      media_data_transfer_embodied_emissions_gco2_per_imp
```

Determing the session seconds for a single impressions

```
session_seconds_per_imp =
      property.average_seconds_per_session_excluding_ads x
      property.ad_funded_percentage/100 /
      property.average_imps_per_session
```

For all channels other than CTV/BVOD, use the conventional model:

```
media_data_transfer_kb_per_imp =
      property.average_data_kb_per_session_excluding_ads x
      property.ad_funded_percentage/100  /
      property.average_imps_per_session

media_data_transfer_usage_emissions_gco2_per_imp =
      media_data_transfer_kb_per_imp x
      usage_kwh_per_gb / 1000000 x
      lookup_carbon_intensity_gco2e_per_kwh(country, region, utc_datetime)

media_data_transfer_embodied_emissions_gco2_per_imp =
      media_data_transfer_kb_per_imp x
      embodied_emissions_gco2e_per_kb
```

For CTV/BVOD, use the power model:

```
video_bitrate_kbps = property.video_bitrate_kbps[device_type] ?? default_video_bitrate_kbps[device_type]

power_watts =
      baseload_watts +
      dynamic_watts_per_mbps x video_bitrate_kbps / 1000

media_data_transfer_usage_emissions_gco2_per_imp =
      session_seconds_per_imp / 3600 x
      power_watts / 1000 x
      lookup_carbon_intensity_gco2e_per_kwh(country, region, utc_datetime)

media_data_transfer_embodied_emissions_gco2_per_imp =
      session_seconds_per_imp x
      video_bitrate_kbps / 128 x
      embodied_emissions_gco2e_per_kb
```

### Media Delivery - Consumer Device

```
media_consumer_device_usage_emissions_gco2_per_imp =
      session_seconds_per_imp / 3600 x
      default_device_watts[device_type] / 1000 x
      lookup_carbon_intensity_gco2e_per_kwh(country, region, utc_datetime)
      + default_device_usage_emissions_from_fuel_consumption_per_second[device_type]

media_consumer_device_embodied_emissions_gco2_per_imp =
      session_seconds_per_imp x
      default_device_embodied_emissions_per_second[device_type]
```

### Media Delivery - Corporate

```
media_corporate_emissions_gco2_per_imp =
      property.allocated_adjusted_corporate_emissions_kg x 1000 /
      property.total_sessions /
      property.average_imps_per_session
```

### Ad Selection - Platform

```
get_platform_emissions(ad_platform):
      direct_emissions = usage_emissions_per_bid_request_per_geo_gco2_per_imp + default_platform_embodied_emissions_per_bid_request_gco2e_per_imp
      rtdp_emissions = 0
      for rtdp in ad_platform.real_time_data_providers:
            rtdp_emissions += usage_emissions_per_rtdp_request_per_geo_gco2_per_imp + default_platform_embodied_emissions_per_bid_request_gco2e_per_imp
      bidder_emissions = 0
      for bidder in ad_platform.bidders:
            bidder_emissions += get_platform_emissions(bidder) x
                  ad_platform.distribution_rate_by_bidder_by_country[country, bidder] ?? 1
      return direct_emissions + rtdp_emissions + bidder_emissions

ad_selection_platform_emissions_gco2_per_imp = 0
data_transfer_bytes = 0

if channel in ['search', 'dooh']:
      data_transfer_bytes = default_count_ad_platform[channel] * default_consumer_device_request_size_bytes[channel]
      ad_selection_platform_emissions_gco2_per_imp = default_emissions_ad_selection_gco2_per_imp_by_channel[channel]
else:
      for platform in placement.ad_platforms:
            ad_selection_platform_emissions_gco2_per_imp += get_platform_emissions(platform)
            platform_bytes =
                  platform.average_bid_request_size ??
                  default_consumer_device_request_size_bytes[channel]
            data_transfer_bytes += default_consumer_device_request_size_bytes[channel]
            if platform.sends_client_side_requests:
                  for bidder in platform.bidders:
                        bidder_bytes =
                              bidder.average_bid_request_size ??
                              default_consumer_device_request_size_bytes[channel]
                        data_transfer_bytes +=
                              bidder_bytes x
                              platform.distribution_rate_by_bidder_by_country[country, bidder] ?? 1
```

### Ad Selection - Data Transfer

```
ad_selection_data_transfer_usage_emissions_gco2_per_imp =
      data_transfer_bytes / 1000 x
      usage_kwh_per_gb / 1000000 x
      lookup_carbon_intensity_gco2e_per_kwh(country, region, utc_datetime)

ad_selection_data_transfer_embodied_emissions_gco2_per_imp =
      data_transfer_bytes / 1000 x
      embodied_emissions_gco2e_per_kb

ad_selection_data_transfer_emissions_gco2_per_imp =
      ad_selection_data_transfer_usage_emissions_gco2_per_imp +
      ad_selection_data_transfer_embodied_emissions_gco2_per_imp
```

### Model Quality

```
grid_mix_model_quality = lookup_carbon_intensity_quality(country, region)
organization_model_quality = property.organization_model_quality
property_model_quality = property.model_quality

total_platforms = 0
modeled_platforms = 0
for platform in placement.ad_platforms:
  total_platforms++
  if platform.model_quality > 1
    modeled_platforms++
  # Model one level of downstream platforms
  for bidder in ad_platform.bidders:
    total_platforms++
    if bidder.model_quality > 1
      modeled_platforms++
ad_platform_modeled_ratio = modeled_platforms / total_platforms
```
