Documentation

Python packages / ODA / ODA reader

Climate Finance (CRDF)

The OECD publishes the Climate-Related Development Finance (CRDF) dataset as Excel workbooks at webfs.oecd.org/climate, one folder per perspective. ODA Reader reads them over plain HTTP, finds file names in the live folder listing, and maps every known header layout to one set of column names.

Read a range of years

from oda_reader import download_crdf

provider = download_crdf("provider", start_year=2015, end_year=2024)
recipient = download_crdf("recipient", start_year=2021)

The perspective is "provider" or "recipient". Without start_year or end_year the reader returns every year the folder holds: 2013 to 2024 for providers and 2000 to 2024 for recipients in the October 2026 listing.

For each year the reader picks the narrowest workbook that holds it. The 2015 recipient year comes from CRDF-RP_2014-2015.xlsx, and the all-years workbooks are read only when no narrower file holds a year.

Columns

Amounts are commitments in USD thousand, as published. Each amount comes in current prices (*_current_kusd) and constant prices (*_constant_kusd). Since the June 2026 republication every workbook uses 2024 prices.

Five columns describe where each row came from:

ColumnMeaning
price_yearThe price year of the *_constant_kusd columns, read from the headers
vintageThe workbook's last-modified date, which matches the folder's Last-Modified header
source_fileThe file name, for example CRDF-PP_2024.xlsx
file_versionThe file host's validator recorded when the cached copy was downloaded, or missing for a local file or no validator
file_version_kindetag or last_modified, naming the header file_version came from

The current recipient workbooks carry climate_share_pct, the climate share of the underlying commitment from 0 to 100. Archived recipient workbooks carry underlying_commitment_share instead, which runs from 0 to 1. Archived workbooks also carry provider_short_name, concessionality, financial_instrument and coal_related_financing, and lack the flow type and the environment, biodiversity and desertification markers.

Pass pre_process=False to keep the published headers and the types Excel gives. The five provenance columns are added either way.

Read an archived copy

Older releases differ in layout. Read a copy you hold with file=:

df = download_crdf("provider", file="archive/DP_2022.xlsx")

The file must use a known layout and the perspective you name.

Unknown layouts

The OECD maintains the folder by hand and has renamed files and columns before. The header row of every data sheet must match one of the layouts in oda_reader/schemas/mappings/crdf_schema.json, after the price year is abstracted. Anything else raises CRDFSchemaError, which names the closest known layout and lists the headers it does not map (unmapped) and those it lacks (missing):

from oda_reader import CRDFSchemaError, download_crdf

try:
    df = download_crdf("recipient")
except CRDFSchemaError as error:
    print(error.layout, error.unmapped, error.missing)

The error is also raised when a sheet carries two price years, when a workbook belongs to the other perspective, or when a column holds values that do not fit its type.

LayoutFiles
provider_2026Provider workbooks republished from June 2026, 40 columns
recipient_2026Recipient workbooks republished from June 2026, 40 columns
provider_2021Archived DonorPerspective workbooks published 2021 to 2024, 38 columns
recipient_2023Archived recipient workbooks published 2023 and 2024, 38 columns
recipient_2025The archived recipient workbook published in 2025, 38 columns

List and download files

list_crdf_files() returns the folder listing, one row per workbook, with its perspective, the years in its name, its size and URL:

from oda_reader import download_crdf_file, list_crdf_files

files = list_crdf_files()
download_crdf_file("Imputed_multilateral_shares.xlsx", "./data/")

download_crdf_file saves a workbook into a directory, or to a full path, and returns where it went. It reads top-level files such as the imputed multilateral shares too.

Caching

Workbooks are cached in the bulk file cache beside the other bulk files. Each call asks the host for the file's ETag, or its Last-Modified date when it sends no ETag, with a one-byte request, and downloads the file again only when that value has changed or the copy is older than 90 days. When the request fails, the cached copy is read and keeps the file_version recorded with it. The folder listing is fetched fresh on every call.

View as markdown