Three hosts, good for 90 days.
Notifications from anything you run.
Send an alert from a script, a server or any other tool that can reach a web address, and your iPhone lights up.
Free to download, with nothing to sign up for. Also on Apple Watch.
Each message from your scripts and tools arrives like this.
Tests passed, signing did not. Tap for the log.
Freed 61 GB. Nothing to do.
Answered in 212 ms after 4 minutes down.
94% on /data. About six hours left.
Three hosts, good for 90 days.
Tests passed on all three regions.
Open since the car left. Nobody is home.
The size you wanted, at the price you set.
Three regions in six minutes, no errors.
Down for four minutes.
Notifications that ask.
Your script asks Deploy v2.4 to production? You tap Approve on the notification, and the script gets a signed answer.
- Approve or deny, yes or no, or up to three answers you write, such as Ship it, Hold or Roll back
- One answer per notification, recorded once. You choose how long it stays open, from ten seconds to seven days
- Your code hears the answer by a callback signed with your secret, or asks for the receipt when it likes
- Answer from your iPhone or your Mac
Type a title. Watch it arrive.
Try it here: type a title and press Send to see it join the stack below. From your code, the same alert is one web request.
412 GB in 38 minutes, no errors.
Six services rotated, 3.1 GB freed.
94% on /data. About six hours left.
Send it from your codeIn curl, Python or JavaScript, or from apps that already speak Prowl.
curl https://nowlark.com/v1/notify \
-H "X-Nowlark-Key: $NOWLARK_API_KEY" \
-H "Content-Type: application/json" \
-d '{"source":"Backup","title":"Finished",
"body":"412 GB in 38 minutes, no errors."}' import json, os, shutil, time, urllib.request
free = shutil.disk_usage("/data").free / 2**30
if free < 50:
body = json.dumps({
"source": "srv-01",
"title": "Disk almost full",
"body": f"{free:.0f} GB left on /data.",
"priority": 2,
"dedupe_key": "disk-" + time.strftime("%Y-%m-%d"),
"links": [{"label": "Open in Slack", "url": "slack://open"}],
}).encode()
urllib.request.urlopen(urllib.request.Request(
"https://nowlark.com/v1/notify", data=body,
headers={"X-Nowlark-Key": os.environ["NOWLARK_API_KEY"],
"Content-Type": "application/json"},
))const res = await fetch(
"https://nowlark.com/v1/notify", {
method: "POST",
headers: {
"X-Nowlark-Key": process.env.NOWLARK_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
source: "srv-01",
title: "Disk almost full",
body: "38 GB left on /data.",
priority: 2,
links: [{ label: "Open in Slack", url: "slack://open" }],
}),
},
);- Notification type
- Prowl
- Server
- https://nowlark.com
- API key
- Your Nowlark key, nlk_…
- Priority
- -2 to 2, same as before
Settings › Connect an App in the app has your key, and this command with the key already in it, ready to copy.
{
"id": "ntf_5f3c…",
"duplicate": false,
"muted": false,
"delivered": 2,
"devices": 2,
"remaining": 999,
"reset_at": 1789665600.0
}
delivered is how many of your devices Apple accepted it for.
Send a dedupe_key and the same alert arriving twice is delivered once, so a job that
retries on a schedule cannot wake you again.
How it works.
Three steps from opening the app to your first notification from a script.
Get it free from the App Store, allow notifications, then tap Send a Test.
Settings › Connect an App › Create Your Key. It can only send: a leaked key can't read your history or touch your account.
Paste one command into your script or terminal. Settings › Connect an App has the address, the key and the line, ready to copy.
Start free. Upgrade when you need more.
Free covers 1 device and 1 month of history. The Upgrade Pass: every device, a year of history.
Free
App StoreFor one phone, with no ads.
- Delivered through Apple's push service at every priority, including time-sensitive
- 1,000 requests an hour per key, no monthly limit
- 1 device and 1 API key
- 1 month of history
- Urgent notifications that repeat until you open them
- Links, sources, themes and iCloud Sync
Upgrade Pass
App Storea year, or $24.99 once for life. Optional.
- Every device you own
- A separate key for each script
- History for 3 months, 6 months or a year
- Images and buttons on notifications
- Your choice of tones, per priority and per source
- Yearly: features released while it's active stay yours after it ends
- Once for life: everything, including what we add later
Teams
Weba month for up to 5 people and 3 forms.
- One alert to the whole group. The first to open it takes it
- Nobody opened it? It goes to your backups
- A contact form whose messages alert your team
- Staff sign in with the company account
- A record of who changed what
- Team Plus: any number of people and forms, $49 a month
- 14 days free with one form, no card
Free and the Upgrade Pass are bought in the App Store and paid through Apple, in your currency. Teams is bought on the web and paid through Paddle, our reseller.
Your data, stated plainly.
If Nowlark ever closes, you get at least 90 days' notice first. The privacy policy covers the rest.
Already using Prowl or ntfy?
Change the address and the key. Everything else stays as it is.
Coming from Prowl?
Point your script at Nowlark and use a Nowlark key. Nothing else changes.
−https://api.prowlapp.com/The add and verify calls work as on Prowl: the same fields, replies and priorities.publicapi/ +https://nowlark.com/add publicapi/ −apikey=<your Prowl key>+apikey=nlk_…add
Using an app with an ntfy option?
Choose ntfy, set the server and paste your key as the access token.
−server: https://ntfy.sh+server: https://nowlark.com−token: (none)+token: nlk_…Any topic name works. Uptime Kuma, Apprise and changedetection.io connect this way.
Set up with an AI agent.
Paste one prompt into the coding agent you already use. It isn't done until a test reaches your phone.
- 1Reads your projectIt looks at your code before asking anything.
- 2Asks what it can't findWhat should wake you, and what should stay quiet.
- 3Builds it and proves itA small send function, then a real test on your phone.
Works withClaude CodeCodexCursorCopilot
Your next alert, on your phone.
Free, with nothing to sign up for. Or start a team.