Datasets Overview
ODA Reader provides access to six datasets covering official development assistance (ODA), other official flows (OOF), and development finance. Each dataset serves different analytical needs.
Quick Reference
| Dataset | What It Contains | Use When |
|---|---|---|
| DAC1 | Aggregate flows by donor | Analyzing overall ODA trends, donor performance |
| DAC2a | Bilateral flows by donor-recipient | Recipient-level analysis |
| CRS | Project-level microdata | Sector analysis, project details, activity-level data |
| CPA | Country Programmable Aid | The share of aid donors programme at country level |
| Multisystem | Multilateral system usage | Analyzing multilateral channels and contributions |
| AidData | Chinese development finance | Chinese aid flows |
DAC1: Aggregate Flows
What it contains: Total ODA and OOF by donor, aggregated across all recipients and sectors. This is the highest-level view of development assistance.
Key dimensions:
- Donor (bilateral donors and multilateral organizations)
- Measure type (ODA, OOF, grants, loans, etc.)
- Flow type (commitments, disbursements, grant equivalents)
- Price base (current or constant prices)
- Unit measure (USD millions, national currency, etc.)
Use when:
- You need donor-level totals
- Analyzing overall ODA trends over time
- Comparing donor performance
- Working with high-level aggregates
Example:
from oda_reader import download_dac1
# Get all DAC1 data for 2020-2022
data = download_dac1(start_year=2020, end_year=2022)
# Filter for ODA disbursements in constant prices
oda_constant = download_dac1(
start_year=2020,
end_year=2022,
filters={
"measure": "1010", # Net ODA
"flow_type": "1140", # Disbursements
"price_base": "Q" # Constant prices
}
)
Bulk download: The full dataset is available as a single file via bulk_download_dac1(). See Bulk Downloads for details.
DAC2a: Bilateral Flows by Recipient
What it contains: Bilateral ODA and OOF flows broken down by both donor and recipient country. Shows who gives to whom.
Key dimensions:
- Donor (bilateral donors)
- Recipient (receiving countries and regions)
- Measure type (bilateral ODA, imputed multilateral, etc.)
- Price base (current or constant)
Use when:
- Analyzing flows to specific recipient countries
- Understanding bilateral relationships
- Studying geographic distribution of aid
- Comparing different donors to the same recipient
Example:
from oda_reader import download_dac2a
# Get flows to Sub-Saharan Africa from all donors
africa_flows = download_dac2a(
start_year=2020,
end_year=2022,
filters={"recipient": "289"} # Sub-Saharan Africa (regional code)
)
# Get flows from Germany to East African countries
germany_eastafrica = download_dac2a(
start_year=2022,
end_year=2022,
filters={
"donor": "DEU",
"recipient": ["KEN", "TZA", "UGA", "RWA"]
}
)
CRS: Creditor Reporting System (Project-Level Microdata)
What it contains: Individual project and activity-level data with detailed information about each development assistance activity. This is the most granular dataset.
Key dimensions:
- Donor
- Recipient
- Sector (purpose codes at various levels of detail)
- Channel (implementing organization type)
- Modality (grant, loan, equity, etc.)
- Flow type
- Microdata flag (True for project-level, False for semi-aggregates)
Use when:
- You need project-level details (descriptions, amounts, sectors)
- Analyzing sector-specific flows
- Understanding implementation channels
- Detailed activity-level analysis
Important: CRS defaults to microdata (project-level). For semi-aggregates matching the online Data Explorer view, set microdata: False in filters.
Example (microdata):
from oda_reader import download_crs
# Get all health sector projects from Canada
health_projects = download_crs(
start_year=2022,
end_year=2022,
filters={
"donor": "CAN",
"sector": "120" # Health sector (3-digit code)
}
)
# Each row is a project with description, amount, dates, etc.
Example (semi-aggregates):
# Get semi-aggregated CRS data (matches online Data Explorer)
semi_agg = download_crs(
start_year=2022,
end_year=2022,
filters={
"donor": "USA",
"recipient": "NGA",
"microdata": False,
"channel": "_T", # Total across all channels
"modality": "_T" # Total across all modalities
}
)
Performance note: The CRS API is slow for large queries. Consider using bulk downloads for full dataset access.
CPA: Country Programmable Aid
What it contains: The share of bilateral ODA that donors programme for individual partner countries. CPA strips out flows a partner country has no say over — debt relief, humanitarian aid, in-donor refugee and student costs, administrative costs, and other non-programmable items. The OECD publishes it as a separate dataflow (DSD_CPA@DF_CRS_CPA) derived from the CRS, so it shares the CRS schema, dimensions, and filter set.
Key dimensions: Same as the CRS — donor, recipient, sector, channel, modality, flow type, and the microdata flag.
Use when:
- You want the country-programmable slice of aid rather than total bilateral ODA
- Comparing how much of each donor's aid is programmable at country level
- Tracking programmable aid to specific recipients or sectors over time
Important: Like the CRS, download_cpa defaults to microdata (microdata=True, i.e. MD_DIM=DD), returning project-level records. There is no grant-equivalent dataflow for CPA, so as_grant_equivalent is not available.
Example:
from oda_reader import download_cpa
# Get all CPA records for 2022
cpa = download_cpa(start_year=2022, end_year=2022)
# Country-programmable aid from the United States to Nigeria
us_nga = download_cpa(
start_year=2022,
end_year=2022,
filters={"donor": "USA", "recipient": "NGA"}
)
The available filters match the CRS and can be listed with get_available_filters("cpa").
Multisystem: Members' Use of the Multilateral System
What it contains: Data on how DAC members use the multilateral aid system, including core contributions to multilateral organizations and earmarked funding.
Key dimensions:
- Donor
- Recipient (multilateral organizations)
- Channel (specific multilateral organizations)
- Flow type (commitments, disbursements)
- Measure type
Use when:
- Analyzing multilateral contributions
- Understanding core vs. earmarked funding
- Studying specific multilateral channels (World Bank, UN agencies, etc.)
Example:
from oda_reader import download_multisystem
# Get all multilateral contributions from France
france_multilateral = download_multisystem(
start_year=2020,
end_year=2022,
filters={"donor": "FRA"}
)
# Get contributions to World Bank IDA
ida_contributions = download_multisystem(
start_year=2020,
end_year=2022,
filters={"channel": "44002"} # IDA
)
Performance note: Like CRS, Multisystem API can be slow. Bulk download is available for the full dataset.
AidData: Chinese Development Finance
What it contains: Project-level data on Chinese development finance activities, compiled by AidData. Covers official finance from China that may not be reported to the OECD.
Key dimensions:
- Commitment year
- Recipient country
- Sector
- Project descriptions
- Flow amounts and types
Use when:
- Analyzing Chinese development finance
- Comparing DAC donors with China
Example:
from oda_reader import download_aiddata
# Get all AidData records for 2015-2020
chinese_aid = download_aiddata(start_year=2015, end_year=2020)
# AidData is downloaded as bulk file, filtered by year after download
Note: AidData comes from Excel files from the Aid Data website, not the OECD API. It uses a different schema than DAC datasets.
Discovering Available Filters
Each dataset has different dimensions you can filter by. Use get_available_filters() to see what's available:
from oda_reader import get_available_filters
# See available filters for each dataset
dac1_filters = get_available_filters("dac1")
dac2a_filters = get_available_filters("dac2a")
crs_filters = get_available_filters("crs")
cpa_filters = get_available_filters("cpa")
multisystem_filters = get_available_filters("multisystem")
Next Steps
- Filtering Data - Build complex queries with multiple dimensions
- Bulk Downloads - Download full CRS, Multisystem, or AidData efficiently
- Schema Translation - Understand API vs. .Stat schema codes