Открытые данные Минфина (каталог и паспорта)
Зачем и для кого
Инструкция для аналитиков и разработчиков, которым нужны официальные CSV/XML-наборы Минфина (КБК, долг, ФНБ, роспись, региональные своды и др.) без ручного копирования с HTML-карточек. Единого REST API всего каталога нет: машинный вход — это сводный реестр list.csv, паспорт каждого набора (meta.csv) и прямые ссылки на файлы данных из паспорта.
Входные данные
- Сводный перечень наборов — URL https://minfin.gov.ru/opendata/list.csv; в CSV колонки
property(идентификатор вида7710168360-…),title,value(URL паспортаmeta.csv),format. - Идентификатор набора — строка из
propertyили из HTML-каталога https://minfin.gov.ru/ru/opendata/. - Паспорт — файл
meta.csvпо ссылке из поляvalue; внутри парыproperty/valueс метаданными и строками видаstructure-…/data-…со ссылками на файлы данных. - Зафиксируйте дату выгрузки и URL — паспорта и состав полей обновляются независимо по наборам.
Инструменты
- Браузер — для поиска набора по смыслу и чтения условий использования (типовой PDF).
- Python 3 с пакетом
requestsи стандартным модулемcsv(достаточно дляlist.csvиmeta.csv). - При необходимости — pandas для табличных CSV после того, как выбран конкретный файл данных (разделитель и кодировка смотрите в паспорте и по первым строкам файла).
Шаги
- Скачайте актуальный
list.csvпо каноническому адресу на доменеminfin.gov.ru(см. карточку источника); при автоматических запросах используйте осмысленныйUser-Agent— иначе вместо CSV может вернуться HTML-страница ограничения доступа. - Отфильтруйте строки с
property, начинающимся с7710168360— это строки наборов (первая служебная строка сstandardversionотбрасывается). - Найдите нужный набор по
propertyили по подстроке вtitle(кириллица в кавычках в CSV). - Загрузите паспорт по URL из колонки
value, разберите его как CSV с заголовкомproperty,value. - Выберите файл данных — ключи вида
structure-…/data-…указывают на актуальные или архивные выгрузки; ориентируйтесь на дату в имени ключа и на поляmodified/ описание в паспорте. - Скачайте файл данных по URL из паспорта; домен в ссылке может быть
minfin.ruпри том же пути — это нормально для витрины, проверяйте актуальность URL в текущем паспорте.
Воспроизводимый пример
Сводный реестр, паспорт набора «внутренний долг» и пример ссылки на один из файлов structure-*.csv:
import csv
import io
import requests
LIST_URL = "https://minfin.gov.ru/opendata/list.csv"
HEADERS = {"User-Agent": "Mozilla/5.0 (compatible; budget-open-data/1.0)"}
def get_text(url):
resp = requests.get(url, headers=HEADERS, timeout=30)
resp.raise_for_status()
resp.encoding = resp.apparent_encoding or resp.encoding or "utf-8"
return resp.text
def rows_from_list_csv(text):
reader = csv.DictReader(io.StringIO(text))
return [r for r in reader if r.get("property", "").startswith("7710168360")]
def meta_as_dict(meta_url):
text = get_text(meta_url)
reader = csv.DictReader(io.StringIO(text))
return {row["property"]: row["value"] for row in reader}
text = get_text(LIST_URL)
registry = rows_from_list_csv(text)
print("Наборов в list.csv:", len(registry))
row = next(r for r in registry if r["property"] == "7710168360-DomesticDebt")
meta = meta_as_dict(row["value"])
print("Паспорт:", meta.get("identifier"), "| modified:", meta.get("modified"))
structure_keys = sorted(
k for k, v in meta.items() if k.startswith("structure-") and v.endswith(".csv")
)
latest_key = structure_keys[-1]
print("Выбран structure-ключ:", latest_key)
print("URL данных:", meta[latest_key])
Проверка результата
- Убедитесь, что ответ на
list.csv— CSV, а не HTML: при HTML проверьтеUser-Agent, сеть и текст страницы. - Сверьте
identifierв паспорте с выбранной строкойlist.csv. - Сопоставьте показатели с ГИИС «Электронный бюджет» и отчётностью Казначейства, если речь о кассовом исполнении — наборы Минфина часто плановые или сводные с иной методикой (см. карточку источника).
Ограничения и типовые ошибки
- WAF и пустой или HTML-ответ: добавьте заголовок
User-Agent; не полагайте на «голый»curl/скрипт с дефолтным агентом в продакшене без мониторинга. - Регистр пути: в ссылках встречаются и
/opendata/, и/OpenData/— ориентируйтесь на URL из актуальногоlist.csvи паспорта. - Домен
minfin.ruв файлах данных при паспорте наminfin.gov.ru— не ошибка; всё равно берите ссылки только из опубликованного паспорта. - Нет единого JSON API каталога в смысле ГИИС: обходите цепочку
list.csv→meta.csv→ файл данных или используйте API budget.gov.ru для смежных срезов исполнения.
Связанные страницы
- Открытые данные Минфина России — полное описание реестра, форматов и перекрёстных сверок.
- Сайт Министерства финансов РФ — портал, ограничения и контекст публикаций.
- Минфин России — оператор витрины.
- Наборы данных ГИИС «Электронный бюджет» — смежный каталог и API на
budget.gov.ru. - Работа с API budget.gov.ru — когда удобнее REST портала «Электронного бюджета».