Setting Up a Tender Sales Pipeline in Bitrix24
Tender sales are a process governed by strict regulations, multiple stages, and specific deadlines. The standard Bitrix24 sales pipeline was designed for B2B deals where a manager moves a client from first contact to payment. A tender works differently: there is a preparatory phase (requirements analysis, cost calculation), a participation phase (bid submission, auction), and contract execution. Three distinct processes — three separate pipelines, or one extended one.
Architectural Choice: One Pipeline or Several
One pipeline with all stages is convenient for reporting, but results in 15–20 stages. An overly complex pipeline causes managers to stop maintaining it carefully.
Multiple pipelines (smart processes or separate deal categories):
- "Tender Analytics" — new procurement opportunities, analysis, participation decision
- "Tender Participation" — bid preparation, auction, awaiting results
- "Contract Execution" — created upon winning, a separate cycle
For most companies with a tender department of 3–10 people, a single "Tender" smart process with 8–12 stages is sufficient.
Pipeline Stages
NEW
→ ANALYSIS (reviewing requirements, cost calculation)
→ DECLINED TO PARTICIPATE (final — withdrew before submission)
→ BID PREPARATION
→ BID SUBMITTED
→ AUCTION/TRADING (if applicable)
→ AWAITING RESULTS
→ LOST (final — did not win)
→ WON
→ CONTRACT SIGNING
→ CONTRACT EXECUTION
→ CONTRACT COMPLETED (final — success)
→ TERMINATED (final — failure)
Stage semantics:
-
FAIL(red) — Declined to Participate, Lost, Terminated -
SUCCESS(green) — Contract Completed -
IN_PROCESS(all others)
Creating the Pipeline via API
// Creating stages for a smart process (entityTypeId = 183)
$stages = [
['NAME' => 'New', 'SORT' => 10, 'COLOR' => '#BBBBBB', 'SEMANTICS' => 'P'],
['NAME' => 'Analysis', 'SORT' => 20, 'COLOR' => '#47ADE3', 'SEMANTICS' => 'P'],
['NAME' => 'Bid Preparation', 'SORT' => 30, 'COLOR' => '#FFA900', 'SEMANTICS' => 'P'],
['NAME' => 'Bid Submitted', 'SORT' => 40, 'COLOR' => '#00C4FB', 'SEMANTICS' => 'P'],
['NAME' => 'Auction/Trading', 'SORT' => 50, 'COLOR' => '#9DCF00', 'SEMANTICS' => 'P'],
['NAME' => 'Awaiting Results', 'SORT' => 60, 'COLOR' => '#ADB7C2', 'SEMANTICS' => 'P'],
['NAME' => 'Won', 'SORT' => 70, 'COLOR' => '#00C4FB', 'SEMANTICS' => 'P'],
['NAME' => 'Contract Signing', 'SORT' => 80, 'COLOR' => '#47ADE3', 'SEMANTICS' => 'P'],
['NAME' => 'Execution', 'SORT' => 90, 'COLOR' => '#47ADE3', 'SEMANTICS' => 'P'],
// Final stages
['NAME' => 'Contract Completed', 'SORT' => 110, 'COLOR' => '#7BD500', 'SEMANTICS' => 'S'],
['NAME' => 'Lost', 'SORT' => 120, 'COLOR' => '#FF5752', 'SEMANTICS' => 'F'],
['NAME' => 'Declined to Participate', 'SORT' => 130, 'COLOR' => '#FF8F61', 'SEMANTICS' => 'F'],
['NAME' => 'Terminated', 'SORT' => 140, 'COLOR' => '#FF5752', 'SEMANTICS' => 'F'],
];
foreach ($stages as $stage) {
\Bitrix\Crm\PhaseSemantics\SmartProcessStageTable::add(array_merge(
$stage,
['ENTITY_TYPE_ID' => 183, 'CATEGORY_ID' => 0]
));
}
Robots at Key Stages
On transition to "Bid Preparation", automatically:
- Task "Analyze Technical Requirements" (deadline: 2 days)
- Task "Calculate Cost and Margin" (deadline: 3 days)
- Task "Prepare Documents" (deadline: 2 days before bid submission deadline)
- Notification to the tender specialist
On transition to "Bid Submitted":
- Task "Monitor Results" (date: results announcement date)
- Email to the client confirming participation (if required)
On transition to "Won":
- Task "Agree and Sign Contract" (deadline: 10 days)
- Notification to the manager and CFO
- Creation of a linked "Contract" deal in a separate pipeline (optional)
AddEventHandler('crm', 'OnCrmSmartProcessItemUpdate', function(\Bitrix\Crm\Item $item) {
if ($item->getEntityTypeId() !== 183) return;
if (!$item->isChangedStageId()) return;
$newStage = $item->getStageId();
if (!str_contains($newStage, ':WON') && !str_contains($newStage, 'VICTORY')) {
return;
}
// Won — create execution tasks
$taskList = [
['Sign contract via platform', '+10 days'],
['Obtain bank guarantee (if required)', '+15 days'],
['Draft contract execution plan', '+5 days'],
];
foreach ($taskList as [$title, $offset]) {
$deadline = (new \DateTime())->modify($offset);
\CTaskItem::add([
'TITLE' => $title,
'RESPONSIBLE_ID' => $item->getAssignedById(),
'CREATED_BY' => 1,
'DEADLINE' => $deadline->format('d.m.Y H:i:s'),
'GROUP_ID' => TENDER_GROUP_ID,
'UF_CRM_TASK' => ['T' . $item->getId()],
], 1);
}
});
KPIs and Pipeline Analytics
Standard tender department metrics tracked through CRM:
| Metric | How It Is Calculated |
|---|---|
| Participation → win conversion | (Wins / Bids Submitted) × 100% |
| Average % reduction of NMCC | (NMCC − Our Price) / NMCC |
| Reasons for losses | Distribution by the "Reason for Decline" field |
| Portfolio value (active contracts) | Sum of "Contract Amount" field in the "Execution" stage |
| Overdue deadlines | Number of tenders with overdue "Bid Submission Date" field |
This data is available in standard Bitrix24 analytics without any customisation — it is simply a matter of filling in the fields correctly.
Required Fields per Stage
Required fields on stage transitions are configured in the smart process settings:
- "Analysis" → "Bid Preparation": "Our Price" and "Responsible for Preparation" must be filled
- "Won" → "Contract Signing": "Contract Number" must be filled
- "Execution" → "Contract Completed": "Act Date" and "Contract Amount" must be filled
This prevents transitions without key data.
Scope of Work
- Creating the "Tender" smart process or configuring a separate deal category
- 12–15 stages with semantics and colours
- Custom fields (IKZ, NMCC, platform, procurement law, reason for decline)
- Robots and tasks on key transitions
- Required fields on stage change
- Report and analytics configuration
Timeline: 1–2 weeks for a basic pipeline with fields and robots. 3–4 weeks including EIS integration and full analytics.







