Setting Up Tender Tracking in Bitrix24 CRM
A tender manager works in three systems simultaneously: EIS (zakupki.gov.ru), SBIS or Kontur.Tender for monitoring, and Excel spreadsheets to track statuses. Bitrix24 CRM plays no part in this workflow. The goal is to make CRM the central hub: tenders flow in automatically, statuses are updated, and the manager works in a single interface.
Tender Data Model in CRM
Instead of standard deals, we use Bitrix24 Smart Processes (available from the Standard plan) — this lets us create a separate "Tender" entity with its own pipeline, without mixing it with regular sales.
Smart Process "Tender" fields:
| Field | Type | Purpose |
|---|---|---|
Registry Number |
String | Procurement number in EIS / on the platform |
IKZ |
String | Procurement identification code |
NMCK |
Money | Initial maximum price |
Our Price |
Money | Our bid price |
Platform |
List | ETP, Sberbank-AST, RTS-tender, etc. |
Procurement Type |
List | Auction, competition, quotation, sole supplier |
Law |
List | 44-FZ, 223-FZ, commercial |
Application Deadline |
Date/Time | Deadline |
Results Date |
Date | |
Contract Number |
String | After winning |
Contract Amount |
Money | Final |
Rejection Reason |
List + text | On loss |
EIS Link |
URL |
Automatic Tender Collection
Option 1: Aggregator APIs. Kontur.Zakupki, Tenderplan, OTC.ru provide search APIs by keywords and OKPD2 codes. Retrieve results and create Smart Process items.
Option 2: EIS RSS Monitoring. Free but limited — only basic fields. Parse RSS and create a tender in CRM:
class TenderMonitorAgent
{
private array $searchQueries = [
'server supply OKPD2 26.20',
'IT services software development',
];
private string $smartProcessEntityTypeId = '183'; // ID of the "Tender" Smart Process
public function run(): void
{
foreach ($this->searchQueries as $query) {
$tenders = $this->fetchFromEis($query);
foreach ($tenders as $tender) {
if ($this->alreadyExists($tender['number'])) {
continue;
}
$this->createCrmItem($tender);
}
}
}
private function createCrmItem(array $tender): void
{
\Bitrix\Crm\Item\Factory\SmartProcessItemFactory::getInstance(
(int)$this->smartProcessEntityTypeId
)->create([
'TITLE' => $tender['name'],
'STAGE_ID' => 'DT' . $this->smartProcessEntityTypeId . ':NEW',
'UF_CRM_TENDER_NUMBER' => $tender['number'],
'UF_CRM_TENDER_NMCK' => $tender['price'],
'UF_CRM_TENDER_DEADLINE' => \Bitrix\Main\Type\DateTime::createFromTimestamp(
strtotime($tender['deadline'])
),
'UF_CRM_TENDER_URL' => $tender['url'],
'UF_CRM_TENDER_LAW' => '44-FZ',
'ASSIGNED_BY_ID' => $this->getDefaultManager(),
])->save();
}
}
Automatic Reminders and Deadlines
Bitrix24 robots (no coding, configured through the interface):
When a tender is created:
- Task for the responsible manager: "Review technical specification"
- Email reminder 5 days before the application deadline
When transitioning to "Application Preparation" stage:
- Task: "Prepare technical section"
- Task: "Compile document package"
- Task date = Application Deadline minus 2 days
When transitioning to "Win" stage:
- Task: "Sign contract through the platform" (deadline: +10 days)
- Notification to the supervisor
Automatic deadlines via PHP for complex logic:
AddEventHandler('crm', 'OnCrmSmartProcessItemUpdate', function(\Bitrix\Crm\Item $item) {
if ($item->getEntityTypeId() !== 183) return; // Tenders only
$stageId = $item->getStageId();
if ($stageId === 'DT183:WON') {
// Win — create contract execution tasks
$deadline = (new \DateTime())->modify('+30 days'); // 30 days to sign contract
\CTaskItem::add([
'TITLE' => 'Sign contract through EIS',
'RESPONSIBLE_ID' => $item->getAssignedById(),
'DEADLINE' => $deadline->format('d.m.Y H:i:s'),
'DESCRIPTION' => 'Contract signing deadline under 44-FZ — 30 days',
'UF_CRM_TASK' => ['T' . $item->getId()],
], 1);
}
});
Tender Analytics
CRM reports show: conversion funnel (applications → wins), average percentage reduction from NMCK in won tenders, performance by procurement type and platform. The standard Bitrix24 analytics works with Smart Process fields without additional configuration.
A custom widget on the CRM homepage — a summary of active tenders with upcoming deadlines:
// Widget: tenders with a deadline within the next 7 days
$urgentTenders = \Bitrix\Crm\SmartProcess\Query::create(183)
->addSelect(['ID', 'TITLE', 'UF_CRM_TENDER_NMCK', 'UF_CRM_TENDER_DEADLINE'])
->addFilter(['<=UF_CRM_TENDER_DEADLINE' => (new \DateTime())->modify('+7 days')])
->addFilter(['!STAGE_SEMANTIC_ID' => 'F']) // exclude final stages
->addOrder('UF_CRM_TENDER_DEADLINE', 'ASC')
->exec()
->fetchAll();
Scope of Work
- Creating the "Tender" Smart Process with custom fields
- Tender stage pipeline
- EIS monitoring agent or aggregator API integration
- Robots for auto-tasks and reminders
- Reports and deadline widget
Timeline: 1–2 weeks for CRM setup without integrations. 3–5 weeks with automatic tender collection.







