Configuring Employee Performance Evaluation in Bitrix24
The built-in Bitrix24 tools for employee evaluation are spread across several sections: task reports, KPIs in CRM, time tracking, and plan-vs-actual deal analysis. The problem is that this data is fragmented — a sales manager sees their own deals, a supervisor reviews tasks separately, and there is no consolidated picture. Configuration means building a unified system where KPIs are calculated automatically and visible to all relevant stakeholders.
Bitrix24 Evaluation Tools
Tasks and projects — the baseline metric: number of completed tasks, on-time completion rate, and efficiency via the "Employee Tasks" report (/tasks/report/). Standard indicators are available without additional setup, but task structure must be organized correctly.
KPIs in CRM — the built-in Goals module (/crm/plan/). Allows setting targets for:
- number of calls, emails, meetings (activities)
- number of deals at each funnel stage
- deal amount (sales plan)
Configuration: CRM → Analytics → Plans. Period — day, week, month. Responsible — a specific employee or department.
Time tracking — the Time Tracking module (/company/personal/user/{id}/timeman/). Records the start/end of the workday, absences, and breaks. Data is available via REST API: timeman.status, timeman.day.get.
Activity stream and ratings — the ability to rate tasks upon completion. Enabled in task settings: "Request rating". Data is aggregated in the "Ratings" report.
Setting Up KPIs in CRM: Step by Step
The minimum working KPI set for a sales department:
- Call plan — Activities → Calls → daily/weekly plan per employee
- Meeting plan — Activities → Meetings
- Lead-to-deal conversion — calculated automatically from the funnel
- Revenue plan — Deals → Budget → monthly plan
Configuration via the interface: CRM → Analytics → Plans → Add Plan. Specify:
- Entity type (leads, deals, activities)
- Period
- Target values per employee
- Funnel (if multiple funnels exist)
Plan data is stored in tables b_crm_act_stat, b_crm_deal and aggregated via REST:
// Retrieving call actuals via Bitrix24 REST API
$result = \CRest::call('crm.activity.list', [
'filter' => [
'RESPONSIBLE_ID' => $userId,
'TYPE_ID' => 2, // 2 = call
'>=CREATED' => date('Y-m-d', strtotime('first day of this month')),
'<=CREATED' => date('Y-m-d'),
],
'select' => ['ID', 'CREATED', 'COMPLETED'],
]);
$callCount = count($result['result']);
Setting Up Automated Reports for Management
CRM robots (triggers) allow sending a summary without additional development. However, a custom handler is required for a full-featured report.
// Agent for daily report — added via b_agent
function SendDailyKpiReport(): string
{
$userIds = [1, 5, 7, 12]; // Manager IDs
foreach ($userIds as $userId) {
$report = buildKpiReport($userId);
sendReportNotification($userId, $report);
}
// Return function name for re-scheduling
return 'SendDailyKpiReport();';
}
function buildKpiReport(int $userId): array
{
$today = date('Y-m-d');
// Calls for the day
$calls = \CRest::call('crm.activity.list', [
'filter' => ['RESPONSIBLE_ID' => $userId, 'TYPE_ID' => 2, '>=CREATED' => $today],
]);
// Closed deals
$deals = \CRest::call('crm.deal.list', [
'filter' => [
'ASSIGNED_BY_ID' => $userId,
'STAGE_ID' => 'WON',
'>=CLOSEDATE' => $today,
],
'select' => ['ID', 'OPPORTUNITY'],
]);
$revenue = array_sum(array_column($deals['result'] ?? [], 'OPPORTUNITY'));
return [
'calls' => count($calls['result'] ?? []),
'deals' => count($deals['result'] ?? []),
'revenue' => $revenue,
];
}
Visualization: Manager Dashboard
The standard Bitrix24 dashboard (/crm/analytics/) displays:
- Sales funnel by manager
- Plan vs. actual comparison
- Employee ranking by revenue
For advanced analytics — the BI Builder (Bitrix24 Professional plan and above). Accessed via Analytics → BI Builder. Allows building custom reports on top of CRM data through a SQL-like interface.
If the BI Builder is unavailable (on-premise edition) — build reports via D7:
$result = \Bitrix\Crm\DealTable::getList([
'select' => ['ASSIGNED_BY_ID', 'CNT', 'TOTAL' => 'OPPORTUNITY_SUM'],
'filter' => [
'STAGE_SEMANTIC_ID' => 'S', // S = successful
'>=CLOSEDATE' => new \Bitrix\Main\Type\Date('2024-03-01'),
],
'runtime' => [
new \Bitrix\Main\ORM\Fields\ExpressionField('CNT', 'COUNT(*)'),
new \Bitrix\Main\ORM\Fields\ExpressionField('OPPORTUNITY_SUM', 'SUM(%s)', 'OPPORTUNITY'),
],
'group' => ['ASSIGNED_BY_ID'],
'order' => ['OPPORTUNITY_SUM' => 'DESC'],
]);
Task Ratings: Configuration and Data Collection
For non-typical roles (developers, designers, operations staff) KPIs are built on tasks rather than CRM.
Enabling rating requests upon task completion — via task templates or by default for a project. Configuration: Tasks → Templates → Request Rating.
Aggregating ratings via REST:
$ratings = \CRest::call('task.item.getlist', [
'order' => ['CREATED_DATE' => 'ASC'],
'filter' => [
'RESPONSIBLE_ID' => $userId,
'STATUS' => 5, // completed
'>=CREATED_DATE' => date('Y-m-01'),
],
'select' => ['ID', 'TITLE', 'MARK'], // MARK = rating (G/N/B)
]);
$marks = array_column($ratings['result'] ?? [], 'MARK');
$good = count(array_filter($marks, fn($m) => $m === 'G'));
$total = count(array_filter($marks, fn($m) => $m !== ''));
$score = $total > 0 ? round($good / $total * 100) : null;
Scope of Work
- Audit of current CRM structure: funnels, activity types, fields
- Configuration of activity and deal plans for each department
- Setup of time tracking and absence rules
- Development of a daily/weekly KPI summary agent via notifications
- Manager dashboard: standard or BI Builder-based
- Permission setup: who can see whose metrics
Timeline: basic KPI configuration in CRM — 1 week. Full system with automated reports and dashboards — 2–4 weeks.







