Тендери Prozorro на Python: аналітика замовників і переможців
Оновлено 26.09.2026
Аналітик ринку публічних закупівель, менеджер з тендерів чи керівник продажів у компанії, що працює з державою, ставлять схожі питання. Хто з конкурентів виграє найбільше і на які суми? Які замовники купують наш тип товарів? Чи зростає частка наших перемог? Відповіді лежать у Prozorro, але збирати їх вручну довго. Initask API за кодом ЄДРПОУ повертає підсумок участі організації в закупівлях і перелік її тендерів запитом `GET https://dani.initask.com/v1/company/{edrpou}/tenders`, і скрипт на Python збирає дані для десятків компаній за раз.
Базовий запит
```python import os, requests
r = requests.get( "https://dani.initask.com/v1/company/42062483/tenders?role=buyer&limit=3", headers={"Authorization": f"Bearer {os.environ['INITASK_KEY']}"}, timeout=10, ) body = r.json() print(r.headers["X-RateLimit-Remaining"], body["data"]) ```
Ключ береться зі змінної середовища `INITASK_KEY`. Без ключа доступно 100 запитів на добу з однієї IP-адреси.
Підсумок і перелік
Відповідь складається з двох частин. Підсумок дає кількість тендерів як замовник і їхню очікувану суму, кількість перемог як учасник і суму перемог, а також посилання на сторінки замовника і учасника. Для коду 42062483 це вісім тендерів як замовник з очікуваною сумою 294448 гривень і нуль перемог.
Перелік залежить від параметра `role`. Значення `buyer` повертає тендери, які організація оголосила як замовник, `winner` тендери, які вона виграла. Без параметра береться `buyer`. Параметр `limit` задає кількість від 1 до 200, без нього 50. Поле `total` показує, скільки всього тендерів у цій ролі, навіть якщо в переліку лише частина.
| Що є в тендері | Навіщо аналітику |
|---|---|
| номер тендера в Prozorro | ключ для обʼєднання даних |
| назва закупівлі | фільтр за асортиментом |
| статус у Prozorro | відбір завершених закупівель |
| очікувана сума замовника або сума перемоги | обсяг ринку |
| дата оголошення або перемоги | динаміка за місяцями |
| сторінка тендера | перехід до деталей |
Аналіз конкурентів
Скрипт отримує список кодів конкурентів і для кожного запитує `role=winner` з максимальним `limit`. Далі дані зводяться в таблицю: компанія, кількість перемог, сума перемог, перемоги за останній рік. Поле `date` дозволяє розкласти перемоги за місяцями і побачити, хто росте, а хто втрачає позиції. Назви закупівель показують, у яких саме сегментах працює кожен конкурент.
Аналіз замовників
Для відділу продажів корисніший інший зріз: замовники. Скрипт запитує `role=buyer` для списку замовників у вашому регіоні чи галузі і відбирає закупівлі, назви яких відповідають вашому асортименту. Замовники, які регулярно купують ваш тип товарів на помітні суми, стають пріоритетом для відділу продажів.
Коли даних більше за ліміт переліку
Перелік обмежений 200 тендерами за запит. Для великих замовників і переможців поле `total` може бути більшим. Підсумкові суми при цьому рахуються за всіма завантаженими тендерами, тому для загальної оцінки підсумку досить. Детальний перелік понад 200 найсвіжіших тендерів краще дивитися на сторінках замовника і учасника за посиланнями з відповіді.
Помилки
| Код відповіді | Коли | Що робити |
|---|---|---|
| 400 | код має довжину, відмінну від 5-8 або 10 цифр, role поза buyer і winner або limit поза 1-200 | виправити параметри |
| 429 | вичерпано ліміт | зачекати час із заголовка Retry-After |
Нулі в підсумку означають, що в завантажених тендерах організація не була ні замовником, ні переможцем. Назва тоді дорівнює null, а перелік порожній. Для такого рядка скрипт має записати нулі, без помилки.
Інколи перелік тимчасово недоступний, і поле `items` приходить як null замість переліку. Скрипт має відрізняти це від порожнього переліку і повторити запит пізніше.
Ліміти
| План | Запитів | Ціна, грн на місяць |
|---|---|---|
| Безкоштовний | 100 на добу | 0 |
| Старт | 10000 на місяць | 990 |
| Про | 100000 на місяць | 2990 |
Відповідь кешується на 10 хвилин. Для щомісячного аналізу кількох десятків конкурентів і замовників вистачає безкоштовного плану.
Що робити
- Запустіть приклад і подивіться підсумок і перелік.
- Складіть список кодів конкурентів і зберіть їхні перемоги з `role=winner`.
- Для замовників у вашій ніші зберіть закупівлі з `role=buyer` і відфільтруйте за асортиментом.
- Коди за назвами знаходьте через пошук компаній, картки через API ЄДРПОУ.
- Опис полів у документації тендерів, тарифи на сторінці Ціни і ліміти.
Питання і відповіді
Як отримати перемоги компанії в Prozorro через Python?
Запит requests.get до https://dani.initask.com/v1/company/{edrpou}/tenders з параметром role=winner повертає перемоги з сумою договору і датою, limit задає до 200 тендерів.
Чому items дорівнює null?
Перелік тимчасово недоступний. Це відрізняється від порожнього переліку, і запит варто повторити пізніше.
Звідки дані про тендери?
З відкритого API Prozorro: сервіс tender.initask.com завантажує тендери і рахує підсумки за кодом замовника і переможця.