Notifications¶
Tally can send a daily digest of your upcoming payments (plus trial-ending, over-budget, and cancel-decision alerts) to multiple channels. Timing is handled by the built-in scheduler, so no cron is required.
Supported channels: Discord · email (SMTP) · generic webhook · Slack · ntfy. Each is configured per-user, and you can enable several at once.
How it works¶
flowchart TD
A["Built-in scheduler<br/>(checks every minute)"] -->|Matches send time| B["Collect upcoming payments<br/>(within N days)"]
B --> C["Build digest<br/>+ budget warning & cancel-decision alerts"]
C --> D["Send simultaneously to all enabled channels"]
D --> E1["Discord"]
D --> E2["Email"]
D --> E3["Generic Webhook"]
D --> E4["Slack"]
D --> E5["ntfy"]
- The scheduler checks every minute and, once a day at your configured send time (based on the container's timezone), sends upcoming payments within the days-before range you set.
- Notifications go out simultaneously to every channel you've configured.
- Timing follows the container's
TZ(defaultAsia/Tokyo). - If you've set a monthly budget and the projected total exceeds it, a warning is added to the notification.
- If you've set a cancel-decision reminder for a subscription, a "Consider canceling" section is included in the notification a set number of days before renewal.
The send time and days-before range are set once, in Settings → Notifications, and apply to all channels.
Discord¶
- In Discord, go to Channel Settings → Integrations → Webhooks → New Webhook and copy the URL.
- Paste it into the Discord Webhook URL field under Settings → Notifications → Discord in Tally.
- Turn on "Automatically send Discord notifications of upcoming payments at this time every day."
- Use "Send test now" to verify it works (this sends to all enabled channels).
Email (SMTP)¶
Email notifications can be configured with per-user SMTP settings. Under Settings → Notifications → Email:
- Enter the recipient email address and turn on "Also send upcoming payments by email."
- Fill in the SMTP server settings below it (host / port / username / password / from address).
- Use "Send test now" to verify it works.
If per-user SMTP isn't configured, the server's environment variables are
used as a fallback. These aren't included in the default
docker-compose.yml, so add them only if you need a server-wide fallback:
environment:
SMTP_HOST: "smtp.example.com"
SMTP_PORT: "587" # 587 = STARTTLS, 465 = implicit TLS
SMTP_USER: "you@example.com"
SMTP_PASS: "app-password" # most providers require an app password
SMTP_FROM: "Tally <you@example.com>"
If neither is configured, email is skipped.
Handling of passwords
Saved SMTP passwords and access tokens are never displayed again in the browser (the settings screen shows a placeholder). Only enter a new value when you want to change it.
Generic webhook¶
POSTs upcoming payments as JSON to any URL. Handy for integrating with Zapier, IFTTT, n8n, and similar tools.
- Enter the Webhook URL under Settings → Notifications → Generic Webhook and enable it.
- Example payload sent:
{
"source": "tally",
"event": "upcoming_payments",
"daysBefore": 3,
"count": 2,
"currency": "USD",
"monthlyTotal": 62.90,
"budget": null,
"title": "2 payments due within 3 days",
"items": [ { "name": "Netflix", "price": "$15.49", "dateLabel": "…", "trial": false } ],
"reviewItems": []
}
Private-network destinations are allowed too
Since sending to n8n, ntfy, Gotify, and similar services on your home
network is a legitimate use case, the generic webhook and ntfy channels
also allow sending to private addresses. You're responsible for managing
the destination (Slack is restricted to hooks.slack.com only).
Slack¶
Sends to a Slack Incoming Webhook.
- Create a Slack app, enable Incoming Webhooks, and issue a webhook URL
for the channel (
https://hooks.slack.com/services/...). - Paste it into Settings → Notifications → Slack and enable it.
ntfy¶
Delivers push notifications to your smartphone (via ntfy.sh or your own server).
- Enter your ntfy topic URL (e.g.
https://ntfy.sh/your-topic) under Settings → Notifications → ntfy and enable it. - Optionally set an access token, if needed.
- Subscribe to the same topic in the ntfy app on your phone.
Optional: cron endpoint¶
A per-user, token-authenticated endpoint is also available for external schedulers (not normally needed, since Tally has a built-in scheduler):