Free alternative to Atlassian Statuspage
A free status page for your product or team.
Status is a free alternative to Atlassian Statuspage: a public page with your components, incidents, scheduled maintenance and 90 days of uptime history. Post updates from the page, from CI or monitoring, or from an AI assistant. No sign-up and no paid plan.
- Incidents with a timeline of updates
- Followers subscribe by RSS, Atom and calendar
- An API for CI, monitoring and AI assistants
How it works
Name your page
Type your product or team name and pick an address like status-free.openapps.xyz/acme. It is yours: nobody else can take it.
Add your components
List the parts people depend on, like Website, API and Dashboard. Each one gets a status and a 90-day history bar.
Post when something happens
Report an incident, post updates until it is resolved, and schedule maintenance ahead. Visitors see every change live.
What your visitors see
One calm page that answers "is it down, or is it me?" before anyone has to ask.
- Overall status at the top, worked out from your components.
- Components in groups, each Operational, Degraded performance, Partial outage, Major outage or Under maintenance.
- Incidents with every update: Investigating, Identified, Monitoring, Resolved. Each incident has its own page to share.
- Scheduled maintenance with start and end, in each visitor's time zone.
- 90-day history and uptime for every component, built from your incidents.
- Past incidents by month.
- Subscribe by RSS or Atom, add maintenance to a calendar, or show a badge in your README.
Free, with no catch
A status page matters most on your worst day, and it should not need a subscription. Status is free because a page is a few small records, and OpenApps pays for them. The trade: Status does not send email, does not check your site for you, and pages live on status-free.openapps.xyz rather than your own domain.
| Status | Atlassian Statuspage | |
|---|---|---|
| Price | Free, no paid plan | Free plan; paid plans $29 to $1,499 a month |
| Status pages | As many as you want | Free plan: up to 2, public only |
| Components | Up to 60 per page | Free plan: 25 |
| Followers | Not counted or capped | Free plan: 100 subscribers; paid: 250 to 25,000 |
| Email and text alerts | No: RSS, Atom and calendar | Email on the free plan |
| People who can post | Anyone with the admin link | Free plan: 2 team members; paid: 5 to 50 |
| Account needed | No | Yes, an Atlassian account |
| API | Free, no account: incidents, components, maintenance, JSON, badge | Rate-limited REST API on the free plan |
Updated October 2026. Statuspage figures as reported in 2026 on its pricing page; they change, so check their site.
Other status page tools have free plans too, as reported in 2026: Instatus Starter has 15 monitors with 2-minute checks, 5 team members and 200 subscribers on one public page without a custom domain, and Better Stack's free plan has 10 monitors, 1 status page and 1,000 subscribers. Both check your site for you, which Status does not. Status has no paid tier to grow into, and every page gets the whole API.
For CI, monitoring and AI assistants
Your scripts and your assistant can keep it current.
Making a page needs no key. The owner key that comes back lets a script, a monitor or an assistant set component statuses, open, update and resolve incidents, and schedule maintenance. Reading a page as JSON or as a badge needs nothing.
Full reference: llms.txt and openapi.json. Treat the owner key like a password: keep it in your CI secrets.
Status does not check your site itself. The scheduled job on the right does: every 5 minutes it checks your site, opens an incident when it is down, and resolves it when it is back. GitHub may start scheduled jobs a few minutes late.
# Make a page (the answer has the admin link and the owner key) curl -X POST https://functions.bounded.sh/apps/189c33495e4bbc89bfb2901a/api/pages \ -H 'content-type: application/json' \ -d '{"slug": "acme", "name": "Acme", "components": ["Website", "API"]}' # Open an incident and mark the API down curl -X POST https://functions.bounded.sh/apps/189c33495e4bbc89bfb2901a/api/pages/acme/incidents \ -H 'x-owner-key: OWNER_KEY' -H 'content-type: application/json' \ -d '{"title": "API errors", "message": "We are looking into it.", "components": {"api": "major_outage"}}' # Resolve it: components go back to operational curl -X POST https://functions.bounded.sh/apps/189c33495e4bbc89bfb2901a/api/pages/acme/incidents/INCIDENT_ID/updates \ -H 'x-owner-key: OWNER_KEY' -H 'content-type: application/json' \ -d '{"status": "resolved", "message": "Fixed. Sorry for the trouble."}' # Anyone: the status as JSON, or a README badge curl https://functions.bounded.sh/apps/189c33495e4bbc89bfb2901a/api/pages/acme 
# .github/workflows/status.yml: a free uptime check
name: Status check
on:
schedule:
- cron: "*/5 * * * *"
jobs:
check:
runs-on: ubuntu-latest
steps:
- run: |
if curl -fsS --max-time 15 https://example.com/ > /dev/null; then s=operational; else s=major_outage; fi
curl -fsS -X PATCH https://functions.bounded.sh/apps/189c33495e4bbc89bfb2901a/api/pages/acme/components/website \
-H "x-owner-key: ${{ secrets.STATUS_OWNER_KEY }}" -H "content-type: application/json" \
-d "{\"status\": \"$s\", \"incident\": \"Website is down\"}"