Domain Monitor dashboard listing domains and their expiry dates
Network

Domain Monitor: never let a domain die from expiry you didn't see coming

If you manage more than five or six domains, you already know the moment: a client calls in a panic because their site is down, and the reason is the domain expired three days ago and nobody saw the renewal email from the registrar (which, let’s be honest, looks exactly like a phishing attempt and lands in spam constantly). An expired domain isn’t just a downed site, it’s a window where anyone can re-register it once the grace period runs out, and getting it back afterward is either impossible or expensive.

Domain Monitor , created and maintained by Hosteroid, is an open-source, MIT-licensed tool built to solve exactly that: it tracks the expiry of your domains and notifies you early, on a channel you actually check. We evaluated it as an alternative to relying on registrars’ native notification systems, which vary wildly in reliability from provider to provider.

What Domain Monitor actually is

Domain Monitor is a PHP 8.1+ application, built on its own custom MVC framework (not Laravel or Symfony), with MySQL 5.7+ or MariaDB 10.3+ as the data backend and Composer-managed dependencies. The core idea: add your domains to the app, and a cron job periodically runs WHOIS/RDAP lookups for each one, automatically extracting the expiry date and current registrar. As a domain approaches expiry, the app fires notifications at whatever thresholds you configure (default: 60, 30, 21, 14, 7, 5, 3, 2, and 1 days out).

It supports over 1,400 TLDs, with direct integration against the IANA registry to determine the correct WHOIS/RDAP server for each extension, including a dedicated TLD registry importer.

Why this matters

The difference from relying on registrar emails is having a single place that aggregates all your domains, no matter how many different registrars they’re spread across (a common reality once you’ve bought domains over several years or inherited them from clients). And multi-channel notifications (not just email, which gets lost in the noise) mean a Slack, Discord, or Telegram ping can hit you directly when a threshold actually matters, not just at the 60-day mark you ignore because “there’s still time.”

What you get out of the box

  • Unlimited domain management: add, edit, bulk import, and manual or automatic WHOIS refresh.
  • Smart WHOIS/RDAP lookups, with automatic detection of expiry date and current registrar, across 1,400+ TLDs.
  • Multi-channel notifications: Email, Telegram, Discord, Slack, Mattermost, Pushover, and custom webhooks.
  • Notification groups: organize channels and flexibly assign domains to different groups (useful when different clients or teams own responsibility).
  • Real-time dashboard showing the status of every domain and active alerts.
  • Complete notification history, with detailed logging.
  • Cron-based automated monitoring, with configurable check intervals.
  • Database-backed session system, tracking geolocation, ISP, and device, with the ability to remotely terminate any active session instantly.
  • Randomly generated passwords at install time, and cryptographically secure “Remember Me” tokens (30-day duration).
  • Prepared SQL statements throughout, as a standard defense against injection.

Installing Domain Monitor on a VPS

The project ships dedicated Docker support in the domain-monitor-docker directory of the repo. A typical flow on a fresh VPS:

git clone https://github.com/Hosteroid/domain-monitor.git
cd domain-monitor/domain-monitor-docker

docker compose up -d

Once it’s up, the app exposes a browser-accessible web installer that automatically creates the database tables, generates the encryption key, populates the .env file, and shows you the generated admin credentials once (write them down immediately).

If you prefer a traditional install without Docker, you’ll need PHP 8.1+, MySQL/MariaDB, Composer, a webserver with URL rewriting support (Apache with mod_rewrite or Nginx), and cron access for automation.

On the VPS firewall, only allow what’s strictly needed publicly:

ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable

The app itself is light on resources (plain PHP, no heavy frontend framework), so an entry-level VPS is more than enough, even for a few hundred monitored domains.

Configuration patterns worth knowing

Per-client notification groups, not one global channel

If you manage domains for multiple clients or projects, don’t dump every alert into a single Slack channel where it gets lost. Use notification groups to route each client’s domains to their own channel (a dedicated email, a webhook into their ticketing system, or their own Slack), keeping ownership clear.

Risk-adjusted notification thresholds

The default thresholds (60 down to 1 day) are a solid starting point, but tune them per domain category. A critical production domain deserves an extra 90-day threshold plus escalation at the 24-48h mark (a different channel, maybe a phone alert via Pushover), while a test domain can stay on the defaults.

Remote session termination for teams

If multiple people have access to the admin panel, use the active sessions feature with geolocation and remote termination to instantly cut off access from a lost or compromised device, instead of waiting for the session to expire naturally.

Manual WHOIS refresh after a renewal

After renewing a domain directly at the registrar, use the manual refresh in the UI instead of waiting for the next automatic cron cycle, so the dashboard reflects the new expiry date right away and doesn’t fire a false alert in the meantime.

Where Domain Monitor is not the right answer

If you only own one or two personal domains, spinning up a PHP app with a dedicated database is overkill, your phone’s calendar or a simple recurring reminder does the job just as well. Domain Monitor also doesn’t auto-renew domains, it’s strictly a monitoring and alerting tool, it doesn’t connect to the registrar to renew on your behalf (that stays your responsibility or the registrar’s). And if you’re already a client of a registrar or hosting provider that includes expiry monitoring in its control panel, check whether that existing coverage is enough before adding another app to administer.

Alternatives we considered

  • WhoisFreaks or other commercial WHOIS APIs: a good fit if you need very high query volume and don’t want to run anything yourself, but they come with a recurring cost and third-party dependency.
  • The registrar’s native reminders: free and already active if all your domains sit with one registrar, but reliability varies a lot, and you get no unified view if your domains are spread across registrars.
  • DomainMOD : another self-hosted tool, more geared toward a full inventory of domains/hosting/SSL rather than pure expiry monitoring.

So, should you run it?

If you manage domains for clients, or simply have accumulated more than you can keep track of in your head, a dedicated expiry-monitoring tool is cheap to run and expensive to skip. As a registrar and LIR ourselves, we know firsthand how often an emergency ticket comes in for exactly this reason, and a unified dashboard with alerts on the right channel costs a lot less than recovering an expired domain.

Want to run it on your own VPS , or would you rather not deal with the operational side at all? Our server administration service covers exactly that. And if you’d rather offload .ro renewals entirely, check our .ro domain registration service.

Trusted By & Member Of

We are proud members of leading internet infrastructure organizations.

RIPE NCC MANRS PeeringDB RoTLD DSIX SBIX 4IXP LOCIX Euro-IX RIPE NCC MANRS PeeringDB RoTLD DSIX SBIX 4IXP LOCIX Euro-IX