Developing Custom Bitrix24 Project Dashboards
The built-in project analytics in Bitrix24 shows basic metrics: task counts, statuses, and a Gantt chart. For operational oversight at the level of a project office director or portfolio manager, this is insufficient — what is needed is an aggregated view across all projects with custom metrics, trends, and deviation alerts.
What Standard Analytics Does Not Show
Typical gaps in Bitrix24's built-in project reports:
- No comparison of planned vs. actual progress over time
- No burndown/burnup metrics for sprints
- No visualization of workload distribution across team members
- No combined dashboard spanning multiple projects simultaneously
- No alerts when deviations from plan occur
Data Sources for a Custom Dashboard
Project and task data from Bitrix24 is available via the REST API:
// List of project tasks with details
$tasks = CRest::call('tasks.task.list', [
'filter' => [
'GROUP_ID' => $projectId,
'!STATUS' => 5, // exclude cancelled tasks
],
'select' => [
'ID', 'TITLE', 'STATUS', 'DEADLINE',
'CREATED_DATE', 'CLOSED_DATE',
'RESPONSIBLE_ID', 'TIME_SPENT_IN_LOGS',
'UF_AUTO_PLANNED_HOURS', // custom field for planned hours
],
'limit' => 500,
]);
// Time logs per task
$timeLogs = CRest::call('task.elapseditem.getlist', [
'TASKID' => $taskId,
'select' => ['SECONDS', 'USER_ID', 'CREATED_DATE'],
]);
For a portfolio dashboard spanning multiple projects, use batch requests:
$batch = [];
foreach ($projectIds as $id) {
$batch["project_$id"] = ['method' => 'tasks.task.list',
'params' => ['filter' => ['GROUP_ID' => $id], 'select' => [...]]];
}
$results = CRest::call('batch', ['cmd' => $batch]);
Custom Dashboard Architecture
Two architectural approaches depending on requirements:
Embedded page (Placement). The dashboard lives inside Bitrix24 as a tab within a project. Data is requested via the JS SDK in real time. Advantage — everything in one interface. Disadvantage — performance degrades with large data volumes.
External BI system. Data from Bitrix24 is exported to PostgreSQL or ClickHouse, and the dashboard is built in Grafana, Metabase, or Power BI. Advantage — scalability, complex analytics, historical data. Disadvantage — a separate tool requiring ETL pipeline maintenance.
For most clients, a hybrid approach is optimal: an operational dashboard (data from the last 30 days) inside Bitrix24 via Placement; strategic analysis (trends, retrospectives) in an external BI system.
Case Study: IT Company Project Office Dashboard
Task: 8 concurrent projects, 35 developers, a portfolio manager who needs to see plan deviations in real time.
Dashboard metrics:
| Metric | Source | Calculation |
|---|---|---|
| Project progress (%) | tasks.task.list | closed_tasks / total_tasks |
| Deadline deviation | task.deadline | (fact_date - planned_date) in days |
| Burndown | task + timelog | planned_hours_remaining vs actual |
| Workload per person | task.responsible + timelog | hours/week per employee |
| Delivery risk | tasks without deadline + overdue | custom index |
Burndown implementation:
// Burndown calculation for a project
function calculateBurndown(tasks, startDate, endDate) {
const totalPoints = tasks.reduce((sum, t) =>
sum + (t.plannedHours || 1), 0);
const dailyBurndown = [];
let currentDate = new Date(startDate);
while (currentDate <= endDate) {
const completedByDate = tasks
.filter(t => t.closedDate && new Date(t.closedDate) <= currentDate)
.reduce((sum, t) => sum + (t.plannedHours || 1), 0);
dailyBurndown.push({
date: currentDate.toISOString().split('T')[0],
remaining: totalPoints - completedByDate,
ideal: totalPoints * (1 - daysDiff(startDate, currentDate) /
daysDiff(startDate, endDate))
});
currentDate.setDate(currentDate.getDate() + 1);
}
return dailyBurndown;
}
Visualization via Chart.js in a React component inside a placement application.
ETL for historical data:
Data from Bitrix24 is exported to PostgreSQL hourly via a cron agent. This enables building trends spanning 6–12 months — something the real-time REST API cannot provide due to rate limits and performance constraints.
-- Table of project state snapshots
CREATE TABLE project_snapshots (
snapshot_date DATE,
project_id INT,
total_tasks INT,
closed_tasks INT,
overdue_tasks INT,
total_hours_planned NUMERIC,
total_hours_spent NUMERIC
);
Result: in a 30-second morning review, the portfolio manager can immediately see which of the 8 projects is behind schedule and where there is a critical bottleneck for a specific developer. Time spent preparing a status report dropped from 2 hours to 15 minutes.
Dashboard Maintenance and Updates
A custom dashboard requires maintenance after Bitrix24 updates — the REST API occasionally changes, field names get renamed. Budget 2–4 hours for verification after each major platform update. Covering key API methods with automated tests saves time during such checks.







