Custom Bitrix24 Project Dashboards: Real-Time Portfolio Analytics
The project office manager opens the morning dashboard and sees standard statistics: task counts, statuses, a Gantt chart. That's not enough for managing a portfolio of 10 projects. You don't see which project is a week behind plan, which developer is overloaded, or which tasks are burning without deadlines. Our client, an IT company with 8 parallel projects and 35 engineers, faced exactly this issue. A custom dashboard we developed reduced status report preparation from 2 hours to 15 minutes — an 8x savings. Additionally, we visualized workload and risks, which reduced overdue tasks by 40%. Such a dashboard is 5x faster than standard reports: data updates in real time without manual exports.
Standard analytics lack depth. Built-in reports don't show burndown charts, don't compare plan vs. actual, and don't aggregate data across the portfolio. Without these metrics, decisions are made intuitively, not data-driven. We'll explain how to build a truly useful dashboard.
Why Standard Bitrix24 Reports Fall Short
Built-in analytics do not provide:
- Planned vs. actual progress over time
- Sprint burndown/burnup metrics
- Visualization of employee workload distribution
- Consolidated dashboard across multiple projects
- Alerts when deviating from plan
These metrics are critical for managing project portfolios. Without them, you risk missing delays and overloads.
How a Custom Dashboard Works
Bitrix24 project and task data is available via REST API. We retrieve tasks, statuses, deadlines, and time logs:
// List of project tasks with details $tasks = CRest::call('tasks.task.list', [ 'filter' => [ 'GROUP_ID' => $projectId, '!STATUS' => 5, // exclude canceled ], '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 across multiple projects, we use batch requests to stay within time limits:
$batch = []; foreach ($projectIds as $id) { $batch["project_$id"] = ['method' => 'tasks.task.list', 'params' => ['filter' => ['GROUP_ID' => $id], 'select' => [...]]]; } $results = CRest::call('batch', ['cmd' => $batch]); Architecture: Placement vs. External BI
We choose the approach based on business needs:
| Criterion | Placement (embedded page) | External BI (Grafana, Metabase) |
|---|---|---|
| Performance | Limited by REST API (20 req/sec) | Unlimited (own storage) |
| Historical data | Current only (up to 5000 tasks) | Full retention (years) |
| Development time | 1–2 weeks | 3–6 weeks |
| User convenience | Inside Bitrix24, no switching | Separate tool |
Hybrid approach is optimal: operational dashboard for the last 30 days inside Bitrix24, strategic trend analysis in external BI. This combines speed and depth.
Case Study: IT Company Project Office Dashboard
We developed a dashboard for a portfolio manager handling 8 projects and 35 developers. Key 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 by person | task.responsible + timelog | hours/week per employee |
| Risk index | tasks without deadline + overdue | custom index |
Real-time burndown implementation via JavaScript:
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 embedded in the project page through Placement.
ETL for historical data — hourly export to PostgreSQL via cron agent. This enables 6–12 month trend analysis (REST API in real time can't handle the limits):
-- Table for project 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: portfolio manager sees in 30 seconds which of 8 projects is behind and where a critical bottleneck exists for a specific developer. Time savings — from 2 hours to 15 minutes for status report preparation.
How Integration with BI Systems Works
Integration with external BI (Grafana, Metabase) is done via Bitrix24 REST API and a custom data warehouse. We set up an ETL pipeline that exports project snapshots to PostgreSQL or ClickHouse. Then the BI system connects to that storage. This provides unlimited performance and access to historical data over years.
More details about the development process
1. Analyze business requirements and define metrics. 2. Design dashboard architecture (on-premise or cloud). 3. Develop custom widgets via Placement SDK or integrate with Grafana/Metabase. 4. Set up ETL pipeline for historical data. 5. Documentation (API description, data schemas, update instructions). 6. Train the team on dashboard usage. 7. 3-month warranty support after launch.Estimated Timelines
Timelines range from 1 to 6 weeks depending on complexity and data volume. Cost is calculated individually after an audit. Get a free consultation for your project — we'll tell you how to save time on report preparation.
Why Choose Us
We have worked with Bitrix24 for over 10 years, hold "1C-Bitrix" certifications, and have proven experience with custom analytics integrations. Each dashboard is designed for unique business needs, using the latest platform capabilities. We guarantee stable and transparent reports.
Contact us — we'll provide a free consultation and help you decide on the architecture.

