Status page and uptime monitoring for Laravel apps
Monitor Laravel routes, queues, schedulers, and Horizon. Custom-domain status page with one CNAME, or build your own on top of our API.
Three ways to ship a status page for Laravel
Pick the level of control you need — zero-code, low-code, or full headless.
Hosted
Add your Laravel endpoint, point a CNAME at status.yourdomain.com, done. Works in 5 minutes.
Headless
Use our public API to build your own UI inside your Laravel app. Full control over design and branding.
See the APIEmbedded badges
Drop SVG uptime and status badges into your README or landing page. Auto-updates every 5 minutes.
Drop this health endpoint into your Laravel app
Copy, paste, point PulseAPI at the URL. Returns 200 when healthy, 503 when degraded.
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Redis;
Route::get('/health', function () {
$checks = [];
try {
DB::select('select 1');
$checks['database'] = 'ok';
} catch (\Throwable $e) {
$checks['database'] = 'fail';
}
try {
Redis::ping();
$checks['cache'] = 'ok';
} catch (\Throwable $e) {
$checks['cache'] = 'fail';
}
$healthy = collect($checks)->every(fn ($v) => $v === 'ok');
return response()->json(
['status' => $healthy ? 'healthy' : 'degraded', ...$checks],
$healthy ? 200 : 503
);
})->withoutMiddleware([
\App\Http\Middleware\VerifyCsrfToken::class,
]);Skip CSRF and auth middleware. Return 503 on partial failure. Add rate-limit exemption if you have a strict throttle.
What breaks in Laravel apps — and how to catch it
Horizon queues falling behind
A backlog in a specific queue kills async UX. Queue-depth assertions catch it early.
Scheduler jobs that stop running
Stuck cron leaves invoices un-sent. Heartbeat endpoint + assert last-run timestamp.
Cache / session driver failures
Redis hiccups cause intermittent 500s when sessions fail. Cache check in /health surfaces this.
Don't like our status page? Build your own in Laravel.
Our API returns the same data our hosted UI consumes. Full OpenAPI spec documented at api.pulseapi.tech/docs.
use Illuminate\Support\Facades\Http;
class StatusController extends Controller
{
public function index()
{
$data = Http::timeout(5)
->get('https://api.pulseapi.tech/status/acme')
->json();
return view('status', ['data' => $data]);
}
}Laravel monitoring — FAQ
Does it work with Laravel Forge, Vapor, or self-hosted?
All of them — PulseAPI hits a public URL.
Can I monitor Horizon?
Yes. Endpoint that reads Horizon::status() and queue depths. Assert on specific queues with JSON-path rules.
Does it handle Laravel maintenance mode?
Yes. 503 from `php artisan down` triggers an incident. Mark scheduled maintenance windows to suppress alerts during deploys.
Can I render the status page inside Laravel?
Yes. Hit the API from a controller, pass to a Blade view.
Start monitoring your Laravel app in 5 minutes
Free tier. No credit card. Add your endpoint and get alerts when it breaks.