IntelliProcure/sustainability_criteria
Sustainability Procurement Criteria This dataset contains sustainability procurement criteria organized by groups of goods and services (GGS) (German: Waren- und Dienstleistungsgruppen; WDG). It originates from validated Excel files and has been converted to JSONL format for easy consumption. Groups of Goods and Services Note: This dataset is currently under active development. Additional groups of goods and services will be added in future releases. The dataset… See the full description on the dataset page: https://huggingface.co/datasets/IntelliProcure/sustainability_criteria.
Sustainability Procurement Criteria
This dataset contains sustainability procurement criteria organized by groups of goods and services (GGS) (German: Waren- und Dienstleistungsgruppen; WDG). It originates from validated Excel files and has been converted to JSONL format for easy consumption.
Groups of Goods and Services
Note: This dataset is currently under active development. Additional groups of goods and services will be added in future releases.
The dataset currently covers the following groups of goods and services (GGS/WDG):
Dataset Structure
Format
- Format: JSONL (JSON Lines) - one JSON object per line
- Encoding: UTF-8
- Compression: None
Files
The core dataset is a single merged JSONL file (sustainability_criteria.jsonl) containing criteria from all groups of goods and services (GGS/WDG; Waren- und Dienstgruppen). Each record includes GGS/WDG identifiers (WDG_ID, wdg_name_en, wdg_name_de) to distinguish criteria by category.
Two companion files provide LLM-generated summaries at a coarser grain than individual criteria - see Catalog & Area-of-Action Summaries:
ggs_summaries.jsonl- one row per GGS/WDG catalogaoa_summaries.jsonl- one row per Handlungsfeld (area of action) within a catalog
Each is registered as its own Hugging Face dataset config (ggs_summaries, aoa_summaries), loadable independently of the default config.
Fields
Each JSONL line contains the following fields:
Notes
- Empty fields: Fields with no value are represented as empty strings
- Forward-filled hierarchical data:
Handlungsfeld-IDandHandlungsfeldvalues are propagated downward within each file - Source references: Use the
Quellefield to look up source details in the corresponding*_metadata.jsonfile
WDG-Specific Fields
Fields marked as (WDG-specific) are unique to each Waren- und Dienstleistungsgruppe (goods and services group). These fields may vary across different WDGs. All other fields are standardized across all WDGs.
Catalog & Area-of-Action Summaries
In addition to the criteria themselves, two companion files provide concise, sector-focused LLM-generated summaries at a coarser grain: per catalog, and per area of action within a catalog. Both are grounded in the criteria text of the items they summarize, are written in German, and deliberately favor domain/sector terminology over generic sustainability language. Coverage may be partial - not every catalog or area of action necessarily has a summary yet.
ggs_summaries.jsonl - one row per catalog (GGS/WDG)
aoa_summaries.jsonl - one row per Handlungsfeld (area of action)
Loading and joining the summaries
from datasets import load_dataset
criteria = load_dataset("IntelliProcure/sustainability_criteria")["train"]
ggs_summaries = load_dataset("IntelliProcure/sustainability_criteria", "ggs_summaries")["train"]
aoa_summaries = load_dataset("IntelliProcure/sustainability_criteria", "aoa_summaries")["train"]
# Combine with pandas: attach catalog- and area-of-action-level context to every criterion
df = criteria.to_pandas()
df = df.merge(ggs_summaries.to_pandas(), on="WDG_ID", how="left")
df = df.merge(aoa_summaries.to_pandas(), on=["WDG_ID", "Handlungsfeld-ID"], how="left")Data Description
Criterion Categories
- EK (Eignungskriterium): Selection criterion
- TS (Technische Spezifikation): Technical specification
- ZK (Zuschlagskriterium): Award criterion
- TB (Zwingende Teilnahmebedingung): Mandatory participation condition
Sustainability Dimensions
- ökologisch: Environmental/Ecological
- sozial: Social
- ökonomisch: Economic
Ambition Levels
- Basis: Basic level
- Gute Praxis: Good practice
- Vorbild: Best practice / exemplary
Usage Examples
Load with Hugging Face Datasets Library
Basic Loading
from datasets import load_dataset
# Load the entire dataset
catalog = load_dataset("IntelliProcure/sustainability_criteria")
# Access the train split
criteria = catalog['train']
print(f"Total criteria: {len(criteria)}")
print(f"Columns: {criteria.column_names}")Working with the Dataset
from datasets import load_dataset
catalog = load_dataset("IntelliProcure/sustainability_criteria")
criteria = catalog['train']
# Convert to pandas DataFrame
df = criteria.to_pandas()
# Access specific records
first_record = criteria[0]
print(first_record['Ausschreibungskriterium'])
# Get multiple records
first_ten = criteria[:10]
# Filter criteria by category
selection_criteria = criteria.filter(lambda x: x['Kategorie Kriterium'] == 'EK')
# Filter by sustainability dimension
ecological = criteria.filter(
lambda x: 'ökologisch' in x['Nachhaltigkeitsdimensionen']
)
# Get records from specific action field
food_criteria = criteria.filter(lambda x: x['Handlungsfeld'] == 'Food')Advanced Filtering and Analysis
from datasets import load_dataset
import pandas as pd
catalog = load_dataset("IntelliProcure/sustainability_criteria")
df = catalog['train'].to_pandas()
# Find all criteria by multiple dimensions
multi_dim = df[
df['Nachhaltigkeitsdimensionen'].str.contains('ökologisch|sozial', na=False)
]
# Group by action field
by_field = df.groupby('Handlungsfeld').size()
print(by_field)
# Get statistics on ambition levels
print(df[['Ambitionsniveau: Basis', 'Ambitionsniveau: Gute Praxis']].notna().sum())
# Find criteria with all three ambition levels
complete = df[
(df['Ambitionsniveau: Basis'] != '') &
(df['Ambitionsniveau: Gute Praxis'] != '') &
(df['Ambitionsniveau: Vorbild'] != '')
]Stream Large Datasets
from datasets import load_dataset
# Stream data without downloading entirely (useful for large datasets)
catalog = load_dataset("IntelliProcure/sustainability_criteria", streaming=True)
criteria_stream = catalog['train']
# Iterate through records
for i, record in enumerate(criteria_stream):
if i >= 100: # Process first 100
break
print(record['Kriterium-ID'], record['Ausschreibungskriterium'])Access Dataset Information
from datasets import load_dataset
catalog = load_dataset("IntelliProcure/sustainability_criteria")
criteria = catalog['train']
# Dataset info
print(criteria.info)
print(criteria.features)
print(f"Number of records: {len(criteria)}")
# Column names and types
print(criteria.column_names)
for feature_name, feature_type in criteria.features.items():
print(f" {feature_name}: {feature_type}")
# Get unique values
print(f"Unique areas of action: {criteria.unique('Handlungsfeld')}")
print(f"Unique categories: {criteria.unique('Kategorie Kriterium')}")Load with Pandas
import pandas as pd
# Load the merged JSONL file
df = pd.read_json('sustainability_criteria.jsonl', lines=True)
# Filter by WDG
food_criteria = df[df['wdg_name_en'] == 'Food']
# Filter by category
procurement_criteria = df[df['Kategorie Kriterium'] == 'EK']
# Filter by sustainability dimension
ecological = df[df['Nachhaltigkeitsdimensionen'].str.contains('ökologisch', na=False)]Load with Json Module
import json
with open('sustainability_criteria.jsonl', 'r', encoding='utf-8') as f:
for line in f:
record = json.loads(line)
print(record['Ausschreibungskriterium'])Resolve Source References
import json
# Load metadata to resolve source references
with open('sustainability_criteria_metadata.json', 'r', encoding='utf-8') as f:
metadata = json.load(f)
sources = metadata['sources']
# Example: resolve a source reference
quelle_value = "Q-1, Q-2"
source_ids = [s.strip() for s in quelle_value.split(',')]
for sid in source_ids:
if sid in sources:
print(f"{sid}: {sources[sid]}")Filter by WDG
from datasets import load_dataset
catalog = load_dataset("IntelliProcure/sustainability_criteria")
criteria = catalog['train']
# Filter by English WDG name
food_criteria = criteria.filter(lambda x: x['wdg_name_en'] == 'Food')
# Filter by German WDG name
food_criteria_de = criteria.filter(lambda x: x['wdg_name_de'] == 'Lebensmittel')
# Filter by source file
food_v1 = criteria.filter(lambda x: x['source_file'] == 'Food_V1.0')
# Get unique WDGs
df = criteria.to_pandas()
print(df['wdg_name_en'].unique())
print(df['wdg_name_de'].unique())Sources
Each criterion includes references to source documents. Source details are provided in the metadata files.
Common sources include:
- EU GPP (Green Public Procurement) criteria
- German environmental labels and standards
- Industry-specific guidelines
- Sustainability certifications
License
CC-BY-4.0
Citation
If you use this dataset, please cite:
@dataset{sustainability_criteria,
author = { Tilia Renate Ellendorff and Luca Sven Rolshoven and Veton Matoshi and Jann Jeremy Austin and Judith Binder },
title = {{Sustainable Procurement Criteria}},
year = 2026,
url = { https://huggingface.co/datasets/IntelliProcure/sustainability_criteria },
doi = { 10.57967/hf/7958 },
publisher = { Hugging Face }
}Last Updated: 2026-09-18 Dataset Version: 1.0 Format Version: 1.0
