Data
Where the numbers come from
Every number in the DFO comes from a file published by an official source, such as the OECD, World Bank, or IMF. The DFO keeps the original values, adds up individual aid records into totals, and gives each country and category one consistent label so that data from different sources can be combined. It checks for new releases daily, and every figure can be traced back to its source file.
How data enters the DFO
Every figure in the DFO starts as data its source publishes. The DFO downloads that data, checks it, prepares it, and loads the result into one knowledge graph. That one graph serves search on /data, DFO Studio, the DFO API, and the DFO MCP server, so the same question returns the same numbers on every interface.
flowchart TD
file["the source's data<br/>as its publisher releases it"]
checks["checks<br/>a failed check stops the release"]
codes["prepared for the graph<br/>codes mapped, records summed, amounts at full value"]
knowledgeGraph["the knowledge graph"]
search["/data search"]
studio["DFO Studio"]
api["the DFO API"]
mcp["the DFO MCP server"]
file --> checks --> codes --> knowledgeGraph
knowledgeGraph --> search
knowledgeGraph --> studio
knowledgeGraph --> api
knowledgeGraph --> mcp
The examples on the rest of this page use the OECD's Creditor Reporting System (CRS), which records each aid activity donors report.
What the DFO changes and preserves
The Transformation Log on each source's page on Sources lists every change the DFO makes to that source, for example the CRS's.
Each pipeline keeps only the rows its source's figures should be built from, leaving out series outside the DFO's scope and rows that would count the same money twice. For the CRS, that means excluding donors' core contributions to multilateral organisations (bi_multi 2).
Each source's codes map to shared concepts, so the same country or purpose has one identifier across sources. In the CRS, purpose 12220 becomes CRSPurposeCode12220, and OECD Development Assistance Committee (DAC) donor code 4 becomes country/FRA. The development finance ontology explains how a source code becomes a graph identifier and where to look up codes.
Some sources, such as the CRS, report individual records, one row per activity with the agency, channel and project behind it. The graph holds one number per series and year, so the DFO sums the records that share every coded column, such as year, donor, recipient and purpose. France's basic health care grants to Togo in a year, in one modality, are one figure in the graph, however many projects France reported. Record-level details, such as the agency, channel and project, stay in the source.
Commitments, gross disbursements and grant equivalents pass through as the CRS reports them. Net disbursements subtract amounts received back from gross disbursements, so a record with a repayment but no disbursement gives a negative figure. Amounts received enter only the net disbursement figure.
The graph stores amounts at their full value, scaling up any source that reports in thousands or millions, so amounts from different sources can be compared directly. The CRS reports in millions, so 1.5 in the CRS file is 1,500,000 in the graph.
Currency and prices stay as the source reports them. For the CRS, that is current US dollars. Any conversion is a separate step the DFO applies only on request, and Methods explains how.
Series from Data Commons' own imports, such as the World Bank's World Development Indicators, don't pass through these steps. Their provenance begins dc/base/, and Methods shows how to read it.
How to check a figure against its source
Start with the source's page on Sources. It states the date the DFO downloaded the release now in the graph, the URL of the source data file, and a link to the publisher's own page for the data.
Take a snapshot link from /data. It records the exact version of the rows behind the figure, so you compare against the release the DFO used.
For a CRS figure:
- Download the CRS file from the source data URL on its page on Sources.
- Drop rows with
bi_multi2. - Keep the rows that match the figure's year, donor, recipient and every CRS code in its StatVar, the kind of number the figure is (see The knowledge graph).
- Sum the column for the figure's measure:
usd_disbursementfor gross disbursements,usd_commitmentfor commitments,usd_grant_equivfor grant equivalents, orusd_disbursementminususd_receivedfor net disbursements. - Multiply by a million.
The result matches the DFO figure within rounding. For other sources, follow the same steps with that source's codes and columns.
How fresh the data is
Each source publishes on its own calendar. Its update cadence can be viewed on the Sources page.
The DFO checks each source regularly for a new release. It reads the publisher's release marker, such as the version on the OECD's CRS bulk file or the release date of the IMF's World Economic Outlook. A changed marker triggers the pipeline to download the data, rerun its checks and models, and rebuild the files the graph loads. A failed check stops the update, so the graph keeps the previous release.
The rebuilt files are then loaded into the graph. A live link reruns the question against the graph, so it shows the new release as soon as the graph holds it. A snapshot link reads the version it recorded, so it retains the numbers it had.
What you can inspect yourself
The ontology is public. Every concept the graph uses, from a purpose code to a type of finance, is an item in the development finance Wikibase. Each item gives the concept's definition, its place in the hierarchy and the source code it represents. The development finance ontology explains how the items are organised.
The packages the pipelines use to fetch sources are open source. The OECD's DAC statistics, including the CRS, come through the ODA reader, and you can run the same bulk_download_crs call yourself. The IMF's World Economic Outlook comes through the IMF reader. DCP tools writes the files the graph loads.
Next
- The knowledge graph follows the 2008 French grant to Togo from its CRS row to a graph observation, column by column.
- Versions and snapshots explains the snapshot link to cite and the ids that reproduce the exact rows in code.