Downloads & API Links

Direct-download files, permanent raw links, and copy-paste code for every major tool.

What is available?

Every dataset is published in both CSV (for spreadsheet tools) and JSON (for code). Files are refreshed automatically by GitHub Actions and served via GitHub Pages. All permanent raw links below are stable and suitable for use in live queries from Excel, Power BI, Tableau, R, Python, SPSS, or Stata — the data refreshes in the background without breaking your link.

Last snapshot: loading…  ·  Generated (UTC): loading…

Datasets

countries_master

248 rows  ·  one row per country/area  ·  CSV ~72 KB  ·  JSON ~298 KB

The authoritative country-level reference table. One row per ISO3 code. Contains:

  • iso3, iso2, m49 — standard country codes
  • Country names in English, Arabic, Chinese, French, Russian, Spanish
  • UN geoscheme: global, region, sub-region, intermediate region codes and names
  • UN special designations: is_ldc, is_lldc, is_sids
  • World Bank: income level, lending type, WB region, capital city, lat/lon
  • World Bank FCS status, FCS category, fiscal year
  • OECD DAC: ODA-eligible flag, WB income hint, reporting year

country_group_membership

4 367 rows  ·  long format  ·  CSV ~240 KB  ·  JSON ~820 KB

Every country–group relationship in long (tidy) format. Ideal for merging into your own analysis. Columns:

  • iso3, iso2, m49 — country identifiers
  • source — e.g. un_m49, world_bank, oecd_dac, world_bank_fcs, un_sdg
  • group_type — e.g. region, income_level, special_group, oda_eligibility
  • group_code — short code for the group
  • group_name — human-readable group name

country_classification_library

4 367 rows  ·  denormalized  ·  CSV ~1.1 MB  ·  JSON ~3.5 MB

A fully denormalized join of countries_master and country_group_membership. Every row is a country–group pair plus all country metadata. Best for ad-hoc queries when you don't want to do your own join. Contains all columns from both parent tables.

aggregates

4 367 rows  ·  long format  ·  CSV ~180 KB

Long-format reference table matching the OSAA / UNCTAD aggregates format. One row per country-group membership. Best for pivot tables, group-level analysis, and matching against other UN reference datasets. Columns:

  • Country or Area — English country name
  • M49 Code — UN numeric code
  • iso2, iso3 — ISO alpha codes
  • country_grouping — group name (e.g. Africa, Low income, Least Developed Countries (LDC))

Tip: In Excel, pivot on country_grouping to count countries per group. In R: dplyr::count(df, country_grouping). In Python: df.groupby("country_grouping").size().

sources & run_manifest

sources: 6 rows  ·  manifest: JSON metadata

Provenance and integrity records for each pipeline run.

  • sources.csv/json — one row per upstream source: organisation, title, URL, access timestamp, license note, notes
  • run_manifest.json — snapshot ID, UTC timestamp, record counts, and SHA-256 checksums for every output file

SDR 2025 extracted artifacts

Derived from SDR2025-data.xlsx (Codebook + SDR2025 Data + Overview)

Machine-readable extracts used by the SDG Analytics Lab.

  • sdr2025_codebook.json — 126 indicator definitions, thresholds, metadata, and source notes
  • sdr2025_overview.json — 208-country SDG index overview with goal dashboard and trend statuses
  • sdr2025_indicator_scores.json — 2025 normalized indicator scores by country (102 indicators)

Permanent raw links (for live queries)

These links always serve the latest committed version. Paste them directly into Excel, Power BI, Tableau, or code — no need to re-download manually.

How to load the data in your tool

Copy-paste snippets for every major tool. Replace the URL with any raw link from the table above.

# Install readr if needed: install.packages("readr")
library(readr)

BASE <- "https://raw.githubusercontent.com/MafiAtUN/country-classification-commons/main/data/latest/"

# Master country table (one row per country/area)
countries <- read_csv(paste0(BASE, "countries_master.csv"))

# Long-format group memberships
memberships <- read_csv(paste0(BASE, "country_group_membership.csv"))

# Full denormalized library (country + group in one table)
library_df <- read_csv(paste0(BASE, "country_classification_library.csv"))

# Example: filter to LDC countries
ldc <- countries[countries$is_ldc == TRUE, ]

# Example: find all World Bank income-level memberships
income_groups <- memberships[memberships$source == "world_bank" &
                              memberships$group_type == "income_level", ]
# pip install pandas requests
import pandas as pd

BASE = "https://raw.githubusercontent.com/MafiAtUN/country-classification-commons/main/data/latest/"

# Master country table
countries = pd.read_csv(BASE + "countries_master.csv")

# Long-format group memberships
memberships = pd.read_csv(BASE + "country_group_membership.csv")

# Full denormalized library
library_df = pd.read_csv(BASE + "country_classification_library.csv")

# Example: LDC countries
ldc = countries[countries["is_ldc"] == True]

# Example: World Bank FCS list
fcs = countries[countries["wb_fcs_status"] == True][["iso3","country_name_en","wb_fcs_category"]]

# Example: merge memberships back to country names
df = memberships.merge(countries[["iso3","country_name_en"]], on="iso3")
--- Excel (Get Data from Web) ---

1. Open Excel → Data tab → Get Data → From Web
2. Paste this URL:
   https://raw.githubusercontent.com/MafiAtUN/country-classification-commons/main/data/latest/countries_master.csv

3. Click OK → in Power Query Editor, select the table and click "Close & Load"

4. To refresh later: Data tab → Refresh All

--- Power Query formula (paste in Advanced Editor) ---
let
    Source = Csv.Document(
        Web.Contents("https://raw.githubusercontent.com/MafiAtUN/country-classification-commons/main/data/latest/countries_master.csv"),
        [Delimiter=",", Encoding=65001, QuoteStyle=QuoteStyle.Csv]
    ),
    PromotedHeaders = Table.PromoteHeaders(Source, [PromoteAllScalars=true])
in
    PromotedHeaders
--- Power BI Desktop ---

1. Home → Get Data → Web
2. Paste URL:
   https://raw.githubusercontent.com/MafiAtUN/country-classification-commons/main/data/latest/countries_master.csv

3. Power Query will detect it as a CSV table automatically.
4. Promote first row as headers if not already done.

--- M formula (Power Query Advanced Editor) ---
let
    Source = Csv.Document(
        Web.Contents(
            "https://raw.githubusercontent.com/MafiAtUN/country-classification-commons/main/data/latest/countries_master.csv"
        ),
        [Delimiter=",", Encoding=65001, QuoteStyle=QuoteStyle.Csv]
    ),
    #"Promoted Headers" = Table.PromoteHeaders(Source, [PromoteAllScalars=true]),
    #"Changed Types"    = Table.TransformColumnTypes(#"Promoted Headers",
        {{"is_ldc","Logical"},{"is_lldc","Logical"},{"is_sids","Logical"},
         {"wb_fcs_status","Logical"},{"oecd_dac_eligible","Logical"}})
in
    #"Changed Types"

-- Tip: load country_group_membership.csv as a second query,
-- then create a relationship on iso3 to build a cross-filter.
--- Tableau Desktop ---

Option A — Web Data Connector (Tableau 2020.4+):
  Connect → Web Data Connector
  Paste: https://raw.githubusercontent.com/MafiAtUN/country-classification-commons/main/data/latest/countries_master.csv

Option B — Text File (download first):
  1. Download countries_master.csv from this page
  2. Connect → Text File → select the downloaded file

Option C — Google Sheets bridge:
  1. In Google Sheets: File → Import → upload the CSV
  2. Publish the sheet (File → Share → Publish to web → CSV)
  3. Connect Tableau to that published CSV URL

-- After connecting, you can JOIN country_group_membership.csv
-- on iso3 to add classification groups to your map/chart.
* SPSS syntax — download the CSV file first, then import.

GET DATA
  /TYPE=TXT
  /FILE='C:\path\to\countries_master.csv'
  /ENCODING='UTF8'
  /DELIMITERS=","
  /QUALIFIER='"'
  /ARRANGEMENT=DELIMITED
  /FIRSTCASE=2
  /VARIABLES=
    iso3 A3
    iso2 A2
    m49 A3
    country_name_en A80
    region_name_en A60
    wb_income_name A40
    is_ldc A5
    is_lldc A5
    is_sids A5
    wb_fcs_status A5
    oecd_dac_eligible A5.
CACHE.
EXECUTE.

* Note: download the latest CSV from the Downloads page
* before running this syntax, or use a macro to fetch via URL.
* Stata 16+ can import directly from a URL

local base "https://raw.githubusercontent.com/MafiAtUN/country-classification-commons/main/data/latest/"

* Master country table
import delimited "`base'countries_master.csv", ///
    varnames(1) encoding("UTF-8") clear

* Group memberships (long format)
import delimited "`base'country_group_membership.csv", ///
    varnames(1) encoding("UTF-8") clear

* Example: keep only LDC countries
keep if is_ldc == "True"

* Example: merge memberships with master on iso3
import delimited "`base'countries_master.csv",        varnames(1) clear
save countries_master.dta, replace

import delimited "`base'country_group_membership.csv", varnames(1) clear
merge m:1 iso3 using countries_master.dta

How to best use this data

Start with countries_master

If you need a single lookup table (e.g. to add income level or region to a dataset you already have), use countries_master.csv. Join on iso3 (preferred) or m49. Every country has a unique iso3.

Use country_group_membership for multi-group analysis

If you want to filter or count countries by group (e.g. "all OECD DAC ODA recipients in Sub-Saharan Africa"), use the long-format country_group_membership.csv. It is already tidy: one group membership per row, easy to GROUP BY or pivot.

One-stop table: use country_classification_library

Need everything in one place without joins? Use country_classification_library.csv. It is the full Cartesian product of countries × groups, with all country metadata repeated per row. Best for ad-hoc queries, pivot tables, and BI tools where joins are inconvenient.

Key columns reference

  • source: un_m49 / world_bank / world_bank_fcs / oecd_dac / un_sdg
  • group_type: region / income_level / lending_type / special_group / fcs_status / oda_eligibility …
  • Boolean columns (is_ldc, wb_fcs_status …) are stored as text True/False in CSV; in JSON they are proper booleans.

Repository download