DEV Community

David Adams
David Adams

Posted on

I Built a $9/mo Uptime Monitor in a Day — Here's What I Learned

I got tired of paying $50+/month for uptime monitoring on side projects that make $0. So I built my own.

The Problem

Every uptime monitoring service I tried was either:

  • Too expensive for indie projects (Pingdom, Datadog)
  • Too complex with features I don't need
  • Ugly dashboards that made me not want to use them

All I wanted was:

  1. Check if my site is up
  2. Tell me if it goes down
  3. Don't charge me $50/month for it

The Build

I built OwlPulse in a single day using:

  • FastAPI for the backend (~500 lines)
  • SQLite for zero-config storage
  • APScheduler for background checks
  • Cloudflare Tunnel for deployment

The Core API

@app.post("/monitors")
async def create_monitor(monitor: MonitorCreate):
    api_key = secrets.token_urlsafe(32)
    # ... create monitor with API key
    return {"id": monitor_id, "api_key": api_key}
Enter fullscreen mode Exit fullscreen mode

That's basically it. Create a monitor, get an API key, start checking.

Background Checking

async def check_monitor(monitor_id: int):
    async with httpx.AsyncClient() as client:
        start = time.time()
        response = await client.get(url, timeout=10)
        response_time = (time.time() - start) * 1000

        # Log the check, update status, fire webhook if changed
Enter fullscreen mode Exit fullscreen mode

Pro plan gets 1-minute checks. Free gets 5-minute checks.

What I Learned

1. Simple beats feature-rich

I was tempted to add:

  • Multi-region checks
  • Fancy charts
  • Team management
  • SSL monitoring
  • etc.

But none of that matters if the core is solid. Ship simple, iterate later.

2. API-first is underrated

Most monitoring tools force you into their dashboard. I wanted something I could integrate anywhere — Slack bots, CLI tools, custom dashboards.

REST API with webhook callbacks = maximum flexibility.

3. Pricing is a feature

$9/mo unlimited monitors. That's it. No per-monitor pricing, no hidden fees, no enterprise upsells.

Indie devs shouldn't need to do math to figure out their monitoring bill.

Try It

OwlPulse is live at owlpulse.org.

  • Free tier: 3 monitors, 5-min checks
  • Pro: $9/mo unlimited, 1-min checks, webhooks

The whole thing is ~500 lines of Python. Sometimes the best solution is the boring one.


What's your uptime monitoring setup? Anyone else built their own?

Top comments (0)