Django

Status page and uptime monitoring for Django apps

Monitor your Django views, database, Celery workers, and cache. Alerts when latency spikes or workers die. Hosted status page or headless via API.

Three ways to ship a status page for Django

Pick the level of control you need — zero-code, low-code, or full headless.

Hosted

Add your Django 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 Django app. Full control over design and branding.

See the API

Embedded badges

Drop SVG uptime and status badges into your README or landing page. Auto-updates every 5 minutes.

Drop this health endpoint into your Django app

Copy, paste, point PulseAPI at the URL. Returns 200 when healthy, 503 when degraded.

health/views.py
from django.db import connection
from django.http import JsonResponse
from django.core.cache import cache
from django.views.decorators.http import require_GET


@require_GET
def health(request):
    checks = {}
    try:
        with connection.cursor() as cur:
            cur.execute("SELECT 1")
        checks["database"] = "ok"
    except Exception:
        checks["database"] = "fail"
    try:
        cache.set("health-probe", "1", 5)
        checks["cache"] = "ok" if cache.get("health-probe") == "1" else "fail"
    except Exception:
        checks["cache"] = "fail"
    healthy = all(v == "ok" for v in checks.values())
    return JsonResponse(
        {"status": "healthy" if healthy else "degraded", **checks},
        status=200 if healthy else 503,
    )

Wire the view to /health/ in urls.py. Exclude it from authentication middleware. PulseAPI will parse the JSON response and can assert that specific fields are "ok".

What breaks in Django apps — and how to catch it

Half-applied migrations

A failed migration on deploy leaves the app in a weird state. Checking the live /health endpoint catches it immediately.

Celery workers gone silent

Workers can stop consuming without crashing. Expose a health endpoint that queues a no-op task and PulseAPI alerts when it stops responding.

Connection pool exhaustion

Long-running queries exhaust the pool and new requests time out. Response-time assertions surface this before users notice.

Headless angle

Don't like our status page? Build your own in Django.

Our API returns the same data our hosted UI consumes. Full OpenAPI spec documented at api.pulseapi.tech/docs.

Render a custom status page inside Django by fetching our API in a view.
import requests
from django.shortcuts import render


def status_view(request):
    data = requests.get(
        "https://api.pulseapi.tech/status/acme", timeout=5,
    ).json()
    return render(request, "status.html", {"data": data})

Django monitoring — FAQ

Does it work with Django REST framework, Django Channels, or raw Django?

All of them. PulseAPI calls the URL you give it and asserts on the response. The internal stack does not matter.

How do I monitor Celery workers?

Expose a health endpoint that dispatches a trivial task with .delay() and reads the result with a short timeout. Return 503 if the task did not complete.

Can I use it with staging?

Yes. Create one endpoint per environment and tag them. You can hide staging endpoints from your public status page while still getting alerts.

Can I self-host the status page inside Django?

Yes — the headless API returns the same data the hosted page uses. Fetch it in a view, pass to a template, done.

Start monitoring your Django app in 5 minutes

Free tier. No credit card. Add your endpoint and get alerts when it breaks.