CoolFace
Datasetpublic

FrenchCastle/isora-tax-administration

ISORA — International Survey on Revenue Administration, FY2014–FY2024 Every published answer of every ISORA survey round, in one clean long-format panel, with the metadata you need to use it responsibly: what each question means in each questionnaire generation, which questions changed wording (or meaning) between rounds, which jurisdictions answered which question in which year, and how published values were revised between releases. ISORA is the joint survey of national tax… See the full description on the dataset page: https://huggingface.co/datasets/FrenchCastle/isora-tax-administration.

sourceHugging Faceotherupdated 1d agoView on Hugging Face
0likes110downloads
Dataset Card

ISORA — International Survey on Revenue Administration, FY2014–FY2024

Every published answer of every ISORA survey round, in one clean long-format panel, with the metadata you need to use it responsibly: what each question means in each questionnaire generation, which questions changed wording (or meaning) between rounds, which jurisdictions answered which question in which year, and how published values were revised between releases.

ISORA is the joint survey of national tax administrations run by the Asian Development Bank (ADB), the Inter-American Center of Tax Administrations (CIAT), the International Monetary Fund (IMF), the Intra-European Organisation of Tax Administrations (IOTA) and the OECD. It covers revenue collections, budgets and staffing, registration, filing and payment, arrears, audit and compliance risk management, dispute resolution, taxpayer services, digitalisation, governance and institutional arrangements. The IMF publishes the data through the ISORA Data Portal (isoradata.org), and this dataset is built from the IMF SDMX API that sits behind that portal.

Unofficial redistribution. This dataset is not produced or endorsed by the IMF, ADB, CIAT, IOTA, the OECD or any tax administration. The data remain subject to the ISORA Data Portal Terms and Conditions and the IMF Copyright and Usage policy — read the `LICENSE` file. You may publish ISORA data provided the source is acknowledged; see Citation.
Observations796,601 (observations table)
Jurisdictions182 tax administrations (alpha-3 codes, IMF practice)
Indicator codes1,868 distinct question/answer codes with data
Fiscal yearsFY2014 – FY2024 (eight survey rounds: ISORA 2016 → ISORA 2025)
Tablespanel (consolidated, start here) · observations · indicators · indicator_history · jurisdictions · coverage · revisions · panel_dictionary
FormatsParquet (data/), gzip CSV copies (csv/), build metadata (metadata/), one-file loader `isora.py`
Source snapshotIMF SDMX API, retrieved 2026-09-20T04:42:35Z
KeywordsISORA, RA-FIT, tax administration, revenue administration, tax authority, tax agency, IMF Fiscal Affairs Department, OECD Tax Administration Series, CIAT, IOTA, ADB, tax compliance, tax collection, VAT, CIT, PIT, PAYE, tax arrears, tax audit, taxpayer registration, e-filing, e-payment, tax administration staffing, tax administration budget, TADAT, public finance, government revenue, panel data, cross-country comparison

Quick start

Easiest: the consolidated panel. One row per jurisdiction and fiscal year, 76 headline indicators with short names, plus region and World Bank income group. Values are only taken from questionnaire generations where the question is the same (see `panel_dictionary`).

python
import pandas as pd

panel = pd.read_parquet("hf://datasets/FrenchCastle/isora-tax-administration/data/panel.parquet")
panel[panel.fiscal_year == 2023].groupby("income_group_wb")["cost_of_collection_pct"].median()

Loader script. `isora.py` is a single file (pandas + huggingface_hub) with helpers for the common tasks; download it or copy it into your project:

python
import isora                                     # python isora.py --help for the CLI

panel = isora.panel()                            # consolidated panel
obs = isora.load("observations")                 # every published answer, long format
isora.search("arrears")                          # find codes by keyword
isora.describe("337_092")                        # definition + history of one code
wide = isora.wide(["337_001", "337_012"])        # jurisdiction x year table of chosen codes
fra = isora.series("80040_3", ["FRA"])           # tidy time series, money in base LCU

`datasets` library.

python
from datasets import load_dataset

panel = load_dataset("FrenchCastle/isora-tax-administration", "panel", split="train").to_pandas()
obs = load_dataset("FrenchCastle/isora-tax-administration", "observations", split="train").to_pandas()
ind = load_dataset("FrenchCastle/isora-tax-administration", "indicators", split="train").to_pandas()
hist = load_dataset("FrenchCastle/isora-tax-administration", "indicator_history", split="train").to_pandas()
python
# 1. Pick a question and look at its history across questionnaire generations first.
hist.set_index("indicator_code").loc["80040_3", ["label_2016", "label_2018", "label_2020plus", "comparability_flag"]]

# 2. Build a country × year table of one indicator (money already in base local-currency units).
net_revenue = (
    obs[obs.indicator_code == "80040_3"]
    .pivot(index="jurisdiction_code", columns="fiscal_year", values="value_local_currency_units")
)

# 3. Categorical answers: the closed list of options is in indicators.answer_categories.
ind.loc[ind.indicator_code == "80700", ["questionnaire_generation", "label", "answer_categories"]]

DuckDB works directly on the Parquet files:

sql
SELECT jurisdiction_name, fiscal_year, value_numeric
FROM 'data/observations/*.parquet'
WHERE indicator_code = '337_001'      -- net revenue collected as % of GDP (derived by ISORA)
ORDER BY 1, 2;

About ISORA

ISORA collects tax administration data from national or federal tax administrations through an online platform administered by the IMF, using common questions and definitions agreed by the five partner organisations. Participation is voluntary; after collection the partners review the data for accuracy, completeness and consistency, then publish the finalised round. Participants in ISORA 2020 and later rounds agree in advance that all data they provide can be placed in the public domain; every row in this dataset carries the source flag PUBLIC_DATA = true.

Survey roundCollected inFiscal years coveredParticipating administrations (as published)
ISORA 201620162014, 2015135
ISORA 201820182016, 2017159
ISORA 202020202018, 2019156
ISORA 202120212020156
ISORA 202220222021165
ISORA 202320232022166
ISORA 202420242023164
ISORA 202520252024166

Until 2021 the survey ran every two years and collected two fiscal years at a time. After ISORA 2018 the questionnaire was redesigned: a smaller annual core is asked every year and a larger periodic module (governance, human resources, compliance risk management, taxpayer services, tax operations) is asked every four years — it was included in ISORA 2023 (FY2022), which is why that year has roughly twice as many indicators as its neighbours.

The IMF exposes the published data as three SDMX dataflows, one per questionnaire generation. This dataset keeps that distinction because the question codes and wording differ between them:

Questionnaire generationSource dataflowFiscal yearsRowsJurisdictionsIndicator codes
ISORA 2016ISORA_2016_DATA_PUB v2.0.0FY2014–FY2015185,3601311,000
ISORA 2018ISORA_2018_DATA_PUB v2.0.0FY2016–FY2017254,9421551,072
ISORA 2020+ISORA_LATEST_DATA_PUB v5.0.0FY2018–FY2024356,299182701

Coverage by fiscal year:

Fiscal yearCollected inJurisdictionsIndicator codesRows
2014ISORA 2016131100092,679
2015ISORA 201613199992,681
2016ISORA 20181551072127,395
2017ISORA 20181551072127,547
2018ISORA 202015730240,898
2019ISORA 202015730441,306
2020ISORA 202116531241,571
2021ISORA 202217431443,580
2022ISORA 202317467592,313
2023ISORA 202416435348,181
2024ISORA 202516734948,450

The tables

panel and panel_dictionary

panel is the consolidated, analysis-ready view: one row per jurisdiction × fiscal year (1,730 rows) with 76 headline indicators as columns. Each column is fed by one source code per questionnaire generation, chosen so that the question is the same in every generation it draws from; where a code changed meaning between generations (for instance 337_015, a staffing share in 2018 and a capital-expenditure ratio in 2020+) only the matching generation is used. Money columns end in _lcu and are in base units of local currency (harmonised across rounds). Attribute columns: jurisdiction_code, jurisdiction_name, fiscal_year, survey_round, questionnaire_generation, imf_region, world_bank_region, income_group_wb (World Bank income group in force for that fiscal year, see Enrichment), income_group_wb_classification_fy, income_group_wb_current, member_oecd, member_eu, member_iota, member_ciat, member_adb.

panel_dictionary documents every column: unit, description, and for each generation the source indicator_code and its original label. Keep it next to any analysis — the questionnaire_generation column in panel tells you where a series crosses a questionnaire redesign, and level shifts at those points (for example France's revenue_to_gdp_pct moving from 17.5 in FY2017 to 25.7 in FY2018 as the definition of revenue reported changed) are real features of the source, not of this dataset.

ColumnUnitDescriptionSource code by generation (2016 / 2018 / 2020+)Non-null rows
net_revenue_lculocal currency unitsTotal net revenue collected by the tax administration (incl. SSC and non-tax revenue where collected)80040_3 / 80040_3 / 80040_31,559
gdp_lculocal currency unitsGross domestic product (as reported to ISORA)— / — / 398_0011,130
government_revenue_lculocal currency unitsTotal government revenue (as reported to ISORA)— / — / 398_0051,130
populationpersonsTotal population (as reported to ISORA)— / — / 398_0031,130
labor_forcepersonsLabor force (as reported to ISORA)— / — / 398_0041,130
revenue_to_gdp_pctpercentNet revenue collected by the tax administration as % of GDP10790 / 337_001 / 337_0011,352
tax_incl_ssc_to_gdp_pctpercentTax collected including social security contributions as % of GDP— / 337_002 / 337_0021,352
tax_excl_ssc_to_gdp_pctpercentTax collected excluding social security contributions as % of GDP— / 337_003 / 337_0031,352
revenue_to_government_revenue_pctpercentNet revenue collected as % of total government revenue— / — / 337_1681,055
pit_share_of_revenue_pctpercentPersonal income tax as % of total revenue collected80080_4 / 337_005 / 337_0051,500
cit_share_of_revenue_pctpercentCorporate income tax as % of total revenue collected80090_4 / 337_006 / 337_0061,521
vat_share_of_revenue_pctpercentVAT as % of total revenue collected80130_4 / 337_007 / 337_0071,384
ssc_share_of_revenue_pctpercentSocial security contributions as % of total revenue collected80240_4 / 337_008 / 337_008477
other_taxes_share_of_revenue_pctpercentOther taxes as % of total revenue collected— / 337_009 / 337_0091,278
nontax_share_of_revenue_pctpercentNon-tax revenue as % of total revenue collected80250_4 / 337_004 / 337_004893
cost_of_collection_pctpercentRecurrent (operating) cost of collection: operating expenditure as % of net revenue collected— / 337_012 / 337_0121,241
operating_expenditure_lculocal currency unitsOperating (recurrent) expenditure of the tax administration89410 / 91710_543 / 337_1761,305
salary_expenditure_lculocal currency unitsSalary expenditure of the tax administration89440 / 91730_543 / 337_1771,286
ict_expenditure_lculocal currency unitsICT operating expenditure of the tax administration83280_204 / 91740_543 / 337_1781,302
capital_expenditure_lculocal currency unitsCapital expenditure of the tax administration— / 91710_544 / 337_1791,044
salary_share_of_opex_pctpercentSalary cost as % of operating (recurrent) expenditure10700 / 337_013 / 337_0131,425
ict_share_of_opex_pctpercentICT operating cost as % of operating expenditure10710 / 337_014 / 337_0141,260
capex_to_opex_pctpercentCapital expenditure as % of operating expenditure— / — / 337_015791
total_ftecountTotal full-time equivalent staff of the tax administration83430_206 / 83430_206 / 337_1801,479
population_per_fteratioPopulation per FTE10740 / 337_010 / 337_0101,548
labor_force_per_fteratioLabor force per FTE10750 / 337_011 / 337_0111,507
staff_audit_share_pctpercent% of staff in audit, investigation and other verification83460_207 / 94020_207 / 337_0171,386
staff_debt_collection_share_pctpercent% of staff in enforced debt collection and related functions83470_207 / 94030_207 / 337_0181,380
staff_hq_share_pctpercent% of staff in headquarters— / 337_022 / 337_0221,246
hiring_rate_pctpercentRecruitments in FY as % of staff10020 / 337_028 / 337_0281,554
attrition_rate_pctpercentDepartures in FY as % of staff10010 / 337_029 / 337_0291,560
staff_female_pctpercent% of staff who are female10200 / 337_041 / 337_0411,608
executives_female_pctpercent% of executives who are female10220 / 337_042 / 337_0421,472
staff_bachelor_pctpercent% of staff with a bachelor's degree (or equivalent)10080 / 337_043 / 337_0431,430
staff_master_or_higher_pctpercent% of staff with a master's degree or higher (or equivalent)10070 / 337_044 / 337_0441,395
staff_under_35_pctpercent% of staff younger than 35 (sum of <25 and 25-34 bands)10090 + 10100 / 337_031 + 337_032 / 337_031 + 337_0321,510
staff_55_or_older_pctpercent% of staff aged 55 or older (sum of 55-64 and >64 bands)10130 + 10140 / 337_035 + 337_036 / 337_035 + 337_0361,495
lto_fte_share_pctpercentFTEs in the large taxpayer office/program as % of total FTEs10760 / 337_045 / 337_0451,209
lto_revenue_share_pctpercentNet revenue administered by the large taxpayer office/program as % of total net revenue10550 / — / 92280_28_11,009
lto_corporate_taxpayers_share_pctpercentCorporate taxpayers managed by the LTO/program as % of active corporate taxpayers10240 / 337_046 / 337_0461,183
active_pit_taxpayers_pct_labor_forcepercentActive PIT taxpayers as % of labor force10770 / 337_059 / 337_0591,327
active_pit_taxpayers_pct_populationpercentActive PIT taxpayers as % of population10780 / 337_058 / 337_0581,350
inactive_pit_register_pctpercentInactive taxpayers as % of PIT register— / 337_053 / 337_0531,053
inactive_cit_register_pctpercentInactive taxpayers as % of CIT register— / 337_054 / 337_0541,160
inactive_vat_register_pctpercentInactive taxpayers as % of VAT register— / 337_055 / 337_0551,079
active_taxpayers_citcountNumber of active CIT taxpayers— / — / 95860_37996
active_taxpayers_pitcountNumber of active PIT taxpayers— / — / 95860_38932
active_taxpayers_vatcountNumber of active VAT taxpayers— / — / 95860_39911
active_taxpayers_payecountNumber of active PAYE (employer withholding) taxpayers— / — / 95860_40856
on_time_filing_cit_pctpercentCIT returns filed on time as % of returns expected88140_37 / 88140_37 / 88140_371,285
on_time_filing_pit_pctpercentPIT returns filed on time as % of returns expected88140_38 / 88140_38 / 88140_381,187
on_time_filing_vat_pctpercentVAT returns filed on time as % of returns expected— / 88140_39 / 88140_391,062
on_time_filing_paye_pctpercentPAYE returns filed on time as % of returns expected88140_40 / 88140_40 / 88140_401,012
efiling_cit_pctpercentCIT returns filed electronically as % of returns received— / — / 111_200803
efiling_pit_pctpercentPIT returns filed electronically as % of returns received— / — / 111_201763
efiling_vat_pctpercentVAT returns filed electronically as % of returns received— / — / 111_202727
on_time_payment_cit_pctpercentCIT payments received on time as % of payments due10430 / 337_085 / 337_085875
on_time_payment_pit_pctpercentPIT payments received on time as % of payments due10440 / 337_084 / 337_084809
on_time_payment_vat_pctpercentVAT payments received on time as % of payments due10460 / 337_087 / 337_087853
on_time_payment_paye_pctpercentPAYE payments received on time as % of payments due10450 / 337_086 / 337_086741
epayment_by_number_pctpercentElectronic payments as % of payments (by number)— / 337_090 / 337_0901,034
epayment_by_value_pctpercentElectronic payments as % of payments (by value)— / 337_091 / 337_0911,042
arrears_to_revenue_pctpercentClosing stock of arrears at year end as % of total revenue collected10560 / 337_092 / 337_0921,313
collectable_arrears_share_pctpercentCollectable arrears as % of closing stock of arrears— / 337_093 / 337_093935
cit_arrears_pct_of_cit_collectedpercentCIT arrears as % of CIT collected— / 337_094 / 337_094992
pit_arrears_pct_of_pit_collectedpercentPIT arrears as % of PIT collected— / 337_095 / 337_095918
vat_arrears_pct_of_vat_collectedpercentVAT arrears as % of VAT collected— / 337_097 / 337_097923
arrears_growth_excl_noncollectable_pctpercentYear-end arrears as % of previous year-end arrears (excluding non-collectable)— / — / 337_102608
audit_assessments_to_collections_pctpercentAdditional assessments from all audits and verification actions as % of tax collections— / — / 337_158925
audit_hit_rate_pctpercentAudits resulting in an adjustment as % of audits completed— / — / 337_173844
cit_assessments_pct_of_cit_collectedpercentCIT additional assessments as % of CIT collected— / 337_121 / 337_121948
pit_assessments_pct_of_pit_collectedpercentPIT additional assessments as % of PIT collected— / 337_122 / 337_122892
vat_assessments_pct_of_vat_collectedpercentVAT additional assessments as % of VAT collected— / 337_124 / 337_124892
internal_review_cases_per_1000_taxpayersratioInternal review (administrative review) cases initiated per 1 000 active PIT and CIT taxpayers10650 / 337_125 / 337_1251,132
independent_review_to_internal_review_ratioratioCases under independent review relative to internal review cases— / — / 337_126594
appeals_won_by_administration_pctpercentCases resolved by higher appellate court in favour of the administration as % of cases resolved— / — / 337_127632

observations

One row per jurisdiction × indicator × fiscal year. Keys are unique within each questionnaire generation and, because fiscal years do not overlap between generations, unique overall.

ColumnTypeDescription
jurisdiction_codestringAlpha-3 code as used in the IMF ISORA codelists (ISO 3166-1 alpha-3 except KOS for Kosovo). ISORA 2016/2018 published numeric IMF codes; they were mapped through the ISO annotation of the IMF codelist.
jurisdiction_namestringName exactly as published by the IMF (IMF naming practice, without prejudice to the status of any territory).
fiscal_yearint16Fiscal year the answer refers to. Fiscal-year definitions differ by jurisdiction.
survey_roundstringRound in which that fiscal year was first collected (ISORA 2016ISORA 2025). Values for earlier years may have been revised in later rounds.
questionnaire_generationstringISORA 2016, ISORA 2018 or ISORA 2020+ — which codelist / questionnaire family the indicator_code belongs to. Join to `indicators` on both this and `indicator_code`.
indicator_codestringSource code of the question or answer cell (e.g. 80040_3, 337_001, PARTICIPATION_RATE). Codes are reused across generations, sometimes with different wording.
indicator_labelstringLabel of the code in that generation's codelist (denormalised for convenience).
indicator_value_kindstringWhat this indicator's answers look like in the data: numeric, binary, categorical, free_text, mixed, no_values (inferred from the published values, see below).
value_rawstringThe published value, verbatim (before any cleaning).
value_numericfloat64Parsed number when the published value is numeric, else null. Stored exactly as published (see Units).
value_textstringCleaned text answer (HTML fragments removed, encoding glitches repaired, whitespace collapsed), else null.
value_statusstringvalue, not_available, not_applicable, empty, unrecognized_code (table below).
unit_multiplierint8The source SCALE attribute (0 or 3).
monetary_unitstringthousands of local currency (ISORA 2016/2018 money questions), local currency units (ISORA 2020+ money questions, i.e. every row with unit_multiplier = 3), or null for non-monetary indicators.
value_local_currency_unitsfloat64Harmonised money amount in base units of the jurisdiction's currency (2016/2018 values × 1 000; 2020+ values unchanged). Null for non-monetary indicators. Not converted across currencies.
form_statusstringSource workflow flag on the observation (CERTIFY, EDIT, REEDIT) or null.
footnotestringFree-text note published with the observation (cleaned), or null.
source_dataflow, source_dataflow_versionstringProvenance: which IMF dataflow version the row came from.
`value_status`RowsShareMeaning
value664,34983.4%a numeric or text answer is present
not_available113,78514.3%the administration answered D (data not available) to a numeric question
not_applicable9,2031.2%the administration answered Not Applicable
empty7,7381.0%the cell was published empty
unrecognized_code1,5260.2%the published value is the undocumented code P (ISORA 2016 only)
`indicator_value_kind`RowsWhat it means
numeric455,528every published answer is a number
binary253,326answers are Yes / No
categorical82,533answers come from a closed list (≤ 25 distinct values)
mixed2,856numbers and text both occur (usually a category plus a numeric ‘other’)
no_values2,358only D, empty or not-applicable cells were published

indicators

One row per questionnaire generation × indicator code (3,569 rows), i.e. the three source codelists flattened with every annotation the IMF attaches to a code, plus statistics computed from the observations. Key columns: label, display_label, description (rarely filled at source), form_code / form_name (the survey form, e.g. Form F. Operational metrics), question_ref (e.g. Form D - Q2, ISORA 2020+ only), section, topic_group / topic_subgroup (the IMF Indicators by Topic hierarchy, ISORA 2020+ only), report_table_index / report_table_title (where the code appears in the IMF review tables), indicator_type (the source's declared type: binary, count, currency, percent, nominal, ordinal, text, date, unspecified — unreliable, see caveats), observed_value_kind (inferred from data), answer_categories (the closed list of answers actually observed, most frequent first), is_derived / formula / numerator / denominator / legend (ISORA-computed ratios such as 337_001 net revenue as % of GDP), is_monetary, is_local_currency, label_mentions_thousands, is_periodic (periodic-module question), is_review_indicator, n_observations, n_observations_with_value, n_jurisdictions, fiscal_years_with_data, has_observations (codelists contain codes that were never published with data).

indicator_history

One row per indicator code (2,551 codes) describing how the code appears across the three questionnaire generations: in_2016 / in_2018 / in_2020plus, the label in each generation, label_changed_2016_to_2018, label_changed_2018_to_2020plus, similarity scores of the normalised labels (0–1), n_generations, fiscal_years_with_data, observation counts and a comparability_flag:

`comparability_flag`CodesMeaning
single_generation1,759The code exists in only one questionnaire generation.
label_stable439Present in two or three generations with the same wording (after normalising case, punctuation and spacing).
label_changed353Present in more than one generation with different wording — check whether the meaning changed before stitching a time series.

226 codes exist in all three generations, 566 in two, 1,759 in one. 183 codes changed wording between ISORA 2016 and ISORA 2018, 215 between ISORA 2018 and ISORA 2020+.

jurisdictions

One row per jurisdiction with data (182 rows): jurisdiction_code, jurisdiction_name, imf_numeric_code, IMF region / sub-region / regional technical-assistance centre, World Bank region and FY2015 income group as carried in the IMF codelist, the current World Bank region, income group and lending category (world_bank_region_current, world_bank_income_group_current, world_bank_lending_category_current, world_bank_code), WEO group, fragile / small-developing-state flags, membership flags (ADB, CIAT, IOTA, OECD, OECD Forum on Tax Administration, EU, G20, G7, WCO, WAEMU) as recorded in the IMF codelist, and participation computed from the data (fiscal_years_with_data, survey_rounds_with_data, in_isora_2016 / in_isora_2018 / in_isora_2020plus, n_observations).

coverage

One row per generation × indicator × fiscal year (6,752 rows) counting how many jurisdictions were published for that question in that year, split by value_status (n_value, n_not_available, n_not_applicable, n_empty, n_unrecognized_code, n_jurisdictions_reporting). This is the questionnaire matrix: it tells you which questions were asked (or at least published) in which year, and how well they were answered.

revisions

The IMF API still serves earlier published versions of the consolidated FY2018+ dataflow. Each version is the dataset as released after a survey round, so differences between versions are revisions of previously published answers. Three vintages were compared on every jurisdiction × indicator × fiscal year key they share (359,777 keys):

VintageContent
ISORA_LATEST_DATA_PUB v2.0.0ISORA 2023 release, FY2018–FY2022
ISORA_LATEST_DATA_PUB v4.0.0ISORA 2024 release, FY2018–FY2023
ISORA_LATEST_DATA_PUB v5.0.0ISORA 2025 release, FY2018–FY2024 (the vintage used for observations)

The table lists, in long format (one row per key × vintage), only the keys where something meaningful changed (42,552 keys), with a change_type:

`change_type`KeysMeaning
value_revised2,787A number was replaced by a different number (beyond published precision) or by a sentinel.
text_revised47A categorical/text answer changed.
scale_convention_change20,114The number changed by exactly ×1 000: the 2023 release published money in thousands, later releases in base units (see Units). Not a revision of the answer.
added_in_later_release16,189The key was absent from an earlier release covering that year (question added, back-filled or late submission).
removed_in_later_release3,415The key was present in an earlier release and dropped later (question withdrawn or answer removed).

Differences that are only formatting (thousands separators, float precision, rounding to the coarser published precision, encoding glitches, letter case) are not listed. Example of a real revision: Australia's 337_084 (on-time filing rate, CIT) for FY2022 was published as 72.88 in the 2023 and 2024 releases and as 68.68 in the 2025 release — the latter equals the FY2021 value of the earlier releases. Users who need "the value as first published" can rebuild it from this table; users who need "the latest view" should simply use observations.

Working with questions that changed over time

ISORA question codes are not stable identifiers of meaning across the three questionnaire generations. Three patterns occur:

  1. 1.Same code, same question, new wording. 80250_3 is Non-tax revenue - Net in 2016 and 2018 and Net revenue collected by the tax administration (in thousands in local currency)-Non-tax revenue in 2020+. Comparable.
  2. 2.Same code, narrower or broader question. 88360 is Administration pre-fills returns or assessments (2016, 2018) but Administration pre-fills PIT returns or assessments (2020+). 85710_268 is Other verification interventions - Total additional assessments… (2016), Automated audits - Total additional assessments… (2018) and Value of additional assessments raised from audits and verification actions… - Electronic compliance checks (2020+). Comparability is a judgement call.
  3. 3.Same code, unrelated question. 92670 is Categories of third party information used to pre-fill returns - Other income - description (2018) and Description of tax deductible expenses that are prefilled in PIT tax returns and assessments (2020+). Not comparable.

Recommended workflow:

  • Start from indicator_history; filter comparability_flag == "label_stable" for series that can be stitched with little risk, and read both labels for label_changed codes.
  • Join observations to indicators on (questionnaire_generation, indicator_code) so each value carries the definition that applied when it was collected. Never join on the code alone.
  • Use coverage to see in which years a question was actually asked; the periodic module (indicators.is_periodic) only has data for FY2022 within the consolidated generation.
  • Within ISORA 2020+ the questionnaire is stable across FY2018–FY2024 (the same codelist version is published for all seven years); the revisions table shows which earlier answers were revised in later rounds.
  • The ISORA 2016 → ISORA 2018 transition is smoother (605 shared codes, mostly same questions) than ISORA 2018 → ISORA 2020+ (a redesigned, much shorter questionnaire).

Units and currency

  • Money is in the jurisdiction's own currency and is not converted. indicators.is_local_currency marks national-currency questions. Derived ratios (337_*, 398_*, 111_*) are unit-free.
  • The three generations publish money differently. ISORA 2016 and 2018 published amounts in thousands (as asked on the form) with SCALE = 0. The consolidated ISORA 2020+ dataflow publishes the same questions already multiplied out to base currency units and marks them with SCALE = 3 (verified against GDP: France's 398_001 for FY2022 is published as 2 638 008 000 000 with SCALE = 3, i.e. EUR 2.64 trillion; the ISORA 2023 release had published 2 638 008 000, in thousands). Do not multiply ISORA 2020+ values by 1 000.
  • value_local_currency_units removes the ambiguity: it is always base units (45,359 rows converted from thousands, 39,451 rows taken as published). value_numeric stays exactly as published for traceability.
  • Counts (staff, taxpayers, returns), percentages and ratios are published as-is.

What was changed relative to the source (transformation notice)

Values were not altered. The following was done, and is reversible through value_raw:

  1. 1.Three SDMX dataflows were stacked into one long table with a common schema; the dataset-level and series-level attribute rows of the SDMX-CSV were dropped.
  2. 2.Numeric IMF jurisdiction codes (ISORA 2016/2018) were mapped to the alpha-3 codes used by the consolidated dataflow, via the ISO annotation of the IMF codelist (Kosovo: 967KOS, the IMF's current code; the 2018 codelist annotated it UVK).
  3. 3.The mixed-type OBSERVATION string was split into value_numeric / value_text / value_status. Dnot_available; Not Applicable / N/Anot_applicable; Punrecognized_code; digit strings with space grouping (163 310 020) → number.
  4. 4.Text answers and footnotes: HTML fragments such as <br/> and entities removed, whitespace collapsed, and 64 values plus 141 footnotes with double-encoded UTF-8 (‘, TürkiyeTürkiye) repaired.
  5. 5.Monetary harmonisation (monetary_unit, value_local_currency_units) as described above.
  6. 6.Indicator metadata flattened from SDMX annotations; declared types normalised (Countingcount, trailing spaces removed); observed value kinds, answer categories, coverage, cross-generation history and inter-release revisions computed.
  7. 7.Jurisdiction attributes taken from the IMF CL_ISORA_ISO_COUNTRY codelist; Yes/No flags converted to booleans.
  8. 8.World Bank income classifications joined (see Enrichment); the consolidated panel built from the curated crosswalk in panel_dictionary. The four derived expenditure aggregates 337_176337_179, published in thousands with SCALE = 0, are flagged as such and harmonised like the other money questions.

Nothing was imputed, interpolated, deduplicated or filtered out.

Caveats and known issues in the source

  • Self-reported, voluntary. Answers are provided by the administrations and reviewed by the partners, but definitions are applied locally; read the ISORA guide before comparing countries.
  • `D` and `P`. 113,785 cells are D — the ISORA convention for no data available on a numeric question, distinct from a question that was skipped. 1,526 ISORA 2016 cells contain P, a code that does not appear in the surviving documentation; it occurs only on numeric questions and is treated as missing (unrecognized_code).
  • Zeros that mean "missing". The ISORA 2016 derived ratios (codes 1001010790) publish an exact 0 when one of their inputs was not reported (107 of the 262 FY2014–15 revenue-to-GDP values are 0 although revenue was reported and GDP was not). In observations these zeros are kept as published; in panel they are set to null only for the four columns where zero is impossible (zeros_treated_as_missing in panel_dictionary). Treat other exact zeros in FY2014–FY2015 ratio columns with suspicion.
  • Declared types are unreliable. In the 2020+ codelist 817 of 1 098 codes have no declared type and several count questions (Total number of returns received - CIT) are typed currency. Use indicator_value_kind / observed_value_kind, which are inferred from data.
  • Scale attribute inconsistency between generations (see Units). The label_mentions_thousands flag exists because in ISORA 2016/2018 the unit is only stated in some labels.
  • Categorical answers are not fully harmonised at source: InPlace and In Place, Implmenting and Implementing, option a) with a stray <br/>, leading spaces in ISORA 2016 answers. Cleaning removed markup and whitespace but did not merge spellings.
  • Codelists include codes without data (283 in 2016, 116 in 2018, 397 in 2020+): questions suppressed from publication or never asked. indicators.has_observations flags them.
  • Fiscal years are the administrations' own fiscal years and do not align across countries.
  • Combined tax-and-customs administrations sometimes report total staff or expenditure for both functions (the IMF notes this on the staff tables).
  • World Bank income groups in jurisdictions are the FY2015 classification stored in the IMF codelist. Join current classifications yourself if you need them.
  • Revisions: the observations table is the latest published view (ISORA 2025 release). If you compare with figures quoted in older IMF/OECD publications, consult revisions.
  • Territorial names follow IMF practice (e.g. China, P.R.: Hong Kong, Taiwan, Kosovo, Republic of, Türkiye, Rep of) and are without prejudice to the status of any territory.

Enrichment: World Bank income groups

Two columns were added from the World Bank's Country and Lending Groups classification (datahelpdesk.worldbank.org/knowledgebase/articles/906519):

  • jurisdictions.world_bank_income_group_current (and region, lending category): the current classification file (CLASS.xlsx, FY27 edition, based on 2025 GNI per capita).
  • panel.income_group_wb: the historical classification (OGHIST.xlsx) aligned so that fiscal year Y gets the World Bank group computed from year-Y GNI per capita, i.e. World Bank fiscal year FY(Y+2), shown in income_group_wb_classification_fy. 1,692 of 1,730 jurisdiction-years are matched.

177 of the ISORA jurisdictions have a World Bank classification; AIA, COK, MSR, NIU, SRP are territories the World Bank does not classify. Code differences are mapped (KOSXKX, UAEARE). The World Bank publishes these files under its open data terms (Creative Commons Attribution 4.0, worldbank.org/data-terms); the FY2015 income group carried in the IMF codelist is kept for reference.

Provenance and reproducibility

Everything comes from the public IMF SDMX API (https://api.imf.org/external/sdmx/3.0, agency ISORA), retrieved on 2026-09-20T04:42:35Z:

DataflowVersionData structureLast updated at sourceUsed here
ISORA_2016_DATA_PUB1.0.0ISORA:DSD_ISORA_PUBLISHED(1.0+.0)2025-03-31T14:48:21.329477Zno
ISORA_2016_DATA_PUB2.0.0ISORA:DSD_ISORA_PUBLISHED(1.0+.0)2025-06-19T04:06:43.477036Zobservations
ISORA_2018_DATA_PUB1.0.0ISORA:DSD_ISORA_PUBLISHED(2.0+.0)2025-03-31T14:48:21.358333Zno
ISORA_2018_DATA_PUB2.0.0ISORA:DSD_ISORA_PUBLISHED(2.0+.0)2025-06-19T04:06:43.532576Zobservations
ISORA_LATEST_DATA_PUB2.0.0ISORA:DSD_ISORA_PUBLISHED(4.0+.0)2025-03-28T16:08:59.158309Zrevisions
ISORA_LATEST_DATA_PUB4.0.0ISORA:DSD_ISORA_PUBLISHED(5.0+.0)2025-07-04T18:22:18.692447Zrevisions
ISORA_LATEST_DATA_PUB5.0.0ISORA:DSD_ISORA_PUBLISHED(6.0+.0)2026-06-15T17:13:23.041621Zobservations

Structures used: DSD_ISORA_PUBLISHED 1.0.0 / 2.0.0 / 6.0.0 with their codelists (CL_INDICATOR 1.0.2, CL_ISORA_TAX 1.0.3 and 6.0.6, CL_COUNTRY, CL_JURISDICTION 4.8.4, CL_ISORA_ISO_COUNTRY 2.0.1), the hierarchies H_CL_INDICATORS_BY_TOPIC 2.2.0, H_CL_PERIODIC_INDICATORS 2.0.0, H_CL_DERIVED_INDICATORS 2.0.0, H_CL_REVIEW_INDICATORS 2.1.0 and the label codelist CL_RAFIT_LABELS. Dataset-level attributes (license URL, citations, publication dates) were read from the SDMX 2.1 CSV endpoint and are stored in metadata/build_summary.json.

The full pipeline (download, transformation rules, unit tests, this card's template) is in `pipeline/` and is MIT-licensed; python -m isora_hf.sdmx_client && python -m isora_hf.build && python -m isora_hf.card rebuilds the dataset from scratch. Re-running it after the next ISORA release (expected mid-2027 for FY2025) is how this dataset will be updated.

Official documentation — questionnaires, completion guides, review and derived tables per round — is in the ISORA Documents Catalog]) (the files are served through the portal's download buttons and are not mirrored here). The IMF also publishes analytical reports on each round (ISORA 2016: Understanding Revenue Administration, 2019; ISORA 2018: Understanding Revenue Administration, 2021; ISORA 2023: Tax Administration: Performance and Practices, 2026), and the OECD's annual Tax Administration series is built on the same data for 58 jurisdictions.

Citation and acknowledgement

Any publication using these data must acknowledge the source. The citation requested by the publisher (from the source metadata) is:

The International Survey on Revenue Administration (ISORA). http://isoradata.org. Accessed on [date].

Full source citation:

The Asian Development Bank (ADB), the Inter-American Center of Tax Administrations (CIAT); the International Monetary Fund (IMF); the Intra-European Organisation of Tax Administrations (IOTA); and the Organisation for Economic Co-operation and Development (OECD), International Survey on Revenue Administration: https://ISORADATA.ORG

If you also want to credit this cleaned redistribution:

bibtex
@misc{isora_hf_2026,
  title        = {ISORA -- International Survey on Revenue Administration, FY2014--FY2024 (cleaned redistribution)},
  howpublished = {Hugging Face dataset \url{https://huggingface.co/datasets/FrenchCastle/isora-tax-administration}},
  year         = {2026},
  note         = {Unofficial restructuring of data published by the IMF on behalf of ADB, CIAT, IMF, IOTA and OECD through the ISORA Data Portal (https://isoradata.org). Data subject to the ISORA Data Portal Terms and Conditions.}
}

Licence

license: otherISORA Data Portal Terms and Conditions of Data Access and Use plus the IMF Copyright and Usage policy, reproduced in `LICENSE`. In short: you may use and publish the data with appropriate acknowledgement of the source; the data are provided as is, without warranty; you indemnify the partner organisations against third-party claims arising from your use; the partner organisations' immunities are preserved; contact copyright@imf.org for commercial reuse questions. The pipeline code is MIT-licensed.

Dataset version

  • 1.1.0 (2026-09-20): added the consolidated panel and panel_dictionary tables, the isora.py loader, current and per-year World Bank income groups, and the thousands flag on the derived expenditure aggregates.
  • 1.0.0 (2026-09-20): first release, built from ISORA_2016_DATA_PUB 2.0.0, ISORA_2018_DATA_PUB 2.0.0 and ISORA_LATEST_DATA_PUB 5.0.0 (ISORA 2025 release, FY2024 data published June 2026).