Setting up employee performance assessment in Bitrix24

Our company is engaged in the development, support and maintenance of Bitrix and Bitrix24 solutions of any complexity. From simple one-page sites to complex online stores, CRM systems with 1C and telephony integration. The experience of developers is confirmed by certificates from the vendor.
Our competencies:
Development stages
Latest works
  • image_website-b2b-advance_0.png
    B2B ADVANCE company website development
    1173
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Website development for FIXPER company
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Development based on Bitrix, Bitrix24, 1C for the company Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Development based on 1C Enterprise for MIRSANBEL
    745
  • image_crm_dolbimby_434_0.webp
    Website development on CRM Bitrix24 for DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Development based on Bitrix24 for the company TECHNOTORGKOMPLEKS
    976

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:

  1. Call plan — Activities → Calls → daily/weekly plan per employee
  2. Meeting plan — Activities → Meetings
  3. Lead-to-deal conversion — calculated automatically from the funnel
  4. 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.