Browser softphone
Call straight from the browser with SIP.js over WebRTC. No desktop app, no plugins.
Open Cold Dialer is a free, self-hosted browser softphone with leads, campaigns, call scripts and call logs built in. Bring any SIP provider and stop paying per seat.
git clone https://github.com/6t9xstar/Open-Cold-Dialer.gitWorks with your SIP provider
Sarah Reynolds
Head of Sales · Northwind Logistics
Connected
02:47
Script · Objection: "We already have a vendor"
"Totally fair. Most teams we talk to do. What would have to be true for a switch to be worth a 15-minute look?"
Features
The tools that per-seat dialers charge extra for are built in, and they run on infrastructure you control.
Call straight from the browser with SIP.js over WebRTC. No desktop app, no plugins.
SignalWire, Telnyx, Twilio, Asterisk, FreeSWITCH or your own server. Never locked in.
Create, search and filter leads by status. Import thousands at once from CSV.
Group leads into outbound campaigns and track progress from first dial to close.
Script templates with ready objection-handling responses, right next to the dialer.
Every call logged with outcome, duration and notes, so follow-ups never slip.
Real-time stats on leads, calls and conversion rates for the whole team.
User accounts with role-based access and JWT sessions.
Express and SQLite. Your data stays on your server, with no cloud dependency.
Prefer managed? Point the frontend at Supabase instead of the bundled backend.
One command brings up the frontend and backend, ready to seed and dial.
A full API for leads, campaigns, call logs and scripts, ready for your integrations.
Product tour
Upload a CSV and every row becomes a lead you can search, filter by status and update after each call.
Leads
Import CSVGroup leads into outbound campaigns and watch progress as your team works through each list.
Campaigns
Each call is saved with its duration, outcome and notes, so follow-ups and reporting take care of themselves.
Call history
How it works
Clone the repo and start it with Docker, or run the Express backend and React frontend with npm. 20 sample leads are seeded for you.
docker compose up -dAdd your SIP URI, password and WebSocket URL to .env.local. No provider yet? Calls are simulated so you can try every screen.
VITE_SIP_URI=sip:you@…Import leads from CSV, build a campaign, open a script and call from the browser. Every outcome is logged.
POST /api/leads/importTry it
This is the simulated call mode the app runs before you connect a SIP provider. No call is placed, and nothing you type leaves this page.
Ready
Compare
Per-user prices as listed in the project README. Check each vendor for current pricing.
| Feature | Open Cold Dialer | RingCentral | Dialpad | Five9 |
|---|---|---|---|---|
| Price | Free | $30/user/mo | $25/user/mo | $150+/user/mo |
| Self-hosted | ||||
| Open source | ||||
| SIP provider | Any | Locked | Locked | Locked |
| Browser-based | ||||
| Lead management | Extra | Extra | Extra | |
| CSV import | ||||
| Call scripts |
Savings
Move the slider to your team size. Open Cold Dialer costs nothing per seat; you pay only your SIP provider's call rates, which every option needs anyway.
Open stack
A React and Vite frontend, an Express and SQLite backend, and SIP.js for WebRTC calling. Read every line, change anything, and extend it through the REST API.
# Create a lead
curl -X POST https://dialer.example.com/api/leads \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"Sarah Reynolds","phone":"+15551234567"}'
# Log the call outcome
curl -X POST https://dialer.example.com/api/call-logs \
-H "Authorization: Bearer $TOKEN" \
-d '{"lead_id":1,"outcome":"interested"}'FAQ
Yes. It is MIT licensed with no per-user fees. You only pay your SIP provider for the calls you make, which any dialer needs.
Any SIP provider that offers WebSocket (WSS) access, including SignalWire, Telnyx, Twilio, Asterisk and FreeSWITCH.
No. The softphone runs in the browser with SIP.js over WebRTC. Agents need a microphone, and headphones are recommended to prevent echo.
On your own server, in SQLite, when you use the bundled Express backend. You can use Supabase instead if you prefer a managed database.
Yes. If SIP is not configured, the app simulates connecting, ringing and active calls so you can explore every screen.
Run docker compose up -d on any VPS, then seed the database. Guides cover Docker, VPS with Nginx and Hostinger.
Self-host Open Cold Dialer today and give every rep a softphone, without a per-seat invoice.