TDX/AI
← All datasetsDataset Profile

OECD DAC/CRS + IATI

Transport development finance flows

SDMX + RESTAuth: None / Free key

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)

CodeNameDescription
21010Transport policy and admin managementSector policy, planning, programmes; aid to transport ministries; unspecified transport
21011Transport policy, planning and administrationAdministration of transport systems
21012Public transport servicesAdministration of public transport
21013Transport regulationSupervision, licensing, safety standards, tariffs

Road Transport (21020-series)

CodeNameDescription
21020Road transportRoad infrastructure, vehicles (general)
21021Feeder road constructionConstruction of feeder/rural road systems
21022Feeder road maintenanceMaintenance of feeder/rural road systems
21023National road constructionConstruction of national road systems
21024National road maintenanceMaintenance of national road systems

Other Modes

CodeNameDescription
21030Rail transportRail infrastructure, rolling stock, light rail, metro
21040Water transportHarbours, docks, ships, inland barges
21050Air transportAirports, guidance systems, aircraft
21061StorageWarehousing (whether or not transport-related)
21081Education & training in transportSector-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

FieldTypeDescription
YearIntegerReporting year
DonorCode / DonorNameStringDAC donor country/agency
AgencyCode / AgencyNameStringExtending agency within donor
CRSidStringCRS identification number (unique within donor+year)
ProjectNumberStringDonor's own project ID
ProjectTitleStringProject title
ShortDescription / LongDescriptionStringProject descriptions

Classification

FieldTypeDescription
PurposeCode / PurposeNameStringCRS 5-digit sector code (e.g., 21020 = Road transport)
SectorCode / SectorNameStringDAC 3-digit category (e.g., 210 = Transport & Storage)
FlowCode / FlowNameStringODA, OOF, private, etc.
Bi_MultiInteger1=Bilateral, 3=Multilateral core, 7=Bilateral NGO
Finance_tStringFinance type (grant, standard loan, soft loan, equity)
Aid_tStringAid type (project, budget support, technical cooperation)
ChannelCode / ChannelNameStringChannel of delivery (implementing agency)

Geography

FieldTypeDescription
RecipientCode / RecipientNameStringRecipient country or region (DAC codes / ISO)
RegionCode / RegionNameStringGeographic region

Financial

FieldTypeDescription
CommitmentDoubleFace value at agreement date (USD millions)
DisbursementDoubleActual amounts transferred (USD millions)
USD_Commitment / USD_DisbursementDoubleUSD equivalents
AmountUntied / AmountPartiallyTied / AmountTiedDoubleTying status breakdown
GrantElementDoubleGrant element percentage (for loans)

Policy Markers

FieldValuesDescription
Gender0/1/20=not targeted, 1=significant, 2=principal
Environment0/1/2Environmental sustainability marker
ClimateAdaptation0/1/2Rio marker for adaptation
ClimateMitigation0/1/2Rio marker for mitigation
Trade0/1/2Trade development marker

IATI Activity Record Schema (v2.03)

An IATI activity contains richer, more granular data. Key elements:

Identification & Description

ElementDescription
iati-identifierGlobally unique ID: {reporting-org-ref}-{activity-id}
reporting-orgPublishing organisation (with @ref, @type)
titleActivity title (multilingual)
descriptionActivity description (multiple types: general, objectives, target groups)
activity-status1=Pipeline, 2=Implementation, 3=Finalisation, 4=Closed, 5=Cancelled
activity-datePlanned/actual start and end dates

Sector & Geography

ElementDescription
sectorSector code — uses DAC 5-digit codes by default (vocabulary 1). @code, @percentage
recipient-countryISO 3166-1 alpha-2 country code, with @percentage
recipient-regionRegion code
locationSub-national location with lat/lon coordinates
policy-markerGender, environment, climate markers (same as CRS)

Financial Transactions

ElementDescription
transactionIndividual financial transaction containing:
transaction-type1=Incoming Funds, 2=Outgoing Commitment, 3=Disbursement, 4=Expenditure
transaction-dateISO date of transaction
valueAmount with @currency and @value-date
provider-org / receiver-orgWho gave/received
sectorTransaction-level sector (can differ from activity-level)
flow-type, finance-type, aid-type, tied-statusSame DAC codelists
budgetForward-looking budget periods
crs-addAdditional CRS fields (loan terms, repayment)

Joining IATI and CRS

The datasets share sector codes, finance types, flow types, and aid types. The join strategy:

ConceptCRS FieldIATI ElementNotes
SectorPurposeCodesector/@code (vocabulary=1)Identical codelist
RecipientRecipientCoderecipient-country/@codeBoth use ISO 3166-1
Flow typeFlowCodetransaction/flow-type/@codeSame codelist
Finance typeFinance_ttransaction/finance-type/@codeSame codelist
CRS cross-refCRSidother-identifier[@type="A1"]Direct activity link

Composite join key: (year, donor_code, recipient_code, sector_code)

Key differences:

AspectCRSIATI
FrequencyAnnualContinuous
QualityOECD-vettedSelf-published
CurrencyUSD millionsMultiple currencies
Timeliness~18-month lagNear real-time
GeographyCountry level onlySub-national possible
GranularityAggregate per activityIndividual 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


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=2 or ClimateMitigation=2 to find climate-tagged transport ODA