OECD DAC/CRS + IATI
Transport development finance flows
OECD DAC / CRS & IATI — Transport Development Finance
Repositories: OECD Development Co-operation Directorate (CRS) + IATI (distributed publishers) CRS API: https://sdmx.oecd.org/public/rest/ (agency: OECD.DCD.FSD) IATI Datastore: https://datastore.codeforiati.org/ (no auth) | https://api.iatistandard.org/datastore/ (free API key) License: CRS: CC-BY-4.0 | IATI: Open data (publisher-dependent) Update cadence: CRS: Annual (~18-month lag) | IATI: Continuous (weeks/months)
What These Datasets Are
Two complementary systems that track Official Development Assistance (ODA) and development finance flows for transport infrastructure. Together they answer: "Who is spending how much, where, on what kind of transport?"
- OECD DAC/CRS (Creditor Reporting System) — the authoritative, OECD-vetted annual statistical database of all bilateral and multilateral aid. Think of it as the definitive financial record.
- IATI (International Aid Transparency Initiative) — a self-publishing standard where 1,500+ organisations publish their activities in near real-time. More timely but less curated.
They share the same sector codelist (DAC 5-digit purpose codes), the same finance type codes, and the same flow type codes. They can be joined.
DAC Transport Sector Codes (210xx Series)
These codes are the key filter for isolating transport spending in both systems.
Transport Policy & Admin (21010-series)
| Code | Name | Description |
|---|---|---|
21010 | Transport policy and admin management | Sector policy, planning, programmes; aid to transport ministries; unspecified transport |
21011 | Transport policy, planning and administration | Administration of transport systems |
21012 | Public transport services | Administration of public transport |
21013 | Transport regulation | Supervision, licensing, safety standards, tariffs |
Road Transport (21020-series)
| Code | Name | Description |
|---|---|---|
21020 | Road transport | Road infrastructure, vehicles (general) |
21021 | Feeder road construction | Construction of feeder/rural road systems |
21022 | Feeder road maintenance | Maintenance of feeder/rural road systems |
21023 | National road construction | Construction of national road systems |
21024 | National road maintenance | Maintenance of national road systems |
Other Modes
| Code | Name | Description |
|---|---|---|
21030 | Rail transport | Rail infrastructure, rolling stock, light rail, metro |
21040 | Water transport | Harbours, docks, ships, inland barges |
21050 | Air transport | Airports, guidance systems, aircraft |
21061 | Storage | Warehousing (whether or not transport-related) |
21081 | Education & training in transport | Sector-specific education and training |
Note: Codes 21011-21013 and 21021-21024 were introduced ~2020. Historical data primarily uses the coarser parent codes (21010, 21020). When querying, include BOTH parent and subcodes.
OECD CRS Record Schema
A CRS record (one aid activity) contains:
Identification
| Field | Type | Description |
|---|---|---|
Year | Integer | Reporting year |
DonorCode / DonorName | String | DAC donor country/agency |
AgencyCode / AgencyName | String | Extending agency within donor |
CRSid | String | CRS identification number (unique within donor+year) |
ProjectNumber | String | Donor's own project ID |
ProjectTitle | String | Project title |
ShortDescription / LongDescription | String | Project descriptions |
Classification
| Field | Type | Description |
|---|---|---|
PurposeCode / PurposeName | String | CRS 5-digit sector code (e.g., 21020 = Road transport) |
SectorCode / SectorName | String | DAC 3-digit category (e.g., 210 = Transport & Storage) |
FlowCode / FlowName | String | ODA, OOF, private, etc. |
Bi_Multi | Integer | 1=Bilateral, 3=Multilateral core, 7=Bilateral NGO |
Finance_t | String | Finance type (grant, standard loan, soft loan, equity) |
Aid_t | String | Aid type (project, budget support, technical cooperation) |
ChannelCode / ChannelName | String | Channel of delivery (implementing agency) |
Geography
| Field | Type | Description |
|---|---|---|
RecipientCode / RecipientName | String | Recipient country or region (DAC codes / ISO) |
RegionCode / RegionName | String | Geographic region |
Financial
| Field | Type | Description |
|---|---|---|
Commitment | Double | Face value at agreement date (USD millions) |
Disbursement | Double | Actual amounts transferred (USD millions) |
USD_Commitment / USD_Disbursement | Double | USD equivalents |
AmountUntied / AmountPartiallyTied / AmountTied | Double | Tying status breakdown |
GrantElement | Double | Grant element percentage (for loans) |
Policy Markers
| Field | Values | Description |
|---|---|---|
Gender | 0/1/2 | 0=not targeted, 1=significant, 2=principal |
Environment | 0/1/2 | Environmental sustainability marker |
ClimateAdaptation | 0/1/2 | Rio marker for adaptation |
ClimateMitigation | 0/1/2 | Rio marker for mitigation |
Trade | 0/1/2 | Trade development marker |
IATI Activity Record Schema (v2.03)
An IATI activity contains richer, more granular data. Key elements:
Identification & Description
| Element | Description |
|---|---|
iati-identifier | Globally unique ID: {reporting-org-ref}-{activity-id} |
reporting-org | Publishing organisation (with @ref, @type) |
title | Activity title (multilingual) |
description | Activity description (multiple types: general, objectives, target groups) |
activity-status | 1=Pipeline, 2=Implementation, 3=Finalisation, 4=Closed, 5=Cancelled |
activity-date | Planned/actual start and end dates |
Sector & Geography
| Element | Description |
|---|---|
sector | Sector code — uses DAC 5-digit codes by default (vocabulary 1). @code, @percentage |
recipient-country | ISO 3166-1 alpha-2 country code, with @percentage |
recipient-region | Region code |
location | Sub-national location with lat/lon coordinates |
policy-marker | Gender, environment, climate markers (same as CRS) |
Financial Transactions
| Element | Description |
|---|---|
transaction | Individual financial transaction containing: |
— transaction-type | 1=Incoming Funds, 2=Outgoing Commitment, 3=Disbursement, 4=Expenditure |
— transaction-date | ISO date of transaction |
— value | Amount with @currency and @value-date |
— provider-org / receiver-org | Who gave/received |
— sector | Transaction-level sector (can differ from activity-level) |
— flow-type, finance-type, aid-type, tied-status | Same DAC codelists |
budget | Forward-looking budget periods |
crs-add | Additional CRS fields (loan terms, repayment) |
Joining IATI and CRS
The datasets share sector codes, finance types, flow types, and aid types. The join strategy:
| Concept | CRS Field | IATI Element | Notes |
|---|---|---|---|
| Sector | PurposeCode | sector/@code (vocabulary=1) | Identical codelist |
| Recipient | RecipientCode | recipient-country/@code | Both use ISO 3166-1 |
| Flow type | FlowCode | transaction/flow-type/@code | Same codelist |
| Finance type | Finance_t | transaction/finance-type/@code | Same codelist |
| CRS cross-ref | CRSid | other-identifier[@type="A1"] | Direct activity link |
Composite join key: (year, donor_code, recipient_code, sector_code)
Key differences:
| Aspect | CRS | IATI |
|---|---|---|
| Frequency | Annual | Continuous |
| Quality | OECD-vetted | Self-published |
| Currency | USD millions | Multiple currencies |
| Timeliness | ~18-month lag | Near real-time |
| Geography | Country level only | Sub-national possible |
| Granularity | Aggregate per activity | Individual transactions |
Access Methods
OECD CRS via SDMX API (No Auth)
# List all CRS dataflows
GET https://sdmx.oecd.org/public/rest/dataflow/OECD.DCD.FSD
# Transport ODA, all donors, all recipients, disbursements, CSV
GET https://sdmx.oecd.org/public/rest/data/OECD.DCD.FSD,DSD_CRS@DF_CRS/
.._T.21010+21020+21021+21022+21023+21024+21030+21040+21050+21061+21081
.1140._T._T.D.Q._T..
?startPeriod=2010&endPeriod=2023
&format=csvfilewithlabels
Key dataflows:
DSD_CRS@DF_CRS— Main CRS flows (commitments, disbursements)DSD_DAC2@DF_DAC2A— ODA by sector (aggregated)
Tip: Use the OECD Data Explorer to build queries visually, then click "Developer API" for the URL.
Python: sdmx1, pandasdmx, or oda_reader (ONEcampaign)
IATI Datastore Classic (No Auth)
# All transport activities, streaming JSON
GET https://datastore.codeforiati.org/api/1/access/activity.json?sector=21010|21020|21030|21040|21050|21061|21081&stream=True
# Transport transactions as CSV
GET https://datastore.codeforiati.org/api/1/access/transaction/by_sector.csv?sector=21020
IATI Datastore v3 (Free API Key)
GET https://api.iatistandard.org/datastore/activity/select?
q=sector_code:(21010 OR 21020 OR 21021 OR 21022 OR 21023 OR 21024 OR 21030 OR 21040 OR 21050 OR 21061 OR 21081)
&rows=100&wt=json
Header: Ocp-Apim-Subscription-Key: {key}
Machine-Readable Code Lists
- OECD: https://development-finance-codelists.oecd.org/CodesList.aspx
- IATI: https://iatistandard.org/en/iati-standard/203/codelists/sector/
- DataHub: https://datahub.io/core/dac-and-crs-code-lists
Key Limitations for Automation
- CRS lag — official statistics typically 18 months behind
- IATI quality varies — self-published data, no central QA; some publishers have incomplete sector coding
- Sector allocation — activities spanning multiple sectors use percentage splits; transport share may be partial
- No geospatial — CRS is country-level only; IATI can have coordinates but often doesn't
- Currency complexity — IATI uses original currencies requiring conversion; CRS is pre-converted to USD
- Double-counting risk — activities can appear in both systems; joining requires deduplication
Integration Notes
- Join to World Bank: Country codes (ISO) link ODA spending to infrastructure outcome indicators
- Join to OPSIS: Compare transport ODA (from CRS/IATI) against infrastructure condition and hazard exposure (from OPSIS) — the "cost-per-km of tarred road" use case from CONCEPT.md
- Join to PortWatch: Port investment spending vs. port activity volumes
- Climate markers are directly queryable — filter
ClimateAdaptation=2orClimateMitigation=2to find climate-tagged transport ODA