Overview
Daily surface weather for agriculture, 1979 to present, on a global 0.1° grid. AgERA5 aggregates the hourly ECMWF ERA5 reanalysis to local-time days and corrects it to the finer topography, land use and coastlines of ECMWF’s 0.1° HRES model. Its 27 variables (air and dew point temperature, precipitation, solar radiation, humidity, vapour pressure, wind, cloud cover, snow, FAO-56 reference evapotranspiration) match the inputs of most crop and agro-ecological models. The primary access is ECMWF’s two analysis-ready Zarr stores, one chunked for time series at points and one for maps of a region; a Google Earth Engine copy and the CDS API are alternatives.
Important note
Each day runs midnight to midnight local time at the grid cell, not UTC. Temperatures are kelvin and solar radiation is J m-2 d-1; convert as needed. The time axis trails real time by about a week. Values are reanalysis, not station observations: expect bias at single sites, especially for precipitation in mountains.
Quick start
"""Read AgERA5 daily values for a few points from the ECMWF ARCO Zarr store.
Needs a free Copernicus CDS account and its Personal Access Token (see AGENTS.md):
pip install xarray zarr dask fsspec aiohttp
CDSAPI_KEY=<token> python example.py
"""
import os
from pathlib import Path
import xarray as xr
# "geoChunked" = small spatial tiles, long time runs: cheap for long time series at a few places.
# Swap in .../cadl-arco-time-001/.../timeChunked.zarr (one day per chunk) for maps on a few days.
URL = "https://arco.datastores.ecmwf.int/cadl-arco-geo-001/arco/sis_agrometeorological_indicators/all/geoChunked.zarr"
def cds_key() -> str:
"""CDSAPI_KEY env var, else the `key:` line of ~/.cdsapirc."""
if key := os.environ.get("CDSAPI_KEY"):
return key
rc = Path.home() / ".cdsapirc"
if rc.exists():
for line in rc.read_text().splitlines():
if line.startswith("key:"):
return line.split(":", 1)[1].strip()
raise SystemExit("No CDS key: set CDSAPI_KEY or create ~/.cdsapirc")
ds = xr.open_zarr(
URL,
consolidated=True,
chunks={},
storage_options={"headers": {"Authorization": f"Bearer {cds_key()}"}},
)
# Pick variables and dates first, then all points in one vectorised sel.
variables = ["Temperature_Air_2m_Max_24h", "Temperature_Air_2m_Min_24h", "Precipitation_Flux"]
lats = [-1.29, 9.03] # Nairobi, Addis Ababa
lons = [36.82, 38.74]
points = dict(latitude=xr.DataArray(lats, dims="pt"), longitude=xr.DataArray(lons, dims="pt"))
sub = ds[variables].sel(time=slice("2023-01-01", "2023-12-31")).sel(**points, method="nearest").compute()
df = sub.to_dataframe().reset_index()
df["tmax_c"] = df["Temperature_Air_2m_Max_24h"] - 273.15 # kelvin to celsius
print(df.head())Provided by the dataset authors: Python example
Intended uses
- daily weather inputs for crop, livestock and agro-ecological models
- weather time series for trial sites, farms and other point locations
- growing-season summaries such as rainfall totals, heat days and evapotranspiration
Not recommended for
Why: AgERA5 is a daily aggregate.
Use instead: ERA5 hourly data on single levels (DOI 10.24381/cds.adbb2d47).
Why: reanalysis on an 11 km grid, so local effects and extremes are smoothed.
Use instead: nearby weather station records, with AgERA5 to fill gaps.
Access & use
Files, endpoints, and worked examples for each distribution.
Access conditions
Free, but every route needs an account. The Zarr stores and the CDS API take a Copernicus Climate Data Store (CDS) Personal Access Token: register at https://cds.climate.copernicus.eu, copy the token from your profile page, then open the dataset page, go to the Download tab and accept the dataset licence at the bottom. Until the licence is accepted the stores answer 401 or 403 even with a valid token. Send the token as an HTTP header "Authorization: Bearer <token>"; example.py beside this record is a working call. The Earth Engine asset needs a Google Earth Engine account.
Data
Primary access. Zarr store chunked 2112 days x 16 lat x 32 lon (about 5.8 years x 1.6° x 3.2° per chunk), so long time series at a few points or a small area read few chunks. Slow for a whole region on one day; use the time-chunked store for that.
Format: Zarr — best for cloud-native analysis, reading just the slices you need from the full cube
Variables: Temperature_Air_2m_Max_24h, Temperature_Air_2m_Min_24h, Temperature_Air_2m_Mean_24h, Temperature_Air_2m_Max_Day_Time, Temperature_Air_2m_Mean_Day_Time, Temperature_Air_2m_Min_Night_Time +21 more
Dimensions: cell × time
Access the data
https://arco.datastores.ecmwf.int/cadl-arco-geo-001/arco/sis_agrometeorological_indicators/all/geoChunked.zarr
Same data chunked 1 day x 1024 lat x 1024 lon, so a map of a region or the globe for a few days reads few chunks. Slow for long time series; use the geo-chunked store for that.
Format: Zarr — best for cloud-native analysis, reading just the slices you need from the full cube
Variables: Temperature_Air_2m_Max_24h, Temperature_Air_2m_Min_24h, Temperature_Air_2m_Mean_24h, Temperature_Air_2m_Max_Day_Time, Temperature_Air_2m_Mean_Day_Time, Temperature_Air_2m_Min_Night_Time +21 more
Dimensions: cell × time
Access the data
https://arco.datastores.ecmwf.int/cadl-arco-time-001/arco/sis_agrometeorological_indicators/all/timeChunked.zarr
Google Earth Engine image collection projects/climate-engine-pro/assets/ce-ag-era5-v2/daily, curated by Climate Engine. One image per day, same band names and units as the Zarr stores, but 21 of the 27 variables.
Variables: Temperature_Air_2m_Max_24h, Temperature_Air_2m_Min_24h, Temperature_Air_2m_Mean_24h, Temperature_Air_2m_Max_Day_Time, Temperature_Air_2m_Mean_Day_Time, Temperature_Air_2m_Min_Night_Time +15 more
Dimensions: cell × time
Access the data
https://earthengine.googleapis.com/v1/projects/climate-engine-pro/assets/ce-ag-era5-v2/daily
Other access methods
Backup route. The CDS retrieve API returns NetCDF per variable, statistic and period on request; slower than the Zarr stores and queued, but needs only the cdsapi package.
Format: application/x-netcdf
Variables: Temperature_Air_2m_Max_24h, Temperature_Air_2m_Min_24h, Temperature_Air_2m_Mean_24h, Temperature_Air_2m_Max_Day_Time, Temperature_Air_2m_Mean_Day_Time, Temperature_Air_2m_Min_Night_Time +21 more
Dimensions: cell × time
Access the data
https://cds.climate.copernicus.eu/api/retrieve/v1/processes/sis-agrometeorological-indicators
Additional assets
Reads three variables for two points and one year from the geo-chunked store with the CDS token.
Format: text/x-python
Access the dataOpen
https://raw.githubusercontent.com/CGIAR-Climate-Data-Hub/cdh-catalog/main/records/agera5/example.py
View example
"""Read AgERA5 daily values for a few points from the ECMWF ARCO Zarr store.
Needs a free Copernicus CDS account and its Personal Access Token (see AGENTS.md):
pip install xarray zarr dask fsspec aiohttp
CDSAPI_KEY=<token> python example.py
"""
import os
from pathlib import Path
import xarray as xr
# "geoChunked" = small spatial tiles, long time runs: cheap for long time series at a few places.
# Swap in .../cadl-arco-time-001/.../timeChunked.zarr (one day per chunk) for maps on a few days.
URL = "https://arco.datastores.ecmwf.int/cadl-arco-geo-001/arco/sis_agrometeorological_indicators/all/geoChunked.zarr"
def cds_key() -> str:
"""CDSAPI_KEY env var, else the `key:` line of ~/.cdsapirc."""
if key := os.environ.get("CDSAPI_KEY"):
return key
rc = Path.home() / ".cdsapirc"
if rc.exists():
for line in rc.read_text().splitlines():
if line.startswith("key:"):
return line.split(":", 1)[1].strip()
raise SystemExit("No CDS key: set CDSAPI_KEY or create ~/.cdsapirc")
ds = xr.open_zarr(
URL,
consolidated=True,
chunks={},
storage_options={"headers": {"Authorization": f"Bearer {cds_key()}"}},
)
# Pick variables and dates first, then all points in one vectorised sel.
variables = ["Temperature_Air_2m_Max_24h", "Temperature_Air_2m_Min_24h", "Precipitation_Flux"]
lats = [-1.29, 9.03] # Nairobi, Addis Ababa
lons = [36.82, 38.74]
points = dict(latitude=xr.DataArray(lats, dims="pt"), longitude=xr.DataArray(lons, dims="pt"))
sub = ds[variables].sel(time=slice("2023-01-01", "2023-12-31")).sel(**points, method="nearest").compute()
df = sub.to_dataframe().reset_index()
df["tmax_c"] = df["Temperature_Air_2m_Max_24h"] - 273.15 # kelvin to celsius
print(df.head())Getting a key, choosing a store, variable units, and efficient point reads.
Format: text/markdown
Data dictionary
What each file holds. A layout describes how the data is stored in a file: its variables, the dimensions they vary over, and any keys.
File layouts
| Files | Format | Variables | Dimensions | No data |
|---|---|---|---|---|
| zarr-geo-chunked, zarr-time-chunked, cds-api | Zarr, application/x-netcdf | Temperature_Air_2m_Max_24h, Temperature_Air_2m_Min_24h, Temperature_Air_2m_Mean_24h, Temperature_Air_2m_Max_Day_Time +23 more | cell × time | -9999 |
| gee | Temperature_Air_2m_Max_24h, Temperature_Air_2m_Min_24h, Temperature_Air_2m_Mean_24h, Temperature_Air_2m_Max_Day_Time +17 more | cell × time | -9999 |
In every file
Dimensions
0.1° (~11 km at equator). Latitude ascends from -90 to 90, longitude from -180 to 179.9.
Grid spacing: 0.1 degree
Day, midnight to midnight local time (00-00LT). Grows daily, about a week behind present.
Only in zarr-geo-chunked, zarr-time-chunked, cds-api
Variables
| Variable | Type | Unit | Description |
|---|---|---|---|
| Temperature_Air_2m_Max_24h | float32 | K | Maximum air temperature at 2 m over the local day. |
| Temperature_Air_2m_Min_24h | float32 | K | Minimum air temperature at 2 m over the local day. |
| Temperature_Air_2m_Mean_24h | float32 | K | Mean air temperature at 2 m over the local day. |
| Temperature_Air_2m_Max_Day_Time | float32 | K | Maximum air temperature at 2 m between 06 and 18 local time. |
| Temperature_Air_2m_Mean_Day_Time | float32 | K | Mean air temperature at 2 m between 06 and 18 local time. |
| Temperature_Air_2m_Min_Night_Time | float32 | K | Minimum air temperature at 2 m between 18 and 06 local time. |
| Temperature_Air_2m_Mean_Night_Time | float32 | K | Mean air temperature at 2 m between 18 and 06 local time. |
| Dew_Point_Temperature_2m_Mean_24h | float32 | K | Mean dew point temperature at 2 m over the local day. |
| Precipitation_Flux | float32 | mm d-1 | Total precipitation over the local day. |
| Precipitation_Duration_Fraction | float32 | 1 | Fraction of the day's hours with precipitation of at least 0.1 mm/h. |
| Precipitation_Rain_Duration_Fraction | float32 | 1 | Fraction of the day's hours with rain. |
| Precipitation_Solid_Duration_Fraction | float32 | 1 | Fraction of the day's hours with solid precipitation (freezing rain, snow, wet snow, rain-snow mix, ice pellets; no hail). |
| Solar_Radiation_Flux | float32 | J m-2 d-1 | Surface downward solar radiation summed over the local day. |
| ReferenceET_PenmanMonteith_FAO56 | float32 | mm d-1 | Penman-Monteith reference evapotranspiration, FAO-56 method, over the local day. |
| Derived_Relative_Humidity_2m_Max_24h | float32 | % | Maximum relative humidity at 2 m, derived from the daily minimum temperature and mean vapour pressure. |
| Derived_Relative_Humidity_2m_Min_24h | float32 | % | Minimum relative humidity at 2 m, derived from the daily maximum temperature and mean vapour pressure. |
| Relative_Humidity_2m_06h | float32 | % | Relative humidity at 2 m at 06 local time. |
| Relative_Humidity_2m_09h | float32 | % | Relative humidity at 2 m at 09 local time. |
| Relative_Humidity_2m_12h | float32 | % | Relative humidity at 2 m at 12 local time. |
| Relative_Humidity_2m_15h | float32 | % | Relative humidity at 2 m at 15 local time. |
| Relative_Humidity_2m_18h | float32 | % | Relative humidity at 2 m at 18 local time. |
| Vapour_Pressure_Mean_24h | float32 | hPa | Mean vapour pressure over the local day. |
| Vapour_Pressure_Deficit_at_Maximum_Temperature | float32 | hPa | Vapour pressure deficit at the daily maximum temperature: saturated vapour pressure at the maximum temperature minus the daily mean vapour pressure. |
| Wind_Speed_10m_Mean_24h | float32 | m s-1 | Mean wind speed at 10 m over the local day. |
| Cloud_Cover_Mean_24h | float32 | 1 | Mean total cloud cover over the local day, 0 to 1. |
| Snow_Thickness_Mean_24h | float32 | cm | Mean snow depth over the local day. |
| Snow_Thickness_LWE_Mean_24h | float32 | cm | Mean snow liquid water equivalent over the local day. |
Only in gee
Variables
| Variable | Type | Unit | Description |
|---|---|---|---|
| Temperature_Air_2m_Max_24h | float32 | K | Maximum air temperature at 2 m over the local day. |
| Temperature_Air_2m_Min_24h | float32 | K | Minimum air temperature at 2 m over the local day. |
| Temperature_Air_2m_Mean_24h | float32 | K | Mean air temperature at 2 m over the local day. |
| Temperature_Air_2m_Max_Day_Time | float32 | K | Maximum air temperature at 2 m between 06 and 18 local time. |
| Temperature_Air_2m_Mean_Day_Time | float32 | K | Mean air temperature at 2 m between 06 and 18 local time. |
| Temperature_Air_2m_Min_Night_Time | float32 | K | Minimum air temperature at 2 m between 18 and 06 local time. |
| Temperature_Air_2m_Mean_Night_Time | float32 | K | Mean air temperature at 2 m between 18 and 06 local time. |
| Dew_Point_Temperature_2m_Mean_24h | float32 | K | Mean dew point temperature at 2 m over the local day. |
| Precipitation_Flux | float32 | mm d-1 | Total precipitation over the local day. |
| Precipitation_Rain_Duration_Fraction | float32 | 1 | Fraction of the day's hours with rain. |
| Precipitation_Solid_Duration_Fraction | float32 | 1 | Fraction of the day's hours with solid precipitation (freezing rain, snow, wet snow, rain-snow mix, ice pellets; no hail). |
| Solar_Radiation_Flux | float32 | J m-2 d-1 | Surface downward solar radiation summed over the local day. |
| ReferenceET_PenmanMonteith_FAO56 | float32 | mm d-1 | Penman-Monteith reference evapotranspiration, FAO-56 method, over the local day. |
| Relative_Humidity_2m_06h | float32 | % | Relative humidity at 2 m at 06 local time. |
| Relative_Humidity_2m_15h | float32 | % | Relative humidity at 2 m at 15 local time. |
| Vapour_Pressure_Mean_24h | float32 | hPa | Mean vapour pressure over the local day. |
| Vapour_Pressure_Deficit_at_Maximum_Temperature | float32 | hPa | Vapour pressure deficit at the daily maximum temperature: saturated vapour pressure at the maximum temperature minus the daily mean vapour pressure. |
| Wind_Speed_10m_Mean_24h | float32 | m s-1 | Mean wind speed at 10 m over the local day. |
| Cloud_Cover_Mean_24h | float32 | 1 | Mean total cloud cover over the local day, 0 to 1. |
| Snow_Thickness_Mean_24h | float32 | cm | Mean snow depth over the local day. |
| Snow_Thickness_LWE_Mean_24h | float32 | cm | Mean snow liquid water equivalent over the local day. |
Technical metadata
The full spatial, temporal, and modeling detail behind the summaries elsewhere on this page.
Spatial
- CRS
- EPSG:4326
- Extent (W S E N)
- [-180, -90, 180, 90]
- Coverage
- World
- Grid spacing
- 6 arc-minutes (~11 km at the equator)
Temporal
- Start
- 1979-01-01
- End
- open (present)
- Updates
- Daily
Climate methods
- Downscaling
- Grid- and variable-specific regression from ERA5 interpolated to 0.1°, trained on ECMWF HRES at 0.1°, so values follow the finer topography, land use and land-sea mask. · 0.1 degree
Provenance
Ordered processing steps, from source to publication.
- source
Hourly ERA5 aggregated to local-time days and corrected to a 0.1° grid with regressions trained on ECMWF HRES, by Wageningen Environmental Research for the Copernicus Climate Change Service. Published on the Climate Data Store as NetCDF.
How to cite
Please cite the dataset and any associated peer-reviewed publications.
H. Boogaard, J. Schubert, A. De Wit, J. Lazebnik, R. Hutjes, G. Van der Grijn (2020) Agrometeorological indicators from 1979 to present derived from reanalysis. Version 2.0. Copernicus Climate Change Service (C3S) Climate Data Store (CDS). https://doi.org/10.24381/cds.6c68c9bb. Accessed through the CGIAR Climate Action Data Hub, https://cgiar-climate-data-hub.github.io/catalog/agera5_2.0/.
BibTeX
@misc{agera5_2020,
title = {Agrometeorological indicators from 1979 to present derived from reanalysis},
author = {Boogaard, H. and Schubert, J. and De Wit, A. and Lazebnik, J. and Hutjes, R. and Van der Grijn, G.},
year = {2020},
version = {2.0},
publisher = {Copernicus Climate Change Service (C3S) Climate Data Store (CDS)},
doi = {10.24381/cds.6c68c9bb},
note = {Accessed through the CGIAR Climate Action Data Hub, https://cgiar-climate-data-hub.github.io/catalog/agera5_2.0/}
}Attribution
Reproduce this credit line wherever you reuse the data.
Generated using Copernicus Climate Change Service information [year].
Contacts
Who produced this dataset, and who to reach about it.