Единый реестр субъектов МСП — публичный портал (rmsp.nalog.ru)
| Признак | Значение |
|---|---|
| Уровень и охват | Федеральный; интерактивное представление сведений о субъектах МСП — ЮЛ и ИП — и агрегированной статистики реестра |
| Тип доступа | HTML-витрина; браузерные POST-обработчики JSON поиска и статистики; POST-выгрузки XLSX |
| Основные форматы | HTML text/html;charset=utf-8; JSON application/json;charset=UTF-8; XLSX application/vnd.openxmlformats-officedocument.spreadsheetml.sheet |
| Оператор | ФНС России |
| Режим доступа | Публичный: тестовые HTTP-запросы без авторизации получили 200; сервер выдаёт cookie JSESSIONID |
Коротко: rmsp.nalog.ru — официальная интерактивная витрина того же реестра, который ФНС публикует файловым набором 7707329152-rsmp. Витрина удобна для единичного или фильтрованного поиска, выбора исторической даты и статистики; файловый набор — для массовой загрузки XML. JSON-обработчики ниже реально работают на дату проверки, но портал не объявляет их стабильным публичным API.
Качество и верификация
| Измерение | Значение для этой карточки |
|---|---|
Дата проверки (last_verified) | 2026-07-19: браузерный поиск, UI-экспорт XLSX, JSON-ответы, раздел статистики и HTTP-заголовки |
Полнота (data_completeness) | Частичная для программной загрузки: микроданные доступны через поиск, но полный реестр как единый экспорт витрины не подтверждён; для него есть 7707329152-rsmp |
Машиночитаемость (machine_readability) | POST JSON с UTF-8 и XLSX, но без опубликованной спецификации; параметры и токены пагинации нужно получать из актуального ответа |
Юридическая значимость (legal_significance) | Официальная витрина ФНС России, но не самостоятельный нормативный источник статуса вне даты среза |
Задержка обновления (update_lag) | На 2026-07-19 главная страница и селектор показывали текущий срез 10.07.2026; SLA/время появления среза не указаны |
Глубина архива (archive_depth) | В форме наблюдался перечень выбираемых дат от 01.08.2016 до 10.07.2026; это состояние селектора, не гарантия неизменного архива |
Лицензия (license_or_terms) | Явные условия повторного использования на проверенной странице витрины не найдены; developers.html ссылается на открытые данные ФНС, но не задаёт лицензию для HTTP-обработчиков |
Описание
В карточке описан именно канал веб-витрины: обычный и расширенный поиск, JSON, XLSX и статистика. XML-поля и правила формирования файла не дублируются: они документированы в 7707329152-rsmp.
В объём не входят учётные роли портала и другой реестр — получатели поддержки на rmsp-pp.nalog.ru. Принадлежность к МСП и факт получения поддержки — разные данные.
Оператор
Федеральная налоговая служба — оператор и публикатор витрины: https://rmsp.nalog.ru/
- Карточка ИС: Сайт ФНС России — статистика и данные — родительский контур публичных интернет-сервисов ФНС;
rmsp.nalog.ru— специализированный поддомен реестра МСП.
URL и точки доступа
| Тип доступа | URL | Метод и формат | Что подтверждено 2026-07-19 |
|---|---|---|---|
| Главная | https://rmsp.nalog.ru/ | GET, HTML | Текущий срез на странице — 10.07.2026; счётчик субъектов — 6 612 445 |
| Обычный поиск | https://rmsp.nalog.ru/search.html | HTML + POST | Ввод: ИНН, ОГРН, ОГРНИП, наименование/ФИО ИП |
| Расширенный поиск | https://rmsp.nalog.ru/search.html?mode=extended | HTML + POST | Форма с фильтрами и обязательным dtCategory |
| Поиск | https://rmsp.nalog.ru/search-proc.json | POST, JSON UTF-8 | Рабочий обработчик результатов поиска; не описан как версионированный API |
| Экспорт результата поиска | https://rmsp.nalog.ru/report.xlsx | POST, XLSX | UI меняет action формы на этот URL; фактический тест описан в разделе XLSX |
| Статистика | https://rmsp.nalog.ru/statistics.html | HTML | Селектор даты, таблицы и графики |
| Агрегаты статистики | https://rmsp.nalog.ru/statistics-proc.json | POST, JSON UTF-8 | Рабочий запрос с statDate=10.07.2026 возвращает РФ, федеральные округа и регионы |
| Выгрузка статистики | https://rmsp.nalog.ru/statistics.xlsx?statDate=10.07.2026 | GET, XLSX | Ответ содержит имя rsmp_statistics_19.07.2026.xlsx |
| Материалы разработчикам | https://rmsp.nalog.ru/developers.html | GET, HTML | Описаны СМЭВ и ссылки на спецификации файловых открытых данных; лимиты HTTP API не опубликованы |
| Альтернативный URL из задания | https://rmsp.nalog.ru/razrabotchikam.html | GET, HTML | 200, но в проверенном теле находилась страница поиска, а не отдельная страница для разработчиков |
HTTP-заголовки ответов
Значения сняты curl 2026-07-19. Content-Length у динамических и XLSX-ответов может зависеть от тела; «нет» означает отсутствие заголовка в конкретном ответе, а не обещание сервера.
| URL и проверочный запрос | Статус и Content-Type | Content-Length / передача | Last-Modified, сжатие, cookie |
|---|---|---|---|
GET / | 200; text/html;charset=utf-8 | Content-Length нет; Transfer-Encoding: chunked | Last-Modified и Content-Encoding нет; Set-Cookie: JSESSIONID=…; Path=/; HttpOnly |
POST /search-proc.json, mode=quick, query=4707048043 | 200; application/json;charset=UTF-8 | Content-Length: 1361 | Last-Modified и Content-Encoding нет; тот же JSESSIONID |
POST /report.xlsx с теми же полями | 200; application/vnd.openxmlformats-officedocument.spreadsheetml.sheet | Content-Length нет; Transfer-Encoding: chunked; content-disposition: attachment; filename=rsmp_19.07.2026.xlsx | Last-Modified и Content-Encoding нет; JSESSIONID; пустые Pragma, Cache-Control, Expires |
POST /statistics-proc.json, statDate=10.07.2026 | 200; application/json;charset=UTF-8 | Content-Length нет; Transfer-Encoding: chunked | Last-Modified и Content-Encoding нет; JSESSIONID |
GET /statistics.xlsx?statDate=10.07.2026 | 200; XLSX MIME | Content-Length нет; Transfer-Encoding: chunked; content-disposition: attachment; filename=rsmp_statistics_19.07.2026.xlsx | Last-Modified и Content-Encoding нет; JSESSIONID; пустые Pragma, Cache-Control, Expires |
GET /developers.html и GET /razrabotchikam.html | 200; text/html;charset=utf-8 | Content-Length нет; Transfer-Encoding: chunked | Last-Modified и Content-Encoding нет; JSESSIONID |
Cookie выставляется даже на главной и JSON-ответах. При этом проверочный POST /search-proc.json и POST /statistics-proc.json от curl без заранее переданной cookie и без специального User-Agent получили корректный 200 и JSON. Это не доказывает отсутствие будущих ограничений.
Структура данных и объекты
A. Параметры поиска
Обычная форма передаёт mode=quick, query, page, sortField, sort. Расширенная форма имеет mode=extended и следующие имена полей. Значения, коды и обязательность сняты с HTML/клиентского JS формы; прямой сетевой запрос со всеми фильтрами сразу не выполнялся, поэтому поведение редких комбинаций помечено отдельно.
| Параметр (HTTP) | Где передаётся | Тип | Обяз. | Семантика | Соответствие полю XML 7707329152-rsmp |
|---|---|---|---|---|---|
mode | body application/x-www-form-urlencoded | строка | да | quick или extended; определяет вариант формы | Нет поля: технический параметр витрины |
query | body | строка | для обычного поиска да | ИНН, ОГРН, ОГРНИП, наименование ЮЛ или ФИО ИП | Поиск по ИННЮЛ/ИННФЛ, ОГРН/ОГРНИП, наименованию/ФИО; не отдельное XML-поле |
npType | body, повторяемый checkbox | enum UL / IP | нет | Тип субъекта: юридическое лицо или ИП | Документ/@ВидСубМСП: 1 / 2; глава КФХ — отдельный XML-код 3 |
vidIp | body | enum 2 / 1 | нет | В UI при выборе ИП: «является главой КФХ», да / нет | Документ/@ВидСубМСП; прямое соответствие кодов ТРЕБУЕТ ПРОВЕРКИ |
category | body, повторяемый checkbox | enum 1 / 2 / 3 | нет | Микро / малое / среднее предприятие | Документ/@КатСубМСП |
dtCategory | body | дата ДД.ММ.ГГГГ | да в расширенной форме | Дата среза, по которой определяется категория МСП; в селекторе доступны исторические даты | Документ/@ДатаСост |
isNew | body | enum 1 / 0 | нет | Вновь созданный субъект: да / нет | Документ/@ПризНовМСП (в XML «да»=1, «нет»=2; коды витрины отличаются) |
isSocial | body | enum 1 / 0 | нет | Социальное предприятие: да / нет | Документ/@СведСоцПред (аналогично кодировка UI отличается) |
dtRegistry | body | дата | нет | Дата включения в реестр | Документ/@ДатаВклМСП |
region | body | строка кода субъекта РФ | нет | Регион | Документ/СведМН/@КодРегион |
district, city, locality | body | строковые коды | нет | Последовательно доступные район, город, населённый пункт | Адресные части СведМН; точное соответствие кодов ТРЕБУЕТ ПРОВЕРКИ |
hasLicenses | body | флаг 1 | нет | Только субъекты с лицензиями | Наличие Документ/СвЛиценз |
isHitech | body | флаг 1 | нет | Инновационная/высокотехнологичная продукция | Связано с СвПрод/@ПрОтнПрод; точное правило фильтра ТРЕБУЕТ ПРОВЕРКИ |
isPartnership | body | флаг 1 | нет | Участие в программах партнёрства | Наличие Документ/СвПрогПарт |
okved1 | body | строка кода | нет | Вид деятельности ОКВЭД; виджет допускает до 1 000 значений | СвОКВЭД/СвОКВЭДОсн/@КодОКВЭД |
tru | body | строковый код | нет | Виды продукции, работ, услуг | СвПрод/@КодПрод |
slvd | body | строковый код | нет | Виды лицензируемой деятельности | Поле XML-группы СвЛиценз; точная проекция ТРЕБУЕТ ПРОВЕРКИ |
page | body | непрозрачный строковый токен | нет | Текущая страница или выбранный размер страницы; берётся из pageNav ответа | Нет поля: техническая пагинация |
sortField | body | строка | нет | В проверенном запросе NAME_EX | Нет поля: техническая сортировка витрины |
sort | body | ASC / DESC | нет | Направление сортировки | Нет поля: техническая сортировка витрины |
Каскадный адресный виджет в коде страницы использует POST /kladr-proc.json с parentLevel (REGION, DISTRICT, CITY, LOCALITY) и parentCode; его JSON-ответ в этой проверке отдельно не снимался. ТРЕБУЕТ ПРОВЕРКИ: фактическая схема ответа и поведение всех уровней.
B. JSON-ответ поиска
Проверенный запрос POST /search-proc.json с mode=quick&query=4707048043&sortField=NAME_EX&sort=ASC вернул один объект. Кодировка ответа — UTF-8; тело — JSON. Поля «обяз.» ниже означают наличие в этой фактической выдаче, а не опубликованный контракт API.
| Поле JSON | Тип | Обяз. | Семантика | Ключ связки | Источник |
|---|---|---|---|---|---|
dtQueryBegin, dtQueryEnd | строка ДД.ММ.ГГГГ ЧЧ:ММ:СС | да | Время выполнения поискового запроса на портале | нет | Ответ 2026-07-19 |
data | массив объектов | да | Страница результатов | нет | Ответ 2026-07-19 |
data[].id | число | да | Технический идентификатор строки; в проверенной ЮЛ численно равен ОГРН | не использовать | Ответ 2026-07-19 |
data[].inn | строка из цифр | да | ИНН субъекта | да | Ответ 2026-07-19; ИНН |
data[].ogrn | строка из цифр | да для проверенной ЮЛ | ОГРН проверенной ЮЛ | да, ЮЛ | Ответ 2026-07-19; ОГРН. Имя поля для ОГРНИП ИП ТРЕБУЕТ ПРОВЕРКИ |
data[].nptype | строка | да | Тип субъекта; в проверенной записи UL | вместе с ИНН | Ответ 2026-07-19 |
data[].name_ex | строка | да | Наименование субъекта | нет | Ответ 2026-07-19 |
data[].category | целое | да | Код категории; в проверенной записи 1 (микропредприятие) | нет | Ответ 2026-07-19; UI и XML-сопоставление |
data[].regioncode | строка | да | Двухзначный код региона, в примере 47 | группировка по региону | Ответ 2026-07-19; не ОКТМО |
data[].dtregistry, data[].dtregistryout | строка ДД.ММ.ГГГГ ЧЧ:ММ:СС / отсутствует | dtregistry да; dtregistryout опц. | Дата включения и дата исключения; во включённой записи второго поля нет | нет | Ответы 2026-07-19: активная и исключённая записи |
data[].is_active, isnew | целое 0 / 1 | да в проверенном объекте | Признак активности и вновь созданного субъекта | нет | Ответ 2026-07-19 |
data[].okved1, okved1name | строка | да в проверенной записи | Основной ОКВЭД и его название | ОКВЭД | Ответ 2026-07-19; ОКВЭД |
data[].citytype, cityname | строка | опц. | Городская часть адреса; в примере г. и Сосновый Бор | нет | Ответ 2026-07-19 |
data[].has_licenses, has_contracts, is_hitech, is_partnership, pr_soc, is_pp | целые флаги | да в проверенной записи | Признаки, которые читает клиент; точная семантика has_contracts, pr_soc, is_pp без спецификации ТРЕБУЕТ ПРОВЕРКИ | нет | Ответ 2026-07-19 и клиентский JS |
data[].cnt | целое | да | В двух проверенных ответах совпал с общим rowCount | нет | Ответы 2026-07-19 |
data[].token | строка из hex-символов | да | Непрозрачный токен для ссылок на выписки/периоды | нет | Ответ 2026-07-19; не хранить как постоянный ключ |
queryTime | целое | да | Время запроса; интерфейс показывает его как секунды после деления на 1000 | нет | Ответ и search.js |
rowCount, rowLimit | целые | да | Число найденных строк и поле лимита; в запросах на 1 и 937 результатов rowLimit был 0 | нет | Ответы 2026-07-19 |
pageNav.pages, pageNav.pageSizes | массивы пар | да | Подпись страницы/размера и токен или null для активного варианта | нет | Ответ 2026-07-19 |
Ниже приведено тело с фактической записью; технические токены размеров страницы в последней строке сокращены, поскольку новый запрос выдаёт другие значения:
{
"dtQueryEnd": "19.07.2026 07:43:13",
"dtQueryBegin": "19.07.2026 07:43:13",
"data": [
{
"id": 1224700016750,
"ogrn": "1224700016750",
"inn": "4707048043",
"isnew": 0,
"category": 1,
"regioncode": "47",
"dtregistry": "10.10.2022 00:00:00",
"is_active": 1,
"nptype": "UL",
"okved1": "35.22",
"okved1name": "Распределение газообразного топлива по газораспределительным сетям",
"citytype": "г.",
"cityname": "Сосновый Бор",
"name_ex": "ПОТРЕБИТЕЛЬСКИЙ КООПЕРАТИВ \"РОМАШКА-ГАЗ\" ПО ОБСЛУЖИВАНИЮ ЖИЛЫХ ДОМОВ В СНТ \"РОМАШКА\"",
"has_licenses": 0,
"has_contracts": 0,
"is_hitech": 0,
"is_partnership": 0,
"pr_soc": 0,
"is_pp": 1,
"cnt": 1,
"token": "2BBFEE11186F3A1DB7E9DA5193609CE91FFB257E96DF1440990120EC4AB1DF34A0848F96AA92F3CE2F010AF34B9C6107"
}
],
"queryTime": 1,
"rowCount": 1,
"rowLimit": 0,
"pageNav": {
"pages": [["1", null]],
"pageSizes": [["5", "<opaque token>"], ["10", null], ["25", "<opaque token>"], ["50", "<opaque token>"], ["100", "<opaque token>"]]
}
}
В последней строке примера токены размеров намеренно сокращены: они являются техническими значениями текущей сессии и не нужны для воспроизводимого первого запроса. Для следующей страницы или размера берите токен из своего свежего pageNav, передавая его как page; не конструируйте токен.
C. XLSX-выгрузка
Кнопка «Экспорт в Excel» переводит текущую HTML-форму на POST /report.xlsx. Поля формы в результате поиска: mode, query, page, sortField, sort; формат body — application/x-www-form-urlencoded.
Однако реальная проверка выявила важное текущее ограничение. После обычного UI-поиска по 4707048043 экран показывал одну запись, но query в форме результата был пустым. Нажатие кнопки скачало rsmp_19.07.2026.xlsx с одним листом Лист1, размером 1 × 1: ячейка A1 — строка Единый реестр субъектов малого и среднего предпринимательства по состоянию на 19.07.2026. Табличного заголовка и строк данных в этом файле не было.
| Колонка (заголовок) | Порядок | Тип ячейки | Соответствует полю JSON/XML |
|---|---|---|---|
Титульная строка Единый реестр субъектов малого и среднего предпринимательства по состоянию на 19.07.2026 | A1 | строка | Дата — текущая дата формирования файла, не поле записи |
| Столбцы данных результата поиска | — | — | ТРЕБУЕТ ПРОВЕРКИ: в фактически скачанном XLSX их нет, поэтому нельзя достоверно назвать порядок или типы |
Не смешивайте это с HTML-таблицей результата: у неё подтверждены пять видимых колонок — «Наименование субъекта», «Категория», «Регион», «Дата включения в реестр», «Дата исключения из реестра». Они не подтверждают схему XLSX.
ТРЕБУЕТ ПРОВЕРКИ: максимально допустимое число строк XLSX. В UI подтверждены варианты размера одной страницы 5, 10, 25, 50, 100, но в короткой выдаче сообщения о лимите экспорта не было, а выгрузка не содержала строк.
Статистика
Раздел «Статистика» позволяет выбрать statDate из того же наблюдаемого ряда дат. UI отображает число субъектов, работников и продукции; таблицу РФ → федеральных округов → регионов; распределения по ЮЛ/ИП и категориям микро/малое/среднее; социальные и вновь созданные микро-предприятия; диаграммы динамики, численности работников и топ-10 ОКВЭД. Статистика отделена от построчного поиска.
Проверенный программный запрос:
POST https://rmsp.nalog.ru/statistics-proc.json
Content-Type: application/x-www-form-urlencoded
statDate=10.07.2026
возвращает JSON-массив. Первая строка РФ содержала, в частности, stat_date, cnt_level: 2, cnt_name: "Российская Федерация", cnt_total: 6612445, cnt_ul_total: 2022689, cnt_ip_total: 4589756, cnt_worker_total: 15093124; у строк округов есть focode/foname, у регионов — ssrf и name. Это пригодно для программного извлечения агрегатов. В клиентском коде также есть запросы диаграмм с level, fo, region, type=chartstat или chartokvedstat и запрос по продукции ?type=tru; их ответы в этой проверке отдельно не сняты — ТРЕБУЕТ ПРОВЕРКИ перед автоматизацией.
Ключи связки с другими данными
| Ключ | Поле в выдаче портала | С чем соединять | Примечание |
|---|---|---|---|
| ИНН | data[].inn | поставщик/заказчик в XML-выгрузках ЕИС, получатель в реестре субсидий, записи 7707329152-rsmp и 7707329152-rsmppp | Хранить строкой. ЮЛ — 10 цифр, ИП — 12; всегда проверять длину и nptype, не преобразовывать в число. |
| ОГРН | data[].ogrn для проверенной ЮЛ | ЕГРЮЛ, XML-набор 7707329152-rsmp | Альтернативный ключ только для ЮЛ; в проверенной строке 1224700016750. |
| ОГРНИП | поле ответа ИП ТРЕБУЕТ ПРОВЕРКИ | ЕГРИП и XML-набор 7707329152-rsmp | Портал принимает ОГРНИП в query, но JSON выдача ИП в этой проверке не снималась; не предполагайте имя поля. |
| ОКВЭД | data[].okved1, okved1name | ОКВЭД, отраслевые разрезы закупок и статистики | В проверенной строке 35.22; это основной код, не полный список дополнительных кодов XML. |
| Код региона | data[].regioncode, в статистике ssrf | региональные срезы, 7707329152-rsmp | Двухзначный код субъекта РФ (47 в примере), не ОКТМО. Для муниципального уровня нужна внешняя геокодировка. |
Периодичность обновления
На 2026-07-19 витрина показывала текущую дату 10.07.2026; в обоих селекторах были видны даты срезов по месяцам, начиная с 01.08.2016. Для расширенного поиска дата передаётся в dtCategory, для статистики — в statDate, обе в виде ДД.ММ.ГГГГ.
Это наблюдаемая публикационная последовательность, а не заявленное расписание. Для массовой исторической обработки сверяйте и скачивайте соседние ZIP-срезы 7707329152-rsmp: там дата среза находится в самом файле и в архиве, а не только в контроле UI.
Ограничения и особенности
- Пагинация выдачи основана на непрозрачных токенах
pageNav. В UI доступны5,10,25,50,100строк на странице. В проверенном поиске «Ромашка»rowCountбыл937, на первой странице — 10 объектов; следующий переход требует токена из ответа. - Лимит строк
report.xlsxи полный перечень XLSX-колонок ТРЕБУЮТ ПРОВЕРКИ: UI-экспорт фактической однострочной выборки выдал только заголовок реестра. Не строить массовый процесс на этом экспорте. - Сервер постоянно устанавливает
JSESSIONID; поиск и статистика сcurlработали без заранее сохранённой сессии и без специальногоUser-Agent. Требование сохранять cookie для XLSX, лимиты запросов и допустимая частота не опубликованы наdevelopers.htmlи ТРЕБУЮТ ПРОВЕРКИ нагрузочным тестом/официальным разъяснением. - CAPTCHA или отдельный anti-bot-челлендж не появились в проверенных браузерных действиях и HTTP-запросах. Это наблюдение, а не гарантия отсутствия защиты для других объёмов или IP.
- Для снятых HTML и JSON-ответов кодировка — UTF-8; заголовка
Content-Encodingне было. XLSX — бинарный Office Open XML;Content-Lengthу проверенных XLSX не передан, использованTransfer-Encoding: chunked. - В подтверждённой JSON-строке нет КПП, ОКТМО и полного почтового адреса: есть только городские компоненты. Глобальное отсутствие этих полей в недокументированной JSON-схеме ТРЕБУЕТ ПРОВЕРКИ; в XML-наборе 7707329152-rsmp КПП, ОКТМО и полный адрес также не публикуются.
- Не используйте счётчик главной,
rowCountрезультата или предполагаемый Excel как контроль точного объёма полного реестра. Для сверки считайте XML самостоятельно. Численное расхождение счётчиков портала и файлового набора на одну дату в этой проверке не установлено. - Не подменяйте принадлежность к МСП фактом получения поддержки: 7707329152-rsmppp и rmsp-pp.nalog.ru описывают меры поддержки, а не критерий включения в реестр МСП.
Что говорит страница «Разработчикам»
Проверенная developers.html не публикует HTTP-спецификацию search-proc.json, лимит запросов, обязательный User-Agent, список заголовков или правила anti-bot. На ней указаны:
- сервис СМЭВ 3.X «Предоставление сведений из реестра малого и среднего предпринимательства…», зарегистрированный в продуктивной среде 25.08.2016;
- ссылка на каталог открытых данных ФНС
https://www.nalog.gov.ru/opendata/; - три архива описаний форматов файлового реестра:
fns-rrmsp406.zip,VO_RRMSPSV_2_213_04_04_06.zip,VO_SVRRMSPSV_2_213_02_04_08.zipнаdata.nalog.ru.
Следовательно, это полезный маршрут к официальным файловым контрактам и СМЭВ, но не документ для безопасной интеграции с внутренними JSON-обработчиками витрины.
Примеры доступа
Команды и код ниже исполнены 2026-07-19. Поиск выполняется по публичной записи ЮЛ с ИНН 4707048043; он выбран для воспроизводимости, а не как рекомендация использовать этот субъект в анализе.
Проверка доступности главной без авторизации:
curl -sI 'https://rmsp.nalog.ru/' | head -n 7
Проверенный признак — HTTP/1.1 200, Content-Type: text/html;charset=utf-8, Set-Cookie: JSESSIONID=… и Transfer-Encoding: chunked.
Программный поиск. curl сам задаёт Content-Type: application/x-www-form-urlencoded при --data-urlencode:
curl -sS -X POST 'https://rmsp.nalog.ru/search-proc.json' \
--data-urlencode 'mode=quick' \
--data-urlencode 'query=4707048043' \
--data-urlencode 'sortField=NAME_EX' \
--data-urlencode 'sort=ASC'
Сокращённый фактический результат: rowCount: 1, data[0].inn: "4707048043", data[0].ogrn: "1224700016750", data[0].category: 1, data[0].regioncode: "47", data[0].okved1: "35.22"; полный пример тела приведён выше. Не передавайте старые pageNav-токены в новый запрос.
Потоковый разбор массива data и плоский CSV ключевых полей (Python 3.12 standard library; код исполнен против ответа выше):
import csv
import json
import sys
from urllib.parse import urlencode
from urllib.request import Request, urlopen
payload = urlencode({
"mode": "quick",
"query": "4707048043",
"sortField": "NAME_EX",
"sort": "ASC",
}).encode("utf-8")
request = Request(
"https://rmsp.nalog.ru/search-proc.json",
data=payload,
headers={"Content-Type": "application/x-www-form-urlencoded"},
method="POST",
)
fields = ["inn", "ogrn", "name_ex", "category", "regioncode", "dtregistry", "okved1"]
writer = csv.DictWriter(sys.stdout, fieldnames=fields)
writer.writeheader()
json_decoder = json.JSONDecoder()
marker = '"data":['
buffer = ""
inside_data = False
with urlopen(request, timeout=30) as response:
while chunk := response.read(8192):
buffer += chunk.decode("utf-8")
if not inside_data:
marker_at = buffer.find(marker)
if marker_at < 0:
buffer = buffer[-(len(marker) - 1):]
continue
buffer = buffer[marker_at + len(marker):]
inside_data = True
while inside_data:
buffer = buffer.lstrip()
if buffer.startswith("]"):
inside_data = False
break
try:
row, parsed_to = json_decoder.raw_decode(buffer)
except json.JSONDecodeError:
break
writer.writerow({field: row.get(field) for field in fields})
buffer = buffer[parsed_to:].lstrip()
if buffer.startswith(","):
buffer = buffer[1:]
elif buffer.startswith("]"):
inside_data = False
break
else:
break
Вывод проверки:
inn,ogrn,name_ex,category,regioncode,dtregistry,okved1
4707048043,1224700016750,"ПОТРЕБИТЕЛЬСКИЙ КООПЕРАТИВ ""РОМАШКА-ГАЗ"" ПО ОБСЛУЖИВАНИЮ ЖИЛЫХ ДОМОВ В СНТ ""РОМАШКА""",1,47,10.10.2022 00:00:00,35.22
Проверка XLSX, уже скачанного браузером. Код использует openpyxl==3.1.5, исполняется и безопасно сообщает о фактическом «титульном» файле; если портал начнёт отдавать таблицу, он нормализует даты в ISO, идентификаторы оставляет строками и создаёт pandas.DataFrame.
import sys
from datetime import date, datetime
from pathlib import Path
import pandas as pd # pandas==2.2.3
from openpyxl import load_workbook # openpyxl==3.1.5
path = Path(sys.argv[1])
workbook = load_workbook(path, read_only=True, data_only=True)
sheet = workbook[workbook.sheetnames[0]]
rows = list(sheet.iter_rows(values_only=True))
if len(rows) == 1 and len(rows[0]) == 1:
raise SystemExit(f"XLSX содержит только титул, без строк данных: {rows[0][0]!r}")
def normalize(value):
if isinstance(value, datetime):
return value.isoformat(sep=" ")
if isinstance(value, date):
return value.isoformat()
return value if value is None or isinstance(value, (int, float)) else str(value).strip()
headers = [normalize(value) for value in rows[1]]
records = [dict(zip(headers, map(normalize, row))) for row in rows[2:]]
frame = pd.DataFrame.from_records(records)
print(frame.dtypes)
print(frame.head(3).to_csv(index=False))
Запуск против фактически полученного файла завершается сообщением XLSX содержит только титул, без строк данных: 'Единый реестр субъектов малого и среднего предпринимательства по состоянию на 19.07.2026'. Это намеренный fail-fast: не интерпретировать титульную строку как набор данных.
Склейка результата поиска с внешней таблицей по ИНН (Python 3.12, pandas==2.2.3). Скрипт принимает два CSV: сначала результаты поиска, затем внешние данные; проверяет дубли ИНН в справочнике и использует validate="m:1".
import sys
import pandas as pd
subjects = pd.read_csv(sys.argv[1], dtype={"inn": "string"})
external = pd.read_csv(sys.argv[2], dtype={"inn": "string"})
for name, frame in {"subjects": subjects, "external": external}.items():
if "inn" not in frame:
raise ValueError(f"{name}: нет колонки inn")
frame["inn"] = frame["inn"].str.strip()
if frame["inn"].isna().any() or (~frame["inn"].str.fullmatch(r"\d{10}|\d{12}")).any():
raise ValueError(f"{name}: некорректный ИНН")
if subjects["inn"].duplicated().any():
raise ValueError("subjects: дубли ИНН; сначала выберите один срез/одну запись на субъект")
joined = external.merge(
subjects[["inn", "ogrn", "name_ex", "category", "regioncode", "okved1"]],
on="inn",
how="left",
validate="m:1",
)
joined.to_csv(sys.stdout, index=False)
Сводка для машинной обработки
primary_url: "https://rmsp.nalog.ru/"
search_endpoint:
method: "POST"
url: "https://rmsp.nalog.ru/search-proc.json"
content_type: "application/x-www-form-urlencoded; response application/json;charset=UTF-8"
formats: ["html", "xlsx", "json"]
update_cadence: "наблюдаемые ежемесячные срезы; текущий 10.07.2026 на проверку 19.07.2026"
join_keys: ["inn", "ogrn", "ogrnip (ТРЕБУЕТ ПРОВЕРКИ в JSON ИП)", "okved1", "region_code"]
xlsx_export:
method: "POST"
url: "https://rmsp.nalog.ru/report.xlsx"
row_limit: "ТРЕБУЕТ ПРОВЕРКИ"
verified_workbook: "Лист1; A1 — только титульная строка, без таблицы"
columns: "ТРЕБУЕТ ПРОВЕРКИ"
date_slice_param:
search: "dtCategory (ДД.ММ.ГГГГ)"
statistics: "statDate (ДД.ММ.ГГГГ)"
statistics_endpoint: "POST https://rmsp.nalog.ru/statistics-proc.json"
archive_depth: "селектор дат: 01.08.2016 … 10.07.2026, наблюдение 2026-07-19"
Связанные страницы wiki
- Единый реестр субъектов МСП (7707329152-rsmp) — файловые XML-срезы того же реестра; правильный выбор для массовой загрузки и полной схемы полей.
- Единый реестр получателей поддержки МСП (7707329152-rsmppp) — данные о мерах поддержки; ИНН позволяет сопоставить их с субъектом МСП, но это другой факт.
- XML-выгрузки ЕИС — ИНН поставщика или заказчика можно нормализовать и соединить с найденным субъектом.
- Реестр субсидий — сопоставление получателя с субъектом МСП по строковому ИНН.
- ЕГРЮЛ — проверка реквизитов ЮЛ по ОГРН/ИНН; дополняет краткую выдачу витрины.
- Единый реестр получателей поддержки МСП (ИС) — другой поддомен, где предметом являются меры поддержки.
- ИНН, ОГРН, ОКВЭД, ОКТМО — правила идентификаторов, отраслевого кода и различие кода региона с муниципальным кодом.
- Сайт ФНС России — статистика и данные — родительская информационная система публичных сервисов ФНС.
- ФНС России — оператор витрины и публикатор сведений.
Не путать с
- Единый реестр получателей поддержки МСП (
rmsp-pp.nalog.ru) — показывает факты мер поддержки, а не саму принадлежность организации/ИП к МСП. - Набор 7707329152-rsmp — тот же предметный реестр, но канал официальных ZIP/XML-выгрузок, а не интерактивная витрина и её недокументированные JSON-обработчики.
Частые вопросы
В: Чем эта витрина отличается от 7707329152-rsmp?
О: Это один реестр, но разные каналы. rmsp.nalog.ru даёт UI-поиск, исторический выбор даты и агрегаты; 7707329152-rsmp — полный файловый XML-срез с XSD, пригодный для массовой обработки.
В: Как выбрать исторический срез?
О: В расширенной форме выберите дату состояния категории МСП: браузер отправляет её как dtCategory в формате ДД.ММ.ГГГГ. В статистике используется отдельный параметр statDate. На дату проверки селекторы содержали даты от 01.08.2016 до 10.07.2026.
В: Можно ли программно выгрузить весь реестр из этой витрины в Excel?
О: Не следует рассчитывать на это. Публично подтверждён стабильный JSON-поиск по выборке, но не полный репликационный API; проверенный UI-XLSX даже для одной найденной записи отдал только титул без данных. Для полного реестра берите 7707329152-rsmp.
В: Какой ключ брать для склейки?
О: Основной ключ — строковый ИНН (10 цифр для ЮЛ, 12 для ИП), с проверкой типа субъекта. ОГРН полезен как дополнительный ключ только для ЮЛ; код региона не является ОКТМО.