Yale APIepi.yale.edu ↗
Access Yale's 2026 Environmental Performance Index for 177 countries. Get scores, ranks, and 47 indicator values per country via a single API endpoint.
What is the Yale API?
The Yale EPI API returns the full Environmental Performance Index scorecard for any of 177 ranked countries through a single endpoint, get_country_epi. Each response includes 47 indicator-level scores, global and regional ranks, 10-year trend values, and country metadata such as GDP and population. You can query by country name or ISO 3166-1 alpha-3 code, making it straightforward to integrate EPI data into dashboards, research pipelines, or policy tools.
curl -X GET 'https://api.parse.bot/scraper/1b38522f-7069-42f1-8dc7-344a85ee8473/get_country_epi?country=Estonia' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace epi-yale-edu-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Yale EPI API — fetch a country's environmental scorecard."""
from parse_apis.epi_yale_edu_api import Epi, CountryNotFound
client = Epi()
# Look up a country by name and inspect its metadata.
country = client.countries.get(country="Estonia")
print(f"{country.country} ({country.iso_code}) — Region: {country.region}")
print(f" GDP per capita: ${country.metadata.gdp_per_capita:,.2f}")
print(f" Population: {country.metadata.population_millions}M")
# Browse the top indicators by score.
for ind in country.indicators[:5]:
print(f" {ind.indicator}: score={ind.score}, rank={ind.rank}, 10yr change={ind.ten_year_change}")
# Handle a country that doesn't exist.
try:
client.countries.get(country="Atlantis")
except CountryNotFound as e:
print(f"Not found: {e.message}")
print("exercised: countries.get / Metadata fields / Indicator fields / CountryNotFound")
Returns the full Environmental Performance Index scorecard for a given country, including 47 indicator scores, ranks, 10-year changes, regional ranks, and regional averages. Also includes country metadata (GDP, population, land area). Accepts country name (e.g. 'Netherlands') or ISO 3166-1 alpha-3 code (e.g. 'NLD'). Makes two requests: one to resolve the country's region, one to fetch its data.
| Param | Type | Description |
|---|---|---|
| countryrequired | string | Country name (e.g. 'Netherlands', 'Brazil') or ISO 3166-1 alpha-3 code (e.g. 'NLD', 'BRA'). Case-insensitive. |
{
"type": "object",
"fields": {
"region": "EPI geographic region name",
"country": "Country name as displayed on the EPI site",
"iso_code": "ISO 3166-1 alpha-3 country code",
"metadata": "Object with gdp_ppp_billions, gdp_per_capita, population_millions, land_area_sq_km",
"indicators": "Array of indicator objects, each with indicator name, rank, score, ten_year_change, regional_rank, regional_average"
},
"sample": {
"data": {
"region": "Eastern Europe",
"country": "Estonia",
"iso_code": "EST",
"metadata": {
"gdp_per_capita": 41200.33,
"land_area_sq_km": 42730,
"gdp_ppp_billions": 56.53,
"population_millions": 1.37
},
"indicators": [
{
"rank": 1,
"score": 74.79,
"indicator": "Environmental Performance Index",
"regional_rank": 1,
"ten_year_change": 23.22,
"regional_average": 54.93
},
{
"rank": 25,
"score": 75.88,
"indicator": "Environmental Health",
"regional_rank": 1,
"ten_year_change": 16.02,
"regional_average": 57
},
{
"rank": 15,
"score": 80.76,
"indicator": "Air Quality",
"regional_rank": 1,
"ten_year_change": 21.93,
"regional_average": 49.13
}
]
},
"status": "success"
}
}About the Yale API
What the API returns
The get_country_epi endpoint accepts a country parameter — either a plain-English country name like Netherlands or an ISO 3166-1 alpha-3 code like NLD — and returns the complete 2026 EPI scorecard for that country. The top-level response includes the country's region, display country name, and iso_code, plus a metadata object carrying gdp_ppp_billions, gdp_per_capita, population_millions, and land_area_sq_km.
Indicator data
The indicators array contains one object per indicator (47 total in the 2026 edition). Each indicator object exposes the indicator name, the country's global rank and score, a ten_year_change value showing how the score has shifted since 2016, a regional_rank among peer countries in the same EPI geographic region, and the regional_average score for context. Indicators span categories including air quality, water resources, biodiversity, climate change, and waste management, reflecting the full breadth of the EPI framework.
Lookup flexibility
The country input is case-insensitive and supports both free-text names and three-letter ISO codes, which simplifies integration when your existing dataset already uses ISO codes. The coverage of 177 countries matches Yale's published 2026 EPI roster; countries not included in the Yale study will not return results.
The Yale API is a managed, monitored endpoint for epi.yale.edu — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when epi.yale.edu changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official epi.yale.edu API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a country comparison tool that ranks nations by a specific EPI indicator score from the
indicatorsarray - Track 10-year environmental progress using
ten_year_changevalues to identify improving or declining countries - Enrich ESG datasets with official EPI scores and global ranks keyed to ISO 3166-1 alpha-3 codes
- Generate regional benchmarking reports using
regional_rankandregional_averagefor each indicator - Correlate environmental performance with economic development using
gdp_per_capitaandpopulation_millionsfrom themetadataobject - Populate academic research dashboards with Yale EPI 2026 data for climate policy or sustainability analysis
- Power map visualizations that color 177 countries by overall EPI rank or any of the 47 indicator scores
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Yale provide an official developer API for EPI data?+
What does the `indicators` array actually contain for a country?+
indicators represents one of the 47 EPI indicators for the requested country. It includes the indicator name, the country's global rank and score for that indicator, a ten_year_change value (the score difference since 2016), a regional_rank within the EPI geographic region, and the regional_average score across all countries in that region.Can I retrieve scores for all 177 countries in a single call, or filter by region?+
get_country_epi once per country. You can fork this API on Parse and revise it to add a bulk or region-scoped endpoint.Does the API expose historical EPI data from editions before 2026?+
ten_year_change field reflects the score delta since 2016, but raw scores from prior EPI editions (2020, 2018, etc.) are not returned. You can fork this API on Parse and revise it to add endpoints for earlier editions if that data is needed.Are there countries that return no results?+
country parameter supports both full names and ISO alpha-3 codes, so a lookup failure generally means the country is outside Yale's 177-country scope rather than a query format issue.