PearlPBX2
Open Call Center Solution

What's happening in your call center — right now, and last month

The dashboard and 13 ready-made reports work the moment you install. How many people are waiting in the queue this minute, how many calls you missed last week, which operator talks the longest — nothing to buy separately, nothing to build from scratch.

Need a turnkey rollout? Request a demo →

Production: a clean Debian or Ubuntu host

15–30 minutes on a clean VPS or server (root required) — Asterisk 22 is compiled from source. Ansible sets up PostgreSQL, Redis, nginx with TLS, systemd units, the firewall, and the cron jobs. It finishes by printing the admin login and a generated password.

curl -fsSL https://pearlpbx2.com/quickstart-install.sh | sudo bash
More in the documentation →

Playground: look around, test, WebRTC

Just Docker and Docker Compose v2 — any OS. The whole stack runs in containers, demo data is already seeded: SIP users 201–210, echo test 130, IVR 140, queues 141 and 142. The admin UI is athttp://localhost:8000/admin/.

curl -fsSL https://pearlpbx2.com/quickstart-docker.sh | bash
How this differs from install.sh on a clean OS →

Does this sound like you?

  • A supervisor spots a queue backup from a customer complaint, not from a monitor.
  • A weekly missed-call report means pulling data from the database or CDR log files by hand.
  • A call that went unanswered even 5–10 minutes ago gets no callback.
  • A call only shows up in the CRM if an operator types it in themselves.
  • Giving a supervisor access to reports means giving them access to the PBX settings too.
  • It's unclear which part of the "free" plan will turn out to be paid later.

What this actually solves

1

You can't see what's happening in the queue right now

The real-time dashboard shows every active call, the waiting queue, and free operators on one screen. If Asterisk restarts mid-day, the dashboard rebuilds the picture on its own, with no manual restart of the monitoring.

What the dashboard looks like →
2

Putting together a call report means a whole evening of database exports

13 ready-made reports (5 operational and 8 with charts) ship with the product at no extra cost: missed calls by queue and hour of day, average talk time per operator, and eleven more. Each one exports to CSV in two clicks.

What the reports actually show →
3

A customer couldn't get through, and nobody found out

The "Lost and Found" report cross-references missed calls against later successful contacts and shows who was never called back. The dashboard shows a missed call right away, not five minutes later, and an audio alert plays on the open dashboard page.

4

The CRM doesn't see a call until an operator types it in

Signed webhooks to any HTTP endpoint carry the call event (from arrival to completion) straight into your CRM, no purpose-built connector needed. The REST API adds click-to-call and quick multi-party conferencing.

How the webhooks work →
5

A supervisor needs reports, not the PBX admin password

The built-in Report Viewer role opens up reports with no access at all to the call-center control panel.

6

It's not clear what stays free

The dashboard, all 13 reports, and core telephony stay free: the license doesn't count operators or calls. Today, only support and hosting are paid, and specialized clients and an AI layer on top of calls may join them down the road.

What's actually paid →

That's not all

SIP trunks with WebRTC, call queues with 8 strategies, phone provisioning, a REST API: the full list of features is on its own page.

All features →

What's happening right now

The Overview tab answers the questions a shift supervisor actually asks: how many calls are up, how many people are waiting in queues, which operators are free. The Queues tab shows the agent grid and everyone currently on the line; from there you can pause an agent, take them off pause, or hang up a call. If Asterisk restarts mid-day, the dashboard rebuilds the picture on its own.

OverviewQueuesPJSIPBridgedChannels
18
Active channels
6
Bridges
4
Queues online
3
Waiting
Active calls
+1 415 555 0142 → Agent Petrenko04:12
+1 415 555 0198 → Agent Koval01:47
Trunk · GSM-2 → Queue "Sales"00:38
Queues
Saleswaiting 2agents 3/5
Supportwaiting 1agents 2/4
Billingwaiting 0agents 1/2

Webhooks for any CRM

Two independent event chains — inbound and outbound calls. The contract is open and documented: any HTTP endpoint that accepts a JSON POST connects, with no purpose-built connector needed.

Inbound call
call.incomingcall.answeredcall.missedcall.ended
Outbound call
call.outgoingcall.outgoing_answeredcall.outgoing_ended
  • Every payload is signed with HMAC-SHA256 in the X-PearlPBX-Signature header.
  • Multi-leg calls (transfers, conferences) are correlated via linkedid.
  • Delivery is best-effort with a retry after 2 seconds; call.ended is deduplicated via Redis.
POST /your-crm/webhook · call.ended
{
  "event": "call.ended",
  "uniqueid": "1753000000.42",
  "linkedid": "1753000000.42",
  "channel": "PJSIP/trunk1-0000001a",
  "caller_id_num": "380501234567",
  "caller_id_name": "Customer",
  "exten": "s",
  "context": "incoming",
  "direction": "inbound",
  "answered": true,
  "duration": 42,
  "cause": "16",
  "cause_txt": "Normal Clearing",
  "billsec": "38",
  "answered_by_member": "Operator Petrenko",
  "recorded": true,
  "recording_url": "https://pbx.example.com/api/v1/recordings/1753000000.42/",
  "channel_vars": { "ULINE": "42" }
}

Reports that are already built

13 reports ship with the product: 5 operational and 8 with charts. Missed calls for any period, broken down by queue and by hour of day. Average talk time per operator. A separate "Lost and Found" report shows which of the people who couldn't get through were never called back. Every report exports to CSV, and access to each one is granted separately.

Calls by hour
CSV
00:0012:0023:00
5 operational reports
  • CDR filter with a direction classifier
  • Call recordings browser
  • Queue activity (5 sub-modes, "Lost and Found")
  • Callback report
  • Routing-table report
8 analytics reports
  • Calls by queue
  • Calls by destination number
  • Calls by agent in queue
  • Outbound calls by agent
  • Missed calls by queue
  • Missed calls by hour
  • Call duration by agent
  • Queue activity (hourly/daily)

For engineers

A 1000+ line AEL validator of its own, header-based identify for multi-port gateways, Ansible roles with a deploy-state ledger for rollback, and a REST API with a live OpenAPI schema and Swagger UI.

Technical documentation →

Deployment

Install
./install.sh
Update
./update.sh
Rollback
./rollback.sh -n 1

Ansible compiles Asterisk 22 from source, generates secrets, sets up the firewall, and configures the cron jobs the system needs. The automated installer targets Debian or Ubuntu (tested on Debian 13 and Ubuntu 24.04); a Docker Compose stack for evaluation and development isn't tied to a distro. rollback.sh -n <steps> reverts code, migrations, and services using the deploy-state ledger.

Not sure which to pick? Install now above, or read the quickstart guide.

License and business model

PearlPBX2 ships under the GNU Affero General Public License v3.0 — genuine, OSI-approved open-source software. The one real requirement: if you deploy a modified version as a network service, you must give that service's users the modified version's source code.

"You may use, modify, and distribute PearlPBX2 for any purpose. If you run a modified version to provide a service over a network, you must make the complete corresponding source code available to users of that service, under the same license."

Follow PearlPBX2 on GitHub

The source is public and open to read — issues, releases, and the full commit history live there. A star helps other call centers find the project.

Star on GitHub

Support

Free
€0
GitHub issues, no guaranteed response time
  • Full source access under the AGPL-3.0 license
  • One-line install via Ansible or Docker Compose
  • Documentation in Ukrainian, English, and Spanish
Start on GitHub
Basic Support
€149/mo
Email, business hours, no guaranteed response
  • PearlPBX2 on your own server
  • Product consulting: answers to any question, guidance on configuration — no hands-on work on your server
  • Help with updates
  • No SLA and no included hours — incidents and custom work billed at €150/hr
Discuss terms
Managed Hosting
€350/mo
We run the server, updates, and backups; response by the next business day
  • PBX hosted on our infrastructure — EU by default, US on request
  • Monitoring, updates, and daily backups
  • Up to 8 hours of rollout and setup included, no separate setup fee
  • Beyond that — €150/hr
Discuss terms
Self-hosted Support
€3,500/yr
A dedicated Slack Connect channel, response by the next business day
  • PearlPBX2 on your own hardware, you keep root access
  • Priority troubleshooting and help with updates
  • Up to 8 hours of rollout and setup included
  • Beyond that — €150/hr
Contact us

Frequently asked questions

Do the dashboard and the reports cost extra?+

No. The real-time dashboard and all 13 reports are part of the product and aren't licensed separately; the license sets no limit on operators or calls. You only pay for support, turnkey installation, or custom development if you want them.

Is PearlPBX2 open source?+

Yes. PearlPBX2 is licensed under the GNU Affero General Public License v3.0 — an OSI-approved free and open-source license. You can use, modify, and deploy PearlPBX2 for any purpose, including running your own commercial telephony business, with no separate agreement. The one real requirement is network-use copyleft: if you deploy a modified version as a service reachable over a network, you must give that service's users the modified version's source code.

Which Asterisk versions are supported?+

Asterisk 22 and later, built with the res_pjsip, res_agi, and cdr_pgsql modules. The Ansible installer compiles Asterisk 22 from source automatically.

Which operating system do I need to install it?+

The automated Ansible installer targets Debian or Ubuntu only. The Docker Compose stack for evaluation, development, and CI is not tied to a distro.

Is there a visual IVR builder?+

IVR menus are built in the AEL dialplan editor using Background, WaitExten, and Goto — it is a dialplan editor, not a drag-and-drop builder.

Does PearlPBX2 integrate with my CRM?+

PearlPBX2 is not tied to any specific CRM. HMAC-signed JSON webhooks connect to any HTTP endpoint, and a documented vocabulary of 33 variables covers a call's entire lifecycle — from the moment it arrives to a link to the recording.

What happens if an applied configuration turns out to be wrong?+

Apply Changes shows a preview of every file before writing it and creates a backup automatically. If a problem surfaces later, rollback.sh reverts code, database migrations, and services by however many steps you need, using the deploy-state ledger.

What license is it under, and can I use PearlPBX2 commercially?+

The GNU Affero General Public License v3.0 (AGPL-3.0-or-later). Commercial use is allowed with no restrictions and no separate agreement. The one requirement: if you publicly deploy a modified version as a network service, you must give that service's users the modified version's source code under the same license.

Which phones does auto-provisioning support?+

Today, 8 Grandstream GXP models and 7 Cisco SPA models, through an extensible configuration-generator architecture. Support for new vendors is added through the same plugin mechanism.

See it on your own calls

We'll walk you through the dashboard and the reports on a demo call, and tell you how it holds up at your call volume.

Request a demo