Run your ISP on one box.
Billing, bandwidth policy - and find the people sharing their connection.
radcontrol v4 is a ground-up rebuild of the original: a complete subscriber-management platform for WISPs and ISPs — prepaid billing and dealer resale, per-account-type speed policy enforced in RADIUS and mid-session over CoA, live operations dashboards, and an ML-powered account-sharing analyzer — plus Jibaya, the doorstep cash-collection add-on with its own Android and iOS app. Self-hosted, offline-capable, installed with one command.
The root dashboard: host health, live RADIUS req/accept/reject meters, backup freshness, per-dealer rollups.
One product, the whole operation.
Subscribers & prepaid billing
Create, renew, top-up. Per-user MAC lock, static IPs, scheduled account type changes, bulk import, and a full per-user ledger. Subscribers get their own self-service portal.
Dealer hierarchy
Resell through a tree of dealers and sub-dealers with credit ledgers, parent-to-child transfers, per-dealer offer catalogues and commission that resolves down each level.
Scratch-card batches
Generate thousands of prepaid cards per batch, hand them to dealers, and track activation rates. First login activates the card — no operator involved.
Multi-tier speed policy
Baseline speed, usage tiers, burst, night booster windows, free-quota time spans, penalty speeds, daily and monthly caps — compiled into Mikrotik-Rate-Limit automatically.
Live operations
Online users, per-NAS status with RADIUS and NetFlow badges, host health, live request rates, billing, volume and top-user reports, and a full audit log.
Sharing Analyzer
NetFlow-driven, ML-scored account-sharing detection: 0–100% doubt scores with plain-language evidence, never verdicts. See how it works ↓
Jibaya — money collection
Doorstep cash collection with a phone app for your collectors: ranked rounds, part payments, auto-renewal, printed receipts and per-collector wallets. See the add-on ↓
Zero-restart NAS onboarding
Add a MikroTik in the UI and it's served on its first packet — new routers are recognized automatically. No config reload, no service restart.
Continuous backup & DR
Client-side-encrypted snapshots every 15 minutes to your SFTP or S3 storage. A dead server is a 30-minute restore, driven by an in-product wizard.
Offline licensing
Cryptographically signed licenses verified locally — no phone-home, ever. Over the limit? New activations pause; your existing subscribers keep working.
Find the accounts feeding a whole building — with evidence, not hunches.
Password sharing quietly eats WISP revenue. radcontrol watches sampled NetFlow from your routers and scores every account against its own account type population — continuously, on your own hardware.
Signals, not volume
Heavy users aren't sharers. The analyzer reads the shape of an account's traffic — roughly how many devices, at what hours, doing what — dozens of behavioral signals that a big download alone can't trigger.
Scored against peers
A machine-learning ensemble, retrained continuously, ranks each account against the others on the same account type. New installs run a careful baseline period before scores go live — no snap judgements on day one.
Doubt, not verdicts
Scores are doubt percentages, and every score comes with the plain-language observations behind it. Large families exist; you review the evidence before you act.
The ranked report: doubt scores, trends, and the top signals behind each — filterable, exportable, dealer-scoped.
Drill into any account: score history, weekly activity heatmap, device-count signals over time, sampling-corrected traffic mix.
Privacy-conscious by design: flows are sampled, raw data is kept only briefly, and long-term storage is aggregate only. Ready-made MikroTik export recipes are built into the NAS pages — enabling it is a two-minute job per router.
A high-performance RADIUS engine that answers instantly — and never guesses.
Every login is answered by radcontrol's purpose-built RADIUS engine. It checks the subscriber, the account type, the balance and the usage in one stroke, and replies in a blink — even at peak hour, on modest hardware. Policy is computed fresh on every request, so what the router applies is always the current truth.
- Speeds, quotas, bursts and time windows are evaluated live on each request — there is no cached policy to go stale and no sync job to wait for.
- Login and mid-session always agree: the speed a router gets over CoA is exactly what a fresh login would get at that moment.
- When a night window opens or a cap is crossed, the router is updated immediately — subscribers never keep yesterday's speed by accident.
- Fail-closed by design: if the platform can't verify an account, it doesn't let it online — an outage never becomes free internet.
- And it's fast — measured, on real traffic, at 50,000-subscriber scale ↓
# 02:14 — login request from router 10.10.0.1 auth: ahmed.kareem → plan 'Home 25M' · usage 111G / 400G · ok auth: night booster active (01:00–07:00) → speed 10M/50M auth: Access-Accept — rate limit + pool + session window applied # 05:02 — usage tier crossed while still online coa: ahmed.kareem → new rate 2M/6M pushed to 10.10.0.1 coa: acknowledged — applied without disconnecting the session
50,000 subscribers. Five seconds. Zero rejects.
Performance claims are cheap, so we publish measurements instead. Every number below was produced by radcontrol's own load-test harness driving real RADIUS traffic at a stock install — one desktop-class machine, and a database already carrying a full year of usage history. No cluster, no tuning, no lab tricks.
The worst minute of an ISP's life, on a stopwatch.
Power returns to the city and every router re-dials at once — the moment most billing platforms fold, and your phones start ringing. The benchmark replays exactly that: 50,000 subscribers all logging in within a five-second window, each login also writing its accounting session record. radcontrol accepted every single one on the first try — no retry pile-up, no rejects — and was finished the moment the last request arrived.
Recovery tracks the dial-in itself: after the final request of the storm, the server needed 2 ms to finish the job. Every session was confirmed in accounting within the same 5.0 s.
Squeezed into 3 s
Force the same 50,000 logins through a three-second window and they still all land on the first attempt: 16,600 logins per second, 99th percentile 18 ms, zero retries.
All at once
Even with every one of the 50,000 arriving inside a single second — a burst no real network can produce — the system absorbs the pile-up and has everyone online in 4.3 s, nobody rejected.
Accounting included
Each login in these runs is a full session bring-up — authentication and the accounting start, confirmed. Not a stripped-down auth-only benchmark.
Recovery doesn't grow with your network
The same storm, run at every size from 1,000 to 50,000 subscribers: recovery ends when the dial-in window ends. Ten times the subscribers, the same five seconds.
Latency stays flat under the storm · login answer time, ms
Mid-storm login answer times, by network size. The median holds near two milliseconds whether one thousand or fifty thousand subscribers are slamming the door at once.
Everyday traffic doesn't even register.
A storm is rare; Tuesday evening isn't. In normal operation a 50,000-subscriber network keeps up a steady conversation with the server — logins, renewals, and an accounting update from every online session every five minutes. All of it adds up to under 200 requests a second.
- Sustained rate, measured: 5,000 full logins a second — 10,000 RADIUS packets a second — held for ten straight seconds without a single drop.
- At that sustained rate: median answer 2.0 ms, 99th percentile 3.2 ms.
- That's roughly 30× the steady-state load of a 50,000-subscriber network — peak demonstrated capacity is nearer 100×.
- Policy is computed fresh on every request — these times include the balance, usage and speed-tier decisions, not a cache hit.
| Subscribers | Back online | Rejects | Retries | Median | p99 | Recovery |
|---|---|---|---|---|---|---|
| 1,000 | 100% | 0 | 0 | 1.9 ms | 4.5 ms | 5.0 s |
| 5,000 | 100% | 0 | 0 | 1.8 ms | 2.9 ms | 5.0 s |
| 10,000 | 100% | 0 | 0 | 2.0 ms | 3.3 ms | 5.0 s |
| 20,000 | 100% | 0 | 0 | 2.0 ms | 3.7 ms | 5.0 s |
| 30,000 | 100% | 0 | 0 | 2.0 ms | 3.5 ms | 5.0 s |
| 40,000 | 100% | 0 | 0 | 2.0 ms | 3.4 ms | 5.0 s |
| 50,000 | 100% | 0 | 0 | 2.1 ms | 5.8 ms | 5.0 s |
The full storm ladder — every run, no cherry-picking.
Methodology. radcontrol 4.0.10, stock install.sh
defaults, on one machine: 16-core desktop CPU (AMD Ryzen 9), 32 GB RAM, a single
NVMe SSD, Debian 13. Real RADIUS authentication + accounting over UDP from a separate
load generator; 2 s NAS retry timeout, up to 30 attempts per subscriber. Database
preloaded with 12 months of usage history and 45 days of detailed sessions (7.8 GB)
before every run. Storm runs re-authenticate the whole population inside a 5-second
dial-in window; every run shown converged with zero rejects.
Your dealer network, priced down the tree.
Dealers buy credit, resell your account types with their own markup, and open branches of their own. Every level sees only its subtree; prices resolve base → +commission per resale level, and every credit movement is one row in an immutable ledger.
- Deposits, withdrawals and parent→child transfers with running balances.
- Scratch-card batches priced per dealer, activation tracked per card.
- Per-dealer feature flags: sub-dealer creation, account type changes, credit floors.
- Aggregate dashboards — user counts and volume per dealer, never raw sessions.
Every subscriber, one page. Live status, cap meters and expiry in a stats strip; profile, billing ledger and network activity in tabs. The usage chart splits validated download/upload by day, and the session table shows the accounting history exactly as the routers reported it.
- Renew, top-up, override bandwidth, or schedule an account type change in two clicks.
- Global search from the header: name, username, email, or dealer.
- Subscribers check their own balance and usage in the UserCP portal.
Money collected at the door — booked before the collector leaves the street.
In most of the world a subscription is not a card on file: someone walks the neighbourhood and knocks. Jibaya (جباية — "collection") is radcontrol's answer to that round. Collectors carry a phone app that knows who owes what; the cash they take renews the subscriber on the spot and lands in your books immediately — no evening spreadsheet, no guessing who is holding how much.
A round that sorts itself
The worklist ranks doors by urgency — already expired first, then expiring within the week — with the address, the amount due and one tap to call or send a WhatsApp message. No list to prepare in the morning.
Part payments, handled
Half now, half on Thursday is normal. Each payment sits on the subscriber's balance until the period is covered — then the account type renews itself, and anything extra rolls into the next period or stays as credit.
Two books that agree
Cash moves subscriber → collector wallet → your hand, while the renewal still charges the dealer's prepaid credit exactly as a console renewal would. Every movement is a numbered receipt in an immutable ledger.
The dealer's view: what's outstanding, what came in this fortnight, and how much cash each collector is holding right now — with Collect cash to settle it.
Oversight without a phone call. Open any collector to see the cash they hold, what they booked today and this week, and every wallet movement they've made — payments, renewals and settlements, newest first, filterable by date, type or subscriber.
- Assign subscribers to a collector individually or in bulk from the Users page.
- Settle a wallet in part or in full; the receipt trail shows what you took and when.
- Suspend a collector and their sessions are revoked immediately, on every device.
- Per-install currency, decimals and ISP name — receipts and screens follow them.
The radcontrol Jibaya app.
One app for the collector and the dealer. It signs in to your server — nothing is routed through us — keeps the session in the phone's keychain, and prints receipts to a 58 mm Bluetooth thermal printer. Coming to Google Play and the App Store.









Built for the phone in a pocket
Big tap targets, a wallet screen that answers "how much am I carrying?", and a progress screen with the day's and the week's totals. Dealers get the whole team in the same app.
Prints and emails receipts
Pair a 58 mm Bluetooth thermal printer from Settings and hand over a paper receipt. Receipts render as images, so Arabic prints correctly on printers that can't do Arabic at all.
English and Arabic
Each collector picks their language when they sign in and keeps it on their own phone. Hire the person who knows the streets rather than the one who reads English — and hand over a receipt the subscriber will actually read. See it below ↓
The same round, in Arabic.
Language is a per-person setting, not an install-wide one. The collector working the Karrada round runs the app in Arabic while the dealer reviews the same book in English, and the receipt left at the door follows whoever collected it. Nothing about the round changes — only who can read it.






Jibaya is a licensed add-on: it appears in the console and accepts app logins only where your license enables it. Setting it up takes about ten minutes →
The server can die. The business doesn't.
Every 15 minutes radcontrol snapshots your business data — subscribers, balances, ledgers, settings — encrypts it on your box, and ships it to storage you control (SFTP or any S3-compatible bucket). The vendor never sees plaintext; the passphrase is shown to you once, and it is the key to everything.
- Hardware dies → fresh box + install command + restore wizard ≈ 30 minutes.
- Backup freshness sits on the dashboard: protected, or it isn't.
- Licenses verify offline with signed blobs — air-gapped networks welcome.
- Auto-tuned at install: the platform sizes itself to the hardware you give it.
Your routers talk to one node. That's the whole diagram.
Every NAS speaks standard RADIUS and NetFlow to a single self-hosted radcontrol node; the node pushes mid-session changes back over CoA. Operators, dealers and subscribers use the web console — and encrypted snapshots leave for storage you control.
Up and running before the coffee cools.
One command on a fresh Linux box installs everything — Docker, database, RADIUS, analytics — and prints your login.
$ curl -fsSL https://radcontrol.org/install.sh | sudo bash