era5-download
ERA5 Download
Overview
This skill enables downloading ERA5 reanalysis data from the Copernicus Climate Data Store (CDS) using the cdsapi Python package. ERA5 is a global atmospheric reanalysis dataset providing hourly estimates of atmospheric, land, and ocean climate variables from 1940 to present.
Prerequisites
Before downloading ERA5 data, ensure:
- cdsapi is installed: Add via
uv add cdsapiorpip install cdsapi - CDS credentials configured: Either:
- Configuration file
~/.cdsapircwith:url: https://cds.climate.copernicus.eu/api key: <YOUR-PERSONAL-ACCESS-TOKEN> - Or environment variable:
COPERNICUS_API_KEY=<token>
- Configuration file
- License accepted: User must accept dataset Terms of Use at https://cds.climate.copernicus.eu/datasets/reanalysis-era5-single-levels
Quick Start
Simple Download
For straightforward downloads with known variables:
import cdsapi
client = cdsapi.Client()
result = client.retrieve(
"reanalysis-era5-single-levels",
{
"product_type": "reanalysis",
"variable": ["2m_temperature", "total_precipitation"],
"year": "2023",
"month": "01",
"day": ["01", "02"],
"time": ["00:00", "06:00", "12:00", "18:00"],
"area": [46, -123, 44, -121], # [N, W, S, E]
"format": "netcdf",
},
)
result.download("output.nc")
Using the Bundled Script
For more complex downloads or command-line usage, use scripts/download_era5.py:
# Download 2m temperature for January 2023
uv run python scripts/download_era5.py \
-v 2m_temperature \
-s 2023-01-01 -e 2023-01-31 \
-o temperature_jan2023.nc
# Download multiple variables for a specific region
uv run python scripts/download_era5.py \
-v 2m_temperature total_precipitation surface_pressure \
-s 2023-01-01 -e 2023-01-02 \
-a 46 -123 44 -121 \
-o climate_data.nc
# Download 6-hourly data at pressure levels (3D atmosphere)
uv run python scripts/download_era5.py \
-v temperature geopotential \
-s 2023-01-01 -e 2023-01-01 \
--hours 00:00 06:00 12:00 18:00 \
--pressure-levels 1000 850 500 \
-o upper_air.nc
Variable Selection
Finding Variables
When users request specific climate variables:
-
Search the reference: Use grep on
references/era5_variables.md:grep -i "temperature" references/era5_variables.md grep -i "precipitation" references/era5_variables.md grep "soil_moisture" references/era5_variables.md -
Common categories: The reference organizes variables by:
- Atmospheric Variables (temperature, precipitation, wind, pressure, radiation)
- Land Surface Variables (soil temperature/moisture, vegetation, snow, runoff)
- Pressure Level Variables (3D atmospheric data)
-
Ecosystem modeling use case: For typical biogeochemical modeling (like EcoSIM), commonly needed variables are:
2m_temperature- Air temperaturetotal_precipitation- Precipitationsurface_pressure- Atmospheric pressuresurface_solar_radiation_downwards- Solar radiation10m_u_component_of_wind,10m_v_component_of_wind- Wind2m_relative_humidityor2m_dewpoint_temperature- Humidity- Soil layers:
soil_temperature_level_1,volumetric_soil_water_layer_1, etc.
Variable Name Format
ERA5 uses underscored names (e.g., 2m_temperature, not t2m or 2m-temperature).
Spatial and Temporal Subsetting
Geographic Area
Subset downloads to specific regions using bounding box [north, west, south, east] in degrees:
- Script:
--area 46 -123 44 -121 - Direct API:
"area": [46, -123, 44, -121] - Omit for global data
Temporal Selection
Control time range and resolution:
- Date range: Specify start/end dates (YYYY-MM-DD format)
- Hours: Subset to specific times (e.g., 6-hourly:
["00:00", "06:00", "12:00", "18:00"]) - Default: All 24 hours per day
Best Practices
- Start small: Test with 1-2 days before downloading years of data
- Geographic subsetting: Always use
--areawhen possible to reduce download size - Temporal subsetting: Use
--hoursfor sub-daily data if hourly resolution isn't needed - Batch large requests: Break multi-year downloads into yearly or monthly chunks
Datasets
Single-Level (2D) Data
Dataset: reanalysis-era5-single-levels
- Surface and near-surface variables
- Integrated atmospheric columns
- Land surface conditions
- Use when variables don't require pressure levels
Pressure-Level (3D) Data
Dataset: reanalysis-era5-pressure-levels
- Upper air meteorology (temperature, geopotential, winds)
- Requires
pressure_levelparameter (e.g.,[1000, 850, 500]hPa) - Use script flag:
--pressure-levels 1000 850 500
Output Formats
NetCDF (Recommended)
format: "netcdf"or--format netcdf- Easier to work with in Python (xarray, netCDF4)
- Compatible with most modeling frameworks
- Self-describing with metadata
GRIB
format: "grib"or--format grib- Standard meteorological format
- Requires specialized libraries (cfgrib, pygrib)
Workflow Patterns
Pattern 1: Climate Forcing for Models
When users need climate data to drive ecosystem/biogeochemical models:
- Identify experimental site coordinates from metadata
- Determine required variables for model forcing
- Download ERA5 data for site location and time period
- Convert to model-specific NetCDF format if needed
Example:
# For EcoSIM forcing at experimental site
download_era5(
variables=[
"2m_temperature",
"total_precipitation",
"surface_pressure",
"surface_solar_radiation_downwards",
"10m_u_component_of_wind",
"10m_v_component_of_wind",
"2m_dewpoint_temperature",
],
start_date="2012-01-01",
end_date="2022-12-31",
area=[46.5, -122.5, 46.0, -122.0], # Blodget site region
output_file="ecosim_forcing_blodget.nc",
)
Pattern 2: Multi-Site Meta-Analysis
When users have multiple experimental sites requiring climate data:
- Read site metadata (e.g., from TSV/CSV with lat/lon)
- Loop through sites, downloading data for each location
- Use consistent temporal resolution and variables across sites
- Save with systematic naming convention
Pattern 3: Validation Data
When users need ERA5 data for model validation:
- Download ERA5 estimates for validation variables (e.g., evaporation, runoff)
- Match temporal and spatial resolution to model output
- Ensure variables are comparable (same units, definitions)
Troubleshooting
License Not Accepted
Error: 403 Client Error: Forbidden ... required licences not accepted
Solution: Visit dataset page and accept Terms of Use:
- Single-levels: https://cds.climate.copernicus.eu/datasets/reanalysis-era5-single-levels
- Pressure-levels: https://cds.climate.copernicus.eu/datasets/reanalysis-era5-pressure-levels
Authentication Issues
If cdsapi can't authenticate:
- Check
~/.cdsapircexists with correct URL and key - Verify Personal Access Token from CDS profile
- Check environment variable
COPERNICUS_API_KEYif using that method
Large Downloads Timing Out
For multi-year global datasets:
- Break into smaller chunks (monthly/yearly)
- Use geographic subsetting with
--area - Reduce temporal resolution with
--hours - Consider using ERA5-Land for land-only variables (higher resolution, smaller files)
Wrong Variable Names
If variables aren't found:
- Check spelling and underscores (e.g.,
2m_temperaturenot2m-temperature) - Verify variable exists in the chosen dataset (single-levels vs pressure-levels)
- Consult
references/era5_variables.mdfor correct names
Resources
scripts/download_era5.py
Flexible command-line tool for downloading ERA5 data with configurable parameters. Can be:
- Executed directly via command line
- Imported and used programmatically in Python
- Modified for project-specific needs
references/era5_variables.md
Comprehensive reference of common ERA5 variables organized by category:
- Atmospheric variables (temperature, precipitation, wind, radiation)
- Land surface variables (soil, vegetation, snow, runoff)
- Pressure level variables (3D atmosphere)
- Common use cases for ecosystem modeling
- Variable naming conventions and tips
Load this reference when users need help identifying which ERA5 variables to download for their specific application.