A Python-based monitoring tool that continuously checks Apple TestFlight beta availability and sends notifications through Apprise when slots become available.
- π Real-time Notifications β Get notified instantly when a TestFlight beta opens up
- π± 80+ Notification Services β Supports Discord, Slack, Telegram, Pushover, Email, and many more via Apprise
- π Web Dashboard β Built-in FastAPI web interface to monitor status and manage TestFlight IDs
- π³ Docker Support β Easy deployment with Docker and Docker Compose
- β‘ High Performance β Async HTTP requests with connection pooling and caching
- π Status Tracking β Detects status changes (Open, Full, Closed) and notifies accordingly
- π Heartbeat Notifications β Optional periodic notifications to confirm the service is running
- π¨ Dark Mode UI β Modern, responsive web dashboard with dark/light theme toggle
- π Code Editor - Basic code editor to live modify your .env files and restart services through web dashboard.
The notifier detects the following TestFlight statuses:
| Status | Description |
|---|---|
| OPEN | Beta is accepting new testers β notification sent! |
| FULL | Beta is full, not accepting new testers |
| CLOSED | Beta is no longer available |
| UNKNOWN | Unable to determine status |
- Python 3.11+
- pip (Python package manager)
-
Clone the repository:
git clone https://github.com/klept0/TestFlight_Apprise_Notifier.git cd TestFlight_Apprise_Notifier -
Install dependencies:
pip install -r requirements.txt
-
Create your configuration file:
cp .env.example .env
-
Edit
.envwith your settings (see Configuration below) -
Run the application:
python main.py
-
Clone the repository:
git clone https://github.com/klept0/TestFlight_Apprise_Notifier.git cd TestFlight_Apprise_Notifier -
Create your configuration file:
cp .env.example .env
-
Edit
.envwith your settings -
Start with Docker Compose:
docker-compose up -d
-
View logs:
docker-compose logs -f
For detailed Docker instructions, see DOCKER.md.
All configuration is done through environment variables in the .env file.
| Variable | Description | Example |
|---|---|---|
ID_LIST |
Comma-separated TestFlight IDs to monitor | abc123,def456,ghi789 |
APPRISE_URL |
Apprise notification URL(s), comma-separated | discord://webhook_id/token |
| Variable | Default | Description |
|---|---|---|
INTERVAL_CHECK |
10000 |
Check interval in milliseconds |
HEARTBEAT_INTERVAL |
6 |
Hours between heartbeat notifications (0 to disable) |
ALWAYS_NOTIFY_OPEN |
false |
Send notification on every poll when status is OPEN |
FASTAPI_HOST |
0.0.0.0 |
Web dashboard bind address |
FASTAPI_PORT |
8080 |
Web dashboard port |
# TestFlight IDs to monitor (comma-separated)
ID_LIST=abc12345,xyz98765,test1234
# Apprise notification URLs (comma-separated for multiple)
APPRISE_URL=discord://webhook_id/webhook_token,tgram://bot_token/chat_id
# Check every 10 seconds (10000ms)
INTERVAL_CHECK=10000
# Send heartbeat every 6 hours
HEARTBEAT_INTERVAL=6
# Only notify once when beta opens (not on every check)
ALWAYS_NOTIFY_OPEN=false
# Web dashboard settings
FASTAPI_HOST=0.0.0.0
FASTAPI_PORT=8080The TestFlight ID is the alphanumeric code at the end of a TestFlight URL:
https://testflight.apple.com/join/abc12345
^^^^^^^^
This is the ID
Apprise supports 80+ notification services. Here are some common examples:
| Service | URL Format |
|---|---|
| Discord | discord://webhook_id/webhook_token |
| Telegram | tgram://bot_token/chat_id |
| Slack | slack://token_a/token_b/token_c |
| Pushover | pover://user_key@app_token |
mailto://user:password@gmail.com |
|
| Gotify | gotify://hostname/token |
| ntfy | ntfy://topic |
For the full list, see the Apprise documentation.
Once running, access the web dashboard at http://localhost:8080 (or your configured host/port).
- Live Status β View current status of all monitored TestFlight betas
- Add/Remove IDs β Dynamically manage TestFlight IDs without restarting
- Manage Notifications β Add or remove Apprise notification URLs
- View Logs β See recent application logs
- Metrics β View check statistics and uptime
- Dark Mode β Toggle between light and dark themes
| Endpoint | Method | Description |
|---|---|---|
/ |
GET | Web dashboard |
/api/health |
GET | Health check endpoint |
/api/status |
GET | Current status of all TestFlight IDs |
/api/metrics |
GET | Application metrics |
/api/logs |
GET | Recent log entries |
/add |
POST | Add a TestFlight ID |
/remove |
POST | Remove a TestFlight ID |
aiohttp>=3.9.0,<4.0.0
apprise>=1.8.0,<2.0.0
beautifulsoup4>=4.12.0,<5.0.0
fastapi>=0.100.0,<1.0.0
python-dotenv>=1.0.0,<2.0.0
uvicorn[standard]>=0.23.0,<1.0.0
colorama>=0.4.0,<1.0.0
- Verify your
APPRISE_URLis correctly formatted - Check the logs for any error messages
- Ensure your notification service (Discord, Telegram, etc.) is properly configured
- Verify the ID is correct (8-12 alphanumeric characters)
- Check that the TestFlight link is still valid
- Some TestFlight betas may be region-locked
- Increase
INTERVAL_CHECKto reduce polling frequency - Reduce the number of monitored TestFlight IDs
- Consider using Docker with resource limits
This project is open source. See the LICENSE file for details.
Contributions are welcome! Please feel free to submit a Pull Request.