Motivation¶

The ECO Platform API helps developers access high-quality and standardized Environmental Product Declaration (EPD) data easily. As the construction industry shifts toward low-carbon solutions and resource efficiency, having reliable and scientifically verified data is crucial for life cycle assessment (LCA) modeling, making sustainable choices, and meeting regulations.

ECO Platform connects EPD program operators, manufacturers, and sustainability experts to provide consistent, trustworthy, and clear environmental data. This API integrates smoothly into your LCA processes, allowing for automation, data analysis, and new sustainability applications.

By using the ECO Platform API, you can:

  • Access standardized EPD data for precise environmental impact evaluations.
  • Automate LCA calculations and connect with current sustainability tools.
  • Ensure compliance with global sustainability standards.
  • Increase transparency in construction and green building projects.

This documentation will help you with authenticating, retrieving, and processing EPD data, providing real examples to assist you in efficiently integrating the API into your workflows.

Target Audience¶

This documentation is for developers and professionals familiar with HTTP APIs, and well-versed in LCA and EPD data (helps if you have seen some python code before).

We also assume that you:
✅ Have Python set up (Setup guide)
✅ Have an ECO Platform API key (Get your key here)

API Structure¶

The soda4LCA API follows this URL structure:

url
<BASE_URL>/resource/<ENDPOINT>?<QUERY_PARAMETERS>

The Authorization token needs to be includes in the request headers.

Let's get started with a very simple use case.

Listing All EPD datasets¶

Note: You may find multiple EPD datasets for the same EPD number. This is the case if an EPD covers multiple distinct products or product variants, where separate LCIA results are given for each individual product, in which case one digital dataset will have been generated per individual product or product variant.

Let's list five EPD datasets using the API.

Query Parameters Documentation¶

  • The documentation for general QUERY_PARAMETERS can be found here.
  • The QUERY_PARAMETERS specific to process datasets are documented here.

Querying the /processes Endpoint¶

You need to set the query parameters to:

{
    "search": true,
    "distributed": true,
    "virtual": true,
    "metaDataOnly": false,
    "validUntil": 2025,
    "pageSize": 5,
    "startIndex": 0,
    "format": "JSON"
}

Parameter Descriptions

  • search: Enables search functionality.
  • distributed: Includes distributed datasets.
  • virtual: Includes virtual datasets.
  • metaDataOnly: If true, datasets that only carry metadata and a PDF (stubs) are also returned, which we are not interested in.
  • validUntil: Filters results by validity year.
  • pageSize: Limits the number of results per request.
  • startIndex: Defines the starting point for pagination.
  • format: Specifies the output format (e.g., JSON).

Constructing the URL¶

Using these parameters, the request URL looks like this:

url
https://data.eco-platform.org/resource/processes?search=true&distributed=true&virtual=true&metaDataOnly=false&validUntil=2025&pageSize=5&startIndex=0&format=JSON

then copy the URL to the browser and see if it works!

Some free Environmental Product Declarations (EPDs) can be viewed without registration. However, to access the full set of capabilities that the ECO Platform has to offer, you must register and obtain an Authorization token.

Making a Request with curl¶

You can retrieve the data using curl:

curl "https://data.eco-platform.org/resource/processes?search=true&distributed=true&virtual=true&metaDataOnly=false&validUntil=2025&pageSize=5&startIndex=0&format=JSON"

If the request is successful, the output will display the retrieved data.

Adding an Authorization Token¶

To access restricted resources, you need to include an Authorization token. We recommend storing it in an .env file or saving it securely.

Verify if the Token is Set

on linux or mac

echo $TOKEN

on windows cmd

cmd
echo %TOKEN%

on windows powershell

$env:TOKEN

If you don't see your token, replace $TOKEN in the following command with your actual token.

Making an Authorized Request

curl -H "Authorization: Bearer $TOKEN" "https://data.eco-platform.org/resource/processes?search=true&distributed=true&virtual=true&metaDataOnly=false&validUntil=2025&pageSize=5&startIndex=0&format=JSON"

This should return the same output but now includes access to restricted resources.

Making the Request in Python¶

Let's see how to perform the same request using Python.

for the we need some dependencies

In [1]:
!pip install pandoc requests dotenv
Requirement already satisfied: pandoc in ./py_env/lib/python3.12/site-packages (2.4)
Requirement already satisfied: requests in ./py_env/lib/python3.12/site-packages (2.32.4)
Requirement already satisfied: dotenv in ./py_env/lib/python3.12/site-packages (0.9.9)
Requirement already satisfied: plumbum in ./py_env/lib/python3.12/site-packages (from pandoc) (1.9.0)
Requirement already satisfied: ply in ./py_env/lib/python3.12/site-packages (from pandoc) (3.11)
Requirement already satisfied: charset_normalizer<4,>=2 in ./py_env/lib/python3.12/site-packages (from requests) (3.4.2)
Requirement already satisfied: idna<4,>=2.5 in ./py_env/lib/python3.12/site-packages (from requests) (3.10)
Requirement already satisfied: urllib3<3,>=1.21.1 in ./py_env/lib/python3.12/site-packages (from requests) (2.5.0)
Requirement already satisfied: certifi>=2017.4.17 in ./py_env/lib/python3.12/site-packages (from requests) (2025.7.14)
Requirement already satisfied: python-dotenv in ./py_env/lib/python3.12/site-packages (from dotenv) (1.1.1)

Load the Token into Python

In [2]:
# past you token here
TOKEN = "CHANGE ME TO THE TOKEN"

# or load form env
if TOKEN.startswith("CHANGE"):
    import os
    from dotenv import load_dotenv

    load_dotenv()
    # load the Access Token
    TOKEN = os.getenv('TOKEN')

# Verify token is set
if not TOKEN:
    raise Exception("Error: TOKEN is not set. Please set the TOKEN variable.")

And now, we will make the same request with Python that we previously made with curl.

In [3]:
import json
import requests
import pandas as pd
In [4]:
# Base URL form the ECO Platform
BASE_URL = 'https://data.eco-platform.org/resource/'

# Endpoint for processes
PROCESS_ENDPOINT = 'processes'

# Query parameters
params = {
    'search': True,
    'distributed': True,
    'virtual': True,
    'metaDataOnly': False,
    'validUntil': 2025,
    'pageSize': 5,
    'startIndex': 0,
    'format': 'JSON',
}
headers = {
    'Authorization': f'Bearer {TOKEN}'
}

response = requests.get(f'{BASE_URL}{PROCESS_ENDPOINT}', headers=headers, params=params)
response.raise_for_status() 

df = pd.DataFrame(response.json()["data"])
df
Out[4]:
languages name uuid version geo classific classificId classificSystem type refYear validUntil compliance subType dataSources regNo regAuthority nodeid uri dsType
0 [en, da] \nSea sand 0/4 mm class E and bottom protectio... 6461e233-b1c2-4a39-922a-4a020732e2b4 00.01.000 RER Mineralische Baustoffe / Zuschläge / Sand und ... 1.2.01 OEKOBAU.DAT EPD 2025 2030 [{'name': 'EN 15804+A2 (EF 3.1)', 'uuid': 'd4a... specific dataset [{'uuid': 'b497a91f-e14b-4b69-8f28-f50eb157676... MD-25073-DA {'uuid': 'c7d370ee-2ab8-4b17-ba04-df29a8e607ea'} ECOSMDP https://ecosmdp.eco-platform.org/resource/proc... Process
1 [en] Birsta S N2 W2 c/c 1 m 18f4602a-6d0d-46ff-8701-9402b8e70e6f 00.05.001 CN Bygg / Stål-, aluminiumskonstruksjoner 992467c5-eec4-4d69-88ba-672f1a896481 EPDNorge EPD 2024 2029 [{'name': 'EN 15804+A2', 'uuid': 'c0016b33-8cf... specific dataset [{'uuid': 'b497a91f-e14b-4b69-8f28-f50eb157676... NEPD-6941-6333-EN {'uuid': '7008caa3-6fea-4ad2-81eb-f2b7a0610e6c'} EPD-NORWAY_DIGI https://epdnorway.lca-data.com/resource/datast... Process
2 [en] Durasein Solid Surface e26d3411-373a-4cdd-af82-08db7e36184f 07.01.065 GLO Construction products, Infrastructure & buildings 0 The International EPD System EPD 2023 2028 [{'name': 'EN 15804+A2 (EF 3.0)', 'uuid': 'c00... specific dataset [{'uuid': 'b497a91f-e14b-4b69-8f28-f50eb157676... EPD-IES-0007415:004 (S-P-07415) {'uuid': '5e09bd06-11a1-4292-a56b-47898ad6a691'} ENVIRONDEC https://data.environdec.com/resource/datastock... Process
3 [no] NaN ac58a83c-e898-4505-9d93-9c5b4e3e852f 00.04.000 NO Bygg / Betongvarer f107d200-244c-4c4b-9a14-0c2264316bc2 EPDNorge EPD 2024 2029 [{'name': 'EN 15804+A2', 'uuid': 'c0016b33-8cf... specific dataset [{'uuid': 'b497a91f-e14b-4b69-8f28-f50eb157676... NEPD-8487-8141-NO {'uuid': '7008caa3-6fea-4ad2-81eb-f2b7a0610e6c'} EPD-NORWAY_DIGI https://epdnorway.lca-data.com/resource/datast... Process
4 [no] NaN 10eba8d0-fcd6-4c80-9227-69de52a68740 00.03.000 IT Bygg / Stål-, aluminiumskonstruksjoner 992467c5-eec4-4d69-88ba-672f1a896481 EPDNorge EPD 2025 2030 [{'name': 'EN 15804+A2', 'uuid': 'c0016b33-8cf... generic dataset [{'uuid': 'b497a91f-e14b-4b69-8f28-f50eb157676... NEPD-8650-8317 {'uuid': '7008caa3-6fea-4ad2-81eb-f2b7a0610e6c'} EPD-NORWAY_DIGI https://epdnorway.lca-data.com/resource/datast... Process

Get Global Warming Potential (GWP) for a concrete EPD¶

Now lets look at a more involved example, we now want to get the GWP for an EPD on concrete.

Step 1: Find a dataset for concrete¶

In [5]:
# Base URL for the ECO Platform data aggregator
BASE_URL = 'https://data.eco-platform.org/resource/'

# API endpoint for fetching EPD datasets
PROCESS_ENDPOINT = 'processes'

# Query parameters for filtering concrete data
query_params = {
    'search': 'true',
    'distributed': 'true',
    'virtual': 'true',
    'metaDataOnly': 'false',
    'validUntil': '2025',
    'pageSize': 5,  
    'startIndex': 0,
    'format': 'JSON',
}
headers = {
    'Authorization': f'Bearer {TOKEN}'  
}

# Specify the name of the concrete mix to search for
query_params["name"] = "Concrete C25/30 XC4 XF1 XA1 F3 16 M ECOPact , Mix number DA4234-DHFS Version 1"

# Send GET request to fetch relevant concrete data
response = requests.get(f'{BASE_URL}{PROCESS_ENDPOINT}', headers=headers, params=query_params)
response.raise_for_status()

# Convert response data into a structured DataFrame
concrete_data_df = pd.DataFrame(response.json()["data"])
concrete_data_df
Out[5]:
languages name uuid version geo classific classificSystem type refYear validUntil compliance subType dataSources regNo regAuthority nodeid uri dsType
0 [de, en] Concrete C25/30 XC4 XF1 XA1 F3 16 M ECOPact , ... 0ebf7111-4d1d-47a9-96cd-2e969f0f96a3 00.01.001 DE 02 Bauprodukte / Normal- Leicht- und Porenbeto... IBUCategories EPD 2023 2028 [{'name': 'EN 15804+A2', 'uuid': 'c0016b33-8cf... specific dataset [{'uuid': '28d74cc0-db8b-4d7e-bc44-5f6d56ce0c4... IBU-HOL-HOL-2204100-DE2023000034-1SUG001-DE {'uuid': 'd111dbec-b024-4be5-86c5-752d6eb2cf95'} IBU_DATA https://ibudata.lca-data.com/resource/datastoc... Process
1 [de, en] Concrete C25/30 XC4 XF1 XA1 F3 16 M ECOPact, M... 0ef0451e-dbd5-4d71-b5c8-12b30d4375ba 00.01.001 DE 02 Bauprodukte / Normal- Leicht- und Porenbeto... IBUCategories EPD 2023 2028 [{'name': 'EN 15804+A2', 'uuid': 'c0016b33-8cf... specific dataset [{'uuid': '28d74cc0-db8b-4d7e-bc44-5f6d56ce0c4... IBU-HOL-HOL-2204100-DE2023000007-1SUG001-DE {'uuid': 'd111dbec-b024-4be5-86c5-752d6eb2cf95'} IBU_DATA https://ibudata.lca-data.com/resource/datastoc... Process
2 [de, en] Concrete C25/30 XC4 XF1 XA1 F3 16 M ECOPact, M... feb05e8e-2b45-4ef4-a7da-176902b97be2 00.01.001 DE 02 Bauprodukte / Normal- Leicht- und Porenbeto... IBUCategories EPD 2023 2028 [{'name': 'EN 15804+A2', 'uuid': 'c0016b33-8cf... specific dataset [{'uuid': '28d74cc0-db8b-4d7e-bc44-5f6d56ce0c4... IBU-HOL-HOL-2204100-DE2023000017-1SUG001-DE {'uuid': 'd111dbec-b024-4be5-86c5-752d6eb2cf95'} IBU_DATA https://ibudata.lca-data.com/resource/datastoc... Process

Step 2: Retrieve detailed Environmental Product Declaration (EPD) data¶

In [6]:
# URL to fetch detailed information on EPD
EPD_URL = "https://ibudata.lca-data.com/resource/processes/"

detail_params = {
    "format": "JSON",
    "view": "extended"
}

# Unique identifier for the selected concrete data entry
concrete_uuid = "0ebf7111-4d1d-47a9-96cd-2e969f0f96a3"

# Fetch extended details of the selected concrete mix
response = requests.get(f'{EPD_URL}{concrete_uuid}', headers=headers, params=detail_params)
response.raise_for_status()

detailed_data = response.json()

# Display available data keys for exploration
list(detailed_data.keys())
Out[6]:
['processInformation',
 'modellingAndValidation',
 'administrativeInformation',
 'exchanges',
 'LCIAResults',
 'otherAttributes',
 'version']

Step 3: Extract and Print GWP (total)¶

In [7]:
# Access the correct LCIA (Life Cycle Impact Assessment) result, which represents GWP-Total
GWP_TOTAL_UUID = "6a37f984-a4b3-458a-a20a-64418c145fa2"

gwp_result = None
for x in detailed_data["LCIAResults"]["LCIAResult"]:
    if x["referenceToLCIAMethodDataSet"]["refObjectId"] == GWP_TOTAL_UUID:
        gwp_result = x
        break

# Extract short description of the impact category (e.g., "GWP-total")
gwp_description = gwp_result["referenceToLCIAMethodDataSet"]["shortDescription"][0]["value"]
print(gwp_description)

# Extract unit of measurement for GWP (NOTE index 0 is always the description)
gwp_units = gwp_result["other"]["anies"]
unit_description = gwp_units[0]["value"]["shortDescription"][0]["value"]


# Calculate the total GWP value
total_gwp_value = sum(float(entry["value"]) for entry in gwp_units[1:])
print(f"\nTotal GWP: {total_gwp_value:.1f} {unit_description}")
Global Warming Potential - total (GWP-total)

Total GWP: 166.2 kg CO_(2) eqv.

Step 4: For determining the Declared Unit of the EPD, retrieve reference flow property¶

In [8]:
# Extract relevant flow properties
flow_properties = None
for e in detailed_data["exchanges"]["exchange"]:
    for fp in e["flowProperties"]:
        if "referenceFlowProperty" in fp and fp["referenceFlowProperty"]:
           flow_properties = e["flowProperties"]
           break 

# Fetch flow properties lookup table
flow_properties_url = "https://data.eco-platform.org/resource/flowproperties"
flow_properties_response = requests.get(flow_properties_url, headers=headers, params={'format': 'JSON'})
flow_properties_lookup = pd.DataFrame(flow_properties_response.json()["data"])

# Process and display flow properties
processed_flow_properties = []
for prop in flow_properties:
    # Look up the property details using UUID
    lookup_result = flow_properties_lookup.loc[flow_properties_lookup["uuid"] == prop["uuid"]]
    
    # Convert lookup result to dictionary format
    lookup_data = {key: list(value.values())[0] for key, value in lookup_result.to_dict().items()}
    print(lookup_data["name"], prop["meanValue"], lookup_data["defUnit"])
    
    processed_flow_properties.append({
        "name": lookup_data["name"],
        "value": prop["meanValue"],
        "unit": lookup_data["defUnit"]
    })

print("\nHas a GWP of:")
print(f"{total_gwp_value:.1f} {unit_description}")
Mass 2310.0 kg
Volume 1.0 m3

Has a GWP of:
166.2 kg CO_(2) eqv.

Step 5: Calculate GWP for 1 metric ton of concrete¶

In [9]:
# Extract mass property for scaling calculations
mass_property = next(fp for fp in processed_flow_properties if fp["name"] == "Mass")
conversion_factor = mass_property["value"] / 1000  # Convert from kg to tons

# Compute the total GWP for 1 ton of concrete
print(f"That means 1 metric ton (1000 kg) of this concrete has a GWP of {(total_gwp_value / conversion_factor):.1f} {unit_description}")
That means 1 metric ton (1000 kg) of this concrete has a GWP of 71.9 kg CO_(2) eqv.

Simple Examples for Common Tasks¶

Here are simpler and more concise examples of how to do specific things.

In [10]:
# Base URL form the ECO Platform
BASE_URL = 'https://data.eco-platform.org/resource/'

# Endpoint for processes
PROCESS_ENDPOINT = 'processes'

# Query parameters
params = {
    'search': True,
    'distributed': True,
    'virtual': True,
    'metaDataOnly': False,
    'validUntil': 2025,
    'pageSize': 5,
    'startIndex': 0,
    'format': 'JSON',
}
headers = {
    'Authorization': f'Bearer {TOKEN}'
}

Filter by compliance¶

This is the API documentation for it

The UUIDs for compliance are from here or below

Name UUID
ILCD Format a97a0155-0234-4b87-b4ce-a45da52f2a40
EPD Data Format Extensions v1.1 cba73800-7874-11e3-981f-0800200c9a66
EPD Data Format Extensions v1.2 a29449fd-aa2f-4de8-b5d7-4b06b43c6fde
EN 15804+A1 b00f9ec0-7874-11e3-981f-0800200c9a66
EN 15804+A2 (EF 3.0) c0016b33-8cf7-415c-ac6e-deba0d21440d
EN 15804+A2 (EF 3.1) d4aa3ec7-b1d7-4a4a-a6cb-37af88dcc902
ISO 14025 4f2eb655-6e44-4874-a95a-e28f5442cd4d
ISO 21930 9c1e8451-2321-4498-b459-b6568b6b6547
In [11]:
params["compliance"] = "c0016b33-8cf7-415c-ac6e-deba0d21440d"
res = requests.get(f'{BASE_URL}{PROCESS_ENDPOINT}', headers=headers, params=params)
res.raise_for_status() 

del params["compliance"]

df = pd.DataFrame(res.json()["data"])
df
Out[11]:
languages name uuid version geo classific classificId classificSystem type refYear validUntil compliance subType dataSources regNo regAuthority nodeid uri dsType
0 [en] Birsta S N2 W2 c/c 1 m 18f4602a-6d0d-46ff-8701-9402b8e70e6f 00.05.001 CN Bygg / Stål-, aluminiumskonstruksjoner 992467c5-eec4-4d69-88ba-672f1a896481 EPDNorge EPD 2024 2029 [{'name': 'EN 15804+A2', 'uuid': 'c0016b33-8cf... specific dataset [{'uuid': 'b497a91f-e14b-4b69-8f28-f50eb157676... NEPD-6941-6333-EN {'uuid': '7008caa3-6fea-4ad2-81eb-f2b7a0610e6c'} EPD-NORWAY_DIGI https://epdnorway.lca-data.com/resource/datast... Process
1 [en] Durasein Solid Surface e26d3411-373a-4cdd-af82-08db7e36184f 07.01.065 GLO Construction products, Infrastructure & buildings 0 The International EPD System EPD 2023 2028 [{'name': 'EN 15804+A2 (EF 3.0)', 'uuid': 'c00... specific dataset [{'uuid': 'b497a91f-e14b-4b69-8f28-f50eb157676... EPD-IES-0007415:004 (S-P-07415) {'uuid': '5e09bd06-11a1-4292-a56b-47898ad6a691'} ENVIRONDEC https://data.environdec.com/resource/datastock... Process
2 [no] NaN ac58a83c-e898-4505-9d93-9c5b4e3e852f 00.04.000 NO Bygg / Betongvarer f107d200-244c-4c4b-9a14-0c2264316bc2 EPDNorge EPD 2024 2029 [{'name': 'EN 15804+A2', 'uuid': 'c0016b33-8cf... specific dataset [{'uuid': 'b497a91f-e14b-4b69-8f28-f50eb157676... NEPD-8487-8141-NO {'uuid': '7008caa3-6fea-4ad2-81eb-f2b7a0610e6c'} EPD-NORWAY_DIGI https://epdnorway.lca-data.com/resource/datast... Process
3 [no] NaN 10eba8d0-fcd6-4c80-9227-69de52a68740 00.03.000 IT Bygg / Stål-, aluminiumskonstruksjoner 992467c5-eec4-4d69-88ba-672f1a896481 EPDNorge EPD 2025 2030 [{'name': 'EN 15804+A2', 'uuid': 'c0016b33-8cf... generic dataset [{'uuid': 'b497a91f-e14b-4b69-8f28-f50eb157676... NEPD-8650-8317 {'uuid': '7008caa3-6fea-4ad2-81eb-f2b7a0610e6c'} EPD-NORWAY_DIGI https://epdnorway.lca-data.com/resource/datast... Process
4 [en] ABb PMB, Skanska Industrial Solutions, Dalby ... 94506cde-817c-4307-bef0-4a317b894e95 00.07.000 SE Bygg / Asfalt og pukk 67dd3145-6d07-4939-8373-297d512803ca EPDNorge EPD 2024 2029 [{'name': 'EN 15804+A2', 'uuid': 'c0016b33-8cf... specific dataset [{'uuid': 'b497a91f-e14b-4b69-8f28-f50eb157676... NEPD-5731-5030-EN {'uuid': '7008caa3-6fea-4ad2-81eb-f2b7a0610e6c'} EPD-NORWAY_DIGI https://epdnorway.lca-data.com/resource/datast... Process

In this example, we only choose EPD datasets that comply with EN15804+A2 EF 3.0.

Filter by Background Database¶

In ECO Portal, there are mainly two types of background database being used - ecoinvent database and Sphera MLC (f.k.a. GaBi database). These are identified by distinct UUIDs for which we can filter.

While the database itself is represented by a source dataset with a specific UUID (e.g. the ecoinvent database as b497a91f-e14b-4b69-8f28-f50eb1576766), there exist additional source datasets with their own UUIDs for the individual versions (e.g. for ecoinvent 3.10 6edab576-5247-472f-a2f4-0cb84561ca8b). The former is mandatory and the latter is optional.

1. GaBi¶

GaBi Database Version Name UUID
all GaBi Database (general) 28d74cc0-db8b-4d7e-bc44-5f6d56ce0c4a
SP20 2013 GaBi database SP20 2013 b9fdf525-e9b8-47a0-b897-2ecfe7e2cff5
SP25 2014 GaBi database SP25 2014 04536297-8f33-4ef0-b06c-54dc273c2aaa
SP26 2014 GaBi database SP26 2014 7d81b748-d7ea-4efd-b72e-205c69306f38
SP27 2015 GaBi database SP27 2015 9422129a-7992-4eaf-aa17-0fca36af4512
SP28 2015 GaBi database SP28 2015 176effc6-2e73-4419-be24-60b3399e91cf
SP29 2016 GaBi database SP29 2016 8cb50bdc-0299-4a4c-9a4e-4c62917018c7
SP30 2016 GaBi database SP30 2016 6985fea4-15ea-4b96-9237-c67ee3a1f28c
SP33 2017 GaBi database SP33 2017 d8181616-4417-4dbd-9614-09937353f17a
SP34 2017 GaBi database SP34 2017 07650073-f65e-4d07-97e9-359a58b7299e
SP35 2018 GaBi database SP35 2018 feda7597-12a1-4bd5-93ef-4d8120877b78
SP36 2018 GaBi database SP36 2018 dad5023c-8d97-4656-b82a-2fc6480b33a7
SP37 2019 GaBi database SP37 2019 aaef5d83-7fd3-424f-86c6-00f51cd39845
SP38 2019 GaBi database SP38 2019 4467e22f-78e4-4e21-ae4a-b8ffeda7d795
SP39 2019 GaBi database SP39 2019 07d9b8a7-e0fc-408f-a95e-c90735f843ce
SP40 2020 GaBi database SP40 2020 0115289e-52f0-4920-bc7e-57b1c96aec8d
Edition 2020, CUP 2020.02 GaBi Database Edition 2020, CUP 2020.02 4b368ada-d799-4afc-9d41-f371f2b23781
Edition 2021, CUP 2021.01 GaBi Database Edition 2021, CUP 2021.01 1cece811-7501-44d4-8067-9259bd5cb835
Edition 2021, CUP 2021.02 GaBi Database Edition 2021, CUP 2021.02 90321ffe-9ebb-4946-886c-338efe6fbf26
Edition 2022, CUP 2022.01 GaBi Database Edition 2022, CUP 2022.01 86f664e2-7dab-4722-aad7-4c5206a4123b
Edition 2022, CUP 2022.02 GaBi Database Edition 2022, CUP 2022.02 94f442cb-662e-43ea-a792-4b0a35132e93
CUP 2023.01 Sphera MLC (fka GaBi) CUP 2023.01 6bcd5bfa-3623-48ab-a52b-6d5be8db82ed
CUP 2023.02 Sphera MLC (fka GaBi) CUP 2023.02 cb600d3b-e85a-42b3-b059-5591e2757fbb
Edition 2025 Sphera MLC (fka GaBi) Databases Edition 2025 7443b962-0446-4d69-8aa7-8055a6b1614a

2. ecoinvent¶

ecoinvent Database Version Name UUID
all ecoinvent database (general) b497a91f-e14b-4b69-8f28-f50eb1576766
2.0 ecoinvent 2.0 database 67e57f6b-53d2-4adb-a5db-7e8157ce5865
2.1 ecoinvent 2.1 database dd4ba261-1847-4d00-a9c0-7e81a3402dae
2.2 ecoinvent 2.2 database 9ffadc15-4649-4871-b565-cee8197b17e9
3.0 ecoinvent 3.0 database ae9fac17-61c1-4776-947a-0fc2865954ff
3.1 ecoinvent 3.1 database 44df4cc3-a75f-4e13-a37a-971dadc97b35
3.2 ecoinvent 3.2 database d82a6cdc-1930-4a8a-9b07-2f7fda03fcbd
3.3 ecoinvent 3.3 database c667cc42-12a7-4d92-9d7b-5e4e90a7a274
3.4 ecoinvent 3.4 database db59e0c6-db9a-4d9a-8637-67b8ed42415c
3.5 ecoinvent 3.5 database ca0da4f4-c837-4005-9c17-e77b9bd09d8b
3.6 ecoinvent 3.6 database 766b9973-5ee8-48a2-8098-72c8e20b369f
3.7 ecoinvent 3.7 database de2729d9-235e-4588-8dd0-dba6a1d1f2e1
3.7.1 ecoinvent 3.7.1 database 3a4d6cdd-46ad-4ff3-8452-a0323e94f789
3.8 ecoinvent 3.8 database 0f4c65c0-6210-450f-b886-82bf8dd5ace9
3.9 ecoinvent 3.9 database c6825ce7-2951-4e1e-8634-426c7af4679b
3.9.1 ecoinvent 3.9.1 database e2034c8f-9d74-46f2-8fce-1f0c5c5cebeb
3.10 ecoinvent 3.10 database 6edab576-5247-472f-a2f4-0cb84561ca8b

This is the API documentation for it

The filtering can also be negated. The following code will filter for everything that does not declare GaBi as a background database:

In [12]:
params["dataSource"] = "28d74cc0-db8b-4d7e-bc44-5f6d56ce0c4a"
params["dataSourceMode"] = "NOT"

res = requests.get(f'{BASE_URL}{PROCESS_ENDPOINT}', headers=headers, params=params)
res.raise_for_status()
del params['dataSource']
del params["dataSourceMode"] 

df = pd.DataFrame(res.json()["data"])
df
Out[12]:
languages name uuid version geo classific classificId classificSystem type refYear validUntil compliance subType dataSources regNo regAuthority nodeid uri dsType
0 [en, da] \nSea sand 0/4 mm class E and bottom protectio... 6461e233-b1c2-4a39-922a-4a020732e2b4 00.01.000 RER Mineralische Baustoffe / Zuschläge / Sand und ... 1.2.01 OEKOBAU.DAT EPD 2025 2030 [{'name': 'EN 15804+A2 (EF 3.1)', 'uuid': 'd4a... specific dataset [{'uuid': 'b497a91f-e14b-4b69-8f28-f50eb157676... MD-25073-DA {'uuid': 'c7d370ee-2ab8-4b17-ba04-df29a8e607ea'} ECOSMDP https://ecosmdp.eco-platform.org/resource/proc... Process
1 [en] Birsta S N2 W2 c/c 1 m 18f4602a-6d0d-46ff-8701-9402b8e70e6f 00.05.001 CN Bygg / Stål-, aluminiumskonstruksjoner 992467c5-eec4-4d69-88ba-672f1a896481 EPDNorge EPD 2024 2029 [{'name': 'EN 15804+A2', 'uuid': 'c0016b33-8cf... specific dataset [{'uuid': 'b497a91f-e14b-4b69-8f28-f50eb157676... NEPD-6941-6333-EN {'uuid': '7008caa3-6fea-4ad2-81eb-f2b7a0610e6c'} EPD-NORWAY_DIGI https://epdnorway.lca-data.com/resource/datast... Process
2 [en] Durasein Solid Surface e26d3411-373a-4cdd-af82-08db7e36184f 07.01.065 GLO Construction products, Infrastructure & buildings 0 The International EPD System EPD 2023 2028 [{'name': 'EN 15804+A2 (EF 3.0)', 'uuid': 'c00... specific dataset [{'uuid': 'b497a91f-e14b-4b69-8f28-f50eb157676... EPD-IES-0007415:004 (S-P-07415) {'uuid': '5e09bd06-11a1-4292-a56b-47898ad6a691'} ENVIRONDEC https://data.environdec.com/resource/datastock... Process
3 [no] NaN ac58a83c-e898-4505-9d93-9c5b4e3e852f 00.04.000 NO Bygg / Betongvarer f107d200-244c-4c4b-9a14-0c2264316bc2 EPDNorge EPD 2024 2029 [{'name': 'EN 15804+A2', 'uuid': 'c0016b33-8cf... specific dataset [{'uuid': 'b497a91f-e14b-4b69-8f28-f50eb157676... NEPD-8487-8141-NO {'uuid': '7008caa3-6fea-4ad2-81eb-f2b7a0610e6c'} EPD-NORWAY_DIGI https://epdnorway.lca-data.com/resource/datast... Process
4 [no] NaN 10eba8d0-fcd6-4c80-9227-69de52a68740 00.03.000 IT Bygg / Stål-, aluminiumskonstruksjoner 992467c5-eec4-4d69-88ba-672f1a896481 EPDNorge EPD 2025 2030 [{'name': 'EN 15804+A2', 'uuid': 'c0016b33-8cf... generic dataset [{'uuid': 'b497a91f-e14b-4b69-8f28-f50eb157676... NEPD-8650-8317 {'uuid': '7008caa3-6fea-4ad2-81eb-f2b7a0610e6c'} EPD-NORWAY_DIGI https://epdnorway.lca-data.com/resource/datast... Process

Filter by EPD Numbers¶

Each EPD has a unique declaration number (in the data format, it is called registration number) which we can also use as a filter criterion, even a partial EPD number:

In [13]:
params["registrationNumber"] = "IBU-HOL-HOL-2204100" 

res = requests.get(f'{BASE_URL}{PROCESS_ENDPOINT}', headers=headers, params=params)
res.raise_for_status()
del params['registrationNumber']

df = pd.DataFrame(res.json()["data"])
df
Out[13]:
languages name uuid version geo classific classificSystem type refYear validUntil compliance subType dataSources regNo regAuthority nodeid uri dsType
0 [en] Concrete C16/20 ECOPact Prime , Mix code HTL29... f5512d96-cd2d-45a6-9bb7-a1b8aa013d69 00.01.000 UK 02 Bauprodukte / Normal- Leicht- und Porenbeto... IBUCategories EPD 2023 2028 [{'name': 'EN 15804+A2', 'uuid': 'c0016b33-8cf... specific dataset [{'uuid': 'b497a91f-e14b-4b69-8f28-f50eb157676... IBU-HOL-HOL-2204100-GB2023000136-1SUG001-EN {'uuid': 'd111dbec-b024-4be5-86c5-752d6eb2cf95'} IBU_DATA https://ibudata.lca-data.com/resource/datastoc... Process
1 [en] Concrete C16/20 ECOPact Prime , Mix code WAL29... 0c0cc282-f668-4a11-b216-015eff4fa7ff 00.01.000 UK 02 Bauprodukte / Normal- Leicht- und Porenbeto... IBUCategories EPD 2023 2028 [{'name': 'EN 15804+A2', 'uuid': 'c0016b33-8cf... specific dataset [{'uuid': 'b497a91f-e14b-4b69-8f28-f50eb157676... IBU-HOL-HOL-2204100-GB2023000181-1SUG001-EN {'uuid': 'd111dbec-b024-4be5-86c5-752d6eb2cf95'} IBU_DATA https://ibudata.lca-data.com/resource/datastoc... Process
2 [en] Concrete C16/20 ECOPact Prime, Mix code BRL292... a59871c4-2632-4387-b82a-53c98152776b 00.01.000 UK 02 Bauprodukte / Normal- Leicht- und Porenbeto... IBUCategories EPD 2023 2028 [{'name': 'EN 15804+A2', 'uuid': 'c0016b33-8cf... specific dataset [{'uuid': 'b497a91f-e14b-4b69-8f28-f50eb157676... IBU-HOL-HOL-2204100-GB2023000194-1SUG001-EN {'uuid': 'd111dbec-b024-4be5-86c5-752d6eb2cf95'} IBU_DATA https://ibudata.lca-data.com/resource/datastoc... Process
3 [en] Concrete C16/20 ECOPact Prime, Mix code BTL292... 3b01ec67-9fb8-48e9-b98f-caf0f03612b6 00.01.000 UK 02 Bauprodukte / Normal- Leicht- und Porenbeto... IBUCategories EPD 2023 2028 [{'name': 'EN 15804+A2', 'uuid': 'c0016b33-8cf... specific dataset [{'uuid': 'b497a91f-e14b-4b69-8f28-f50eb157676... IBU-HOL-HOL-2204100-GB2023000060-1SUG001-EN {'uuid': 'd111dbec-b024-4be5-86c5-752d6eb2cf95'} IBU_DATA https://ibudata.lca-data.com/resource/datastoc... Process
4 [en] Concrete C16/20 ECOPact Prime, Mix code BWL292... 5ab59e12-4c01-4882-8015-67a6df685783 00.01.000 UK 02 Bauprodukte / Normal- Leicht- und Porenbeto... IBUCategories EPD 2023 2028 [{'name': 'EN 15804+A2', 'uuid': 'c0016b33-8cf... specific dataset [{'uuid': 'b497a91f-e14b-4b69-8f28-f50eb157676... IBU-HOL-HOL-2204100-GB2023000081-1SUG001-EN {'uuid': 'd111dbec-b024-4be5-86c5-752d6eb2cf95'} IBU_DATA https://ibudata.lca-data.com/resource/datastoc... Process

There may be multiple datasets for a single EPD (with a single EPD number), for example in a case where there is a single EPD covering multiple product variants (e.g. a board with different thicknesses) while providing distinct LCA results for each variant. This is not to be confused with an EPD on an average of multiple products where there is only one set of LCA results.

Explaining the architecture¶

The entire system comprises two main parts. The first part, the ECO Portal, collects and combines data and is directly owned and operated by ECO Platform.

The second part is the nodes of the individual EPD Program Operators, which are all connected to the ECO Portal.

So far, we have mainly interacted with the ECO Portal.

This diagram explains the architecture.

Aggregator

The ECO Portal does not store data; it only collects data from the other nodes and can perform queries on it. It also does not show the complete dataset, but only the most relevant meta-data.

If you want to perform more complex queries on a single EPD, you can talk to the node directly to get the full dataset, like this:

full

So let's see what we can do on a single node.

Getting the PDF¶

We're going to look for an EPD dataset with a known EPD number, then generate the link that gives us the PDF for this EPD and then we are going to pull on that link.

In [14]:
params["registrationNumber"] = "IBU-HOL-HOL-2204100-DE2023000034-1SUG001-DE"

res = requests.get(f'{BASE_URL}{PROCESS_ENDPOINT}', headers=headers, params=params)
res.raise_for_status()
del params['registrationNumber']

df = pd.DataFrame(res.json()["data"])
df



lcd = df.iloc[0]
print(lcd)
uri = lcd["uri"]
uuid = lcd["uuid"]
version = lcd["version"]
languages                                                   [de, en]
name               Concrete C25/30 XC4 XF1 XA1 F3 16 M ECOPact , ...
uuid                            0ebf7111-4d1d-47a9-96cd-2e969f0f96a3
version                                                    00.01.001
geo                                                               DE
classific          02 Bauprodukte / Normal- Leicht- und Porenbeto...
classificSystem                                        IBUCategories
type                                                             EPD
refYear                                                         2023
validUntil                                                      2028
compliance         [{'name': 'EN 15804+A2', 'uuid': 'c0016b33-8cf...
subType                                             specific dataset
dataSources        [{'uuid': '28d74cc0-db8b-4d7e-bc44-5f6d56ce0c4...
regNo                    IBU-HOL-HOL-2204100-DE2023000034-1SUG001-DE
regAuthority        {'uuid': 'd111dbec-b024-4be5-86c5-752d6eb2cf95'}
nodeid                                                      IBU_DATA
uri                https://ibudata.lca-data.com/resource/datastoc...
dsType                                                       Process
Name: 0, dtype: object
In [15]:
base_url = uri.split("/")[0] +"//" + uri.split("/")[2] 
url = f"{base_url}/resource/processes/{uuid}/epd?version={version}"
print(url)

# Make the GET request
response = requests.get(url, headers=headers)

# Check if the request was successful
if response.status_code == 200:
    # Save the PDF to a file
    with open("example_process.pdf", "wb") as file:
        file.write(response.content)
    print("PDF downloaded successfully.")
else:
    print(f"Failed to download PDF. Status code: {response.status_code}")
https://ibudata.lca-data.com/resource/processes/0ebf7111-4d1d-47a9-96cd-2e969f0f96a3/epd?version=00.01.001
PDF downloaded successfully.

Get CSV¶

The results of the EPD are also available in CSV format, where the results for each module are rendered as one row, which we can retrieve as follows:

In [16]:
base_url = uri.split("/")[0] +"//" + uri.split("/")[2]
base_url = " https://ibudata.lca-data.com"
url = f"{base_url}/resource/processes/{uuid}?format=csv&version={version}"
print(url)
print()
# Make the GET request
response = requests.get(url , headers=headers)


from io import StringIO
csv_file = StringIO(response.text)
df = pd.read_csv(csv_file,  sep=';')
df
 https://ibudata.lca-data.com/resource/processes/0ebf7111-4d1d-47a9-96cd-2e969f0f96a3?format=csv&version=00.01.001

Out[16]:
UUID Version Name (de) Name (en) Kategorie (original) Konformitaet Hintergrunddatenbank(en) Laenderkennung Typ Referenzjahr ... HTPc (A2) HTPnc (A2) IRP (A2) SOP (A2) ODP (A2) POCP (A2) ADPF (A2) ADPE (A2) WDP (A2) Unnamed: 80
0 0ebf7111-4d1d-47a9-96cd-2e969f0f96a3 00.01.001 Beton C25/30 XC4 XF1 XA1 F3 16 M ECOPact , Rez... Concrete C25/30 XC4 XF1 XA1 F3 16 M ECOPact , ... '02 Bauprodukte' / 'Normal- Leicht- und Porenb... 'EN 15804+A2' / 'ISO 14025' 'GaBi database (28d74cc0-db8b-4d7e-bc44-5f6d56... DE specific dataset 2023 ... 1.520000e-08 1.749000e-06 3.616000 116.700 1.000000e-10 0.25260 877.30 7.400000e-06 5.54800 NaN
1 0ebf7111-4d1d-47a9-96cd-2e969f0f96a3 00.01.001 Beton C25/30 XC4 XF1 XA1 F3 16 M ECOPact , Rez... Concrete C25/30 XC4 XF1 XA1 F3 16 M ECOPact , ... '02 Bauprodukte' / 'Normal- Leicht- und Porenb... 'EN 15804+A2' / 'ISO 14025' 'GaBi database (28d74cc0-db8b-4d7e-bc44-5f6d56... DE specific dataset 2023 ... 8.000000e-10 6.620000e-08 0.007263 22.440 1.100000e-15 0.05488 44.46 2.233000e-07 0.02749 NaN
2 0ebf7111-4d1d-47a9-96cd-2e969f0f96a3 00.01.001 Beton C25/30 XC4 XF1 XA1 F3 16 M ECOPact , Rez... Concrete C25/30 XC4 XF1 XA1 F3 16 M ECOPact , ... '02 Bauprodukte' / 'Normal- Leicht- und Porenb... 'EN 15804+A2' / 'ISO 14025' 'GaBi database (28d74cc0-db8b-4d7e-bc44-5f6d56... DE specific dataset 2023 ... 2.000000e-10 1.480000e-08 0.036620 3.138 1.131000e-13 0.01217 15.01 7.400000e-08 0.01124 NaN
3 0ebf7111-4d1d-47a9-96cd-2e969f0f96a3 00.01.001 Beton C25/30 XC4 XF1 XA1 F3 16 M ECOPact , Rez... Concrete C25/30 XC4 XF1 XA1 F3 16 M ECOPact , ... '02 Bauprodukte' / 'Normal- Leicht- und Porenb... 'EN 15804+A2' / 'ISO 14025' 'GaBi database (28d74cc0-db8b-4d7e-bc44-5f6d56... DE specific dataset 2023 ... 0.000000e+00 0.000000e+00 0.000000 0.000 0.000000e+00 0.00000 0.00 0.000000e+00 0.00000 NaN
4 0ebf7111-4d1d-47a9-96cd-2e969f0f96a3 00.01.001 Beton C25/30 XC4 XF1 XA1 F3 16 M ECOPact , Rez... Concrete C25/30 XC4 XF1 XA1 F3 16 M ECOPact , ... '02 Bauprodukte' / 'Normal- Leicht- und Porenb... 'EN 15804+A2' / 'ISO 14025' 'GaBi database (28d74cc0-db8b-4d7e-bc44-5f6d56... DE specific dataset 2023 ... 2.200000e-09 1.423000e-07 0.015150 36.250 2.900000e-15 0.14280 115.60 7.520000e-07 0.03759 NaN
5 0ebf7111-4d1d-47a9-96cd-2e969f0f96a3 00.01.001 Beton C25/30 XC4 XF1 XA1 F3 16 M ECOPact , Rez... Concrete C25/30 XC4 XF1 XA1 F3 16 M ECOPact , ... '02 Bauprodukte' / 'Normal- Leicht- und Porenb... 'EN 15804+A2' / 'ISO 14025' 'GaBi database (28d74cc0-db8b-4d7e-bc44-5f6d56... DE specific dataset 2023 ... 2.400000e-09 1.224000e-07 0.016370 39.180 3.100000e-15 0.02832 124.90 8.129000e-07 0.04064 NaN
6 0ebf7111-4d1d-47a9-96cd-2e969f0f96a3 00.01.001 Beton C25/30 XC4 XF1 XA1 F3 16 M ECOPact , Rez... Concrete C25/30 XC4 XF1 XA1 F3 16 M ECOPact , ... '02 Bauprodukte' / 'Normal- Leicht- und Porenb... 'EN 15804+A2' / 'ISO 14025' 'GaBi database (28d74cc0-db8b-4d7e-bc44-5f6d56... DE specific dataset 2023 ... 8.000000e-10 4.910000e-08 0.363600 9.117 9.000000e-16 0.03834 80.37 2.314000e-07 0.03252 NaN
7 0ebf7111-4d1d-47a9-96cd-2e969f0f96a3 00.01.001 Beton C25/30 XC4 XF1 XA1 F3 16 M ECOPact , Rez... Concrete C25/30 XC4 XF1 XA1 F3 16 M ECOPact , ... '02 Bauprodukte' / 'Normal- Leicht- und Porenb... 'EN 15804+A2' / 'ISO 14025' 'GaBi database (28d74cc0-db8b-4d7e-bc44-5f6d56... DE specific dataset 2023 ... -3.000000e-09 -2.009000e-07 -0.568000 -65.780 -1.000000e-10 -0.01614 -119.90 -3.565000e-06 -2.58600 NaN

8 rows × 81 columns

Get full dataset in ILCD+EPD format as ZIP file¶

If you want to obtain the complete ILCD+EPD dataset including its dependencies as a ZIP file, you can use the code below. For more details on the structure of the ZIP file, refer to the ILCD+EPD Data Format Introduction.

In [17]:
url = f"{base_url}/resource/processes/{uuid}/zipexport?version={version}"
print(url)
print()
# Make the GET request
response = requests.get(url , headers=headers)

output_path = "example_process.zip"


if response.status_code == 200:
    with open(output_path, "wb") as f:
        f.write(response.content)
    print("Download complete.")
else:
    print("Failed to download file. Status code:", response.status_code)
 https://ibudata.lca-data.com/resource/processes/0ebf7111-4d1d-47a9-96cd-2e969f0f96a3/zipexport?version=00.01.001

Download complete.

Amended¶

Python Setup¶

You need to have Python set up for this notebook to run.

Just follow the instructions provided here.

We recommend using a virtual environment, but feel free to use whatever you like.

  1. Create and activate a virtual environment:

    python3 -m venv py_env
    source py_env/bin/activate
    
  2. Install the required packages:

    pip install ipykernel notebook numpy matplotlib pandas pyarrow ipympl
    
  3. Add the virtual environment to Jupyter:

    python -m ipykernel install --user --name=py_env --display-name "Python (py_env)"
    
  4. (Optional) Open the project in VSCode:

    code .
    
    • Ensure the virtual environment is active inside VSCode.
    • Select the kernel Python (py_env) when opening a notebook.
  5. If using the integrated terminal in VSCode, activate the environment inside the terminal:

    source py_env/bin/activate
    

Getting API Key¶

To get started, you'll need an access token. Follow these steps:

  1. Register for an API Key:

    • Go to the registration page.
    • Complete the registration process if you haven’t already.
  2. Generate Your Token:

    • Scroll to the bottom of the page and click on My Profile.
    • Navigate to the API Key section.
    • Generate a new API key and copy it.
  3. Save the Token:

    • Create a .env file in your project folder.
    • Add the token to the file with the variable name TOKEN. The .env file should look something like this:
      plaintext
      TOKEN=iY291bnRyeSI6IkR...aWFz
      

License¶

This notebook is under the MIT license