Your CRM Can Now Watch Your Sites: Introducing Uptime Monitoring in Laravel CRM
The new monitoring module turns Laravel CRM into a lightweight uptime and SSL monitor for any endpoint you care about — checked on a schedule, graphed over time, and emailing you the moment something goes down. No separate tool, no monthly subscription, no extra dashboard to log into.
Here's a small irony every team eventually runs into: you spend your days inside a CRM keeping customer relationships healthy, while the websites and APIs those relationships actually depend on are monitored somewhere else entirely — in a separate paid service, behind a separate login, with its own separate alerts.
Laravel CRM's new monitoring module closes that gap. It adds a proper uptime and SSL monitor right inside the CRM you're already running. If your client's site goes down, or a certificate is about to expire, the alert lands with the team that already owns that relationship — not in some disconnected tool nobody remembers to check.
And like every other part of Laravel CRM, it's free, open source, self-hosted, and modular. If you don't want it, leave it disabled. If you do, it's one config entry away.
Why Monitoring Belongs in the CRM
Most monitoring lives in its own silo for historical reasons, not good ones. But if you run a Laravel agency, a SaaS, or a product business, the things you're monitoring — client websites, your API, customer-facing services, status pages — are the same things your CRM already tracks as customers, deals, and deliveries.
Putting monitoring in the CRM means a few practical things:
- The right people get alerted. Each monitor has an owner and an assignee, so a downtime email goes to whoever actually manages that account.
- No extra subscription. You're already self-hosting the CRM. Monitoring rides along on the same app, same database, same scheduler.
- One less dashboard. Uptime, response times, and SSL status sit next to the customer they belong to, not in a browser tab you forgot you had open.
It won't replace a heavyweight observability platform for a large infrastructure team — and it isn't trying to. It's the right amount of monitoring for the sites and services a customer-focused business actually needs to keep an eye on.
What It Does
At its core, the module checks HTTP and HTTPS endpoints on a schedule and records what it finds. There are two kinds of checks:
Uptime checks hit each endpoint at its configured interval, follow the request you've defined (method, headers, body, expected status code), and record the result — response time, status code, and any error. Response time is measured via Guzzle's transfer-time callback, so it reflects the real network round-trip, not wall-clock time.
SSL checks inspect the certificate for HTTPS endpoints and track its issuer and expiry. You'll get an alert well before a certificate lapses — by default, 14 days ahead — so an expired cert never catches you by surprise.
Every monitor can run either or both kinds of checks, and each one can be toggled on or off independently.
Charts and at-a-glance status
The monitors index lists everything you're watching, each with a 7-day sparkline so you can spot a struggling endpoint without clicking in.
Open a monitor and you get a response-time bar chart with a period selector — 24 hours, 7 days, 30 days, 90 days, or 365 days — plus a list of recent checks. Your configured performance threshold is drawn as a dotted line over the chart, so it's obvious which checks crossed the line and when.
Alerts that don't nag
When a monitor flips from up to down, or an SSL certificate is approaching expiry, the module emails the monitor's owner and assignee. Crucially, alerts are de-duplicated — you get notified when the state changes, not every five minutes for the duration of an outage. One incident, one alert, until it resolves.
Setting It Up
If you're already running Laravel CRM v2, the monitoring module is built in — you just enable it.
1. Turn on the module
Add monitoring to the optional modules array in config/laravel-crm.php (or select it during laravelcrm:install). That's all it takes to expose the monitoring surfaces at /crm/monitors.
2. Make sure the scheduler is running
Monitoring leans on Laravel's scheduler to pick up due monitors and dispatch checks. If you don't already have the scheduler wired up, add the standard cron entry on your server:
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
With that in place, each monitor is checked automatically at its configured interval. You can also run a check by hand at any time:
php artisan laravelcrm:monitor-check {monitor_id?}
Omit the ID and it picks up every monitor that's currently due.
3. Create your first monitor
Head to /crm/monitors/create and add an endpoint. The defaults are sensible — a GET request expecting a 200, checked every 5 minutes with a 30-second timeout — so for most sites you only need to paste in a URL and save. From there you can customise the method, headers, body, expected status code, interval, and whether to run uptime checks, SSL checks, or both.
4. Tune the defaults (optional)
Sensible defaults are configurable from your .env:
LARAVEL_CRM_MONITORING_DEFAULT_FREQUENCY_MINUTES=5
LARAVEL_CRM_MONITORING_DEFAULT_SSL_DAYS_BEFORE_EXPIRY_ALERT=14
LARAVEL_CRM_MONITORING_REQUEST_TIMEOUT_SECONDS=15
LARAVEL_CRM_MONITORING_SSL_RECHECK_HOURS=12
These set the default check frequency, how many days before SSL expiry to alert, the request timeout, and how often certificates are re-checked.
Built for a Multi-Tenant CRM
A couple of details matter specifically because this lives inside a CRM that teams share.
SSRF protection is on by default. Since any CRM admin can create a monitor, the module refuses to fetch URLs that resolve to internal infrastructure — loopback, private, link-local, and reserved IP ranges are blocked before any request is made. If you genuinely need to monitor a service on your private network, you can opt in:
LARAVEL_CRM_MONITORING_ALLOW_PRIVATE_TARGETS=true
Permissions and teams work like everything else. The module seeds its own permissions — view monitors, create monitors, edit monitors, delete monitors, and view monitor checks — wired through dedicated policies. Monitors are team-scoped, support custom fields, and soft-delete, so they behave exactly like the records you already manage.
Free, Open Source, Yours Forever
Like the rest of Laravel CRM, the monitoring module is MIT licensed and always will be. Self-host it, customise it, and own your data completely — no vendor lock-in, no per-monitor pricing, no surprises.
If you're already on v2, enabling monitoring is a one-line change. If you're new to Laravel CRM, installing the whole thing takes two commands:
composer require venturedrake/laravel-crm
php artisan laravelcrm:install
Your CRM already knows who your customers are. Now it can keep an eye on the things they depend on, too.