A Python tool for monitoring and automatically booking NSW driving test slots through the Service NSW booking system (myrta.com).
- Continuous Monitoring: Automatically checks for available slots at configurable intervals
- Multi-Centre Support: Monitor multiple test centres simultaneously
- Smart Filtering: Filter slots by date range and preferred centres
- Auto-Booking: Automatically book slots when they become available (optional)
- Notifications: Get notified via Telegram and/or desktop notifications
- Anti-Detection: Browser impersonation to avoid bot detection
- Configurable: YAML-based configuration for easy customization
- Python 3.10 or higher
- An existing driving test booking with Service NSW
- Your booking ID and surname
git clone https://github.com/yourusername/rta-slot-sniper.git
cd rta-slot-sniper# Using pip
pip install -r requirements.txt
# Or using pip with optional notifications
pip install -r requirements.txt plyer
# Or install as a package
pip install -e .cp config/config.example.yaml config/config.yamlEdit config/config.yaml with your details:
booking:
booking_id: "YOUR_BOOKING_ID"
surname: "YOUR_SURNAME"
phone_number: "04XXXXXXXX"
search:
postcode: "2036"
suburb_name: "Eastgardens"
search_dates:
- "10/11/2025"
- "17/11/2025"
slot_after: "10/11/2025 08:00"
slot_before: "30/11/2025 17:00"
centre_whitelist:
- "Marrickville"
- "Botany"
- "Eastgardens"# Run with default config
python -m src.main
# Or if installed as a package
rta-sniperusage: rta-sniper [-h] [-c FILE] [-v] [--dry-run] [--once] [--version]
Monitor and automatically book NSW driving test slots.
options:
-h, --help show this help message and exit
-c FILE, --config FILE
Path to configuration file (default: config.yaml)
-v, --verbose Enable verbose/debug logging
--dry-run Check for slots but don't book (notification only mode)
--once Run a single check then exit (don't loop)
--version show program's version number and exit
# Standard monitoring mode
python -m src.main
# Use a custom config file
python -m src.main -c /path/to/my-config.yaml
# Notification-only mode (don't auto-book)
python -m src.main --dry-run
# Single check (useful for cron jobs)
python -m src.main --once
# Verbose output for debugging
python -m src.main -v| Option | Description | Required |
|---|---|---|
booking_id |
Your Service NSW booking reference | Yes |
surname |
Surname on the booking | Yes |
phone_number |
Contact number for confirmation | Yes |
| Option | Description | Required |
|---|---|---|
postcode |
Postcode to search for centres | Yes |
suburb_name |
Specific suburb (for disambiguation) | No |
search_dates |
List of dates to check (DD/MM/YYYY) | Yes |
slot_after |
Only book slots after this time | No |
slot_before |
Only book slots before this time | No |
centre_whitelist |
List of preferred centres | No |
| Option | Default | Description |
|---|---|---|
recheck_interval |
30 | Seconds between checks |
renotify_interval |
1800 | Seconds before re-notifying about same slot |
notifications:
telegram:
enabled: true
bot_token: "YOUR_BOT_TOKEN"
chat_id: "YOUR_CHAT_ID"To set up Telegram notifications:
- Create a bot via @BotFather
- Get your chat ID via @userinfobot
- Add the bot to your chat/channel
notifications:
desktop:
enabled: trueRequires the plyer package: pip install plyer
rta-slot-sniper/
βββ config/
β βββ config.example.yaml # Example configuration
βββ src/
β βββ __init__.py # Package initialization
β βββ api_client.py # RTA website API client
β βββ config.py # Configuration loader
β βββ main.py # CLI entry point
β βββ notifications.py # Notification handlers
β βββ sniper.py # Main orchestration logic
βββ tests/ # Unit tests
βββ pyproject.toml # Project metadata
βββ requirements.txt # Dependencies
βββ README.md # This file
# Clone and enter directory
git clone https://github.com/yourusername/rta-slot-sniper.git
cd rta-slot-sniper
# Create virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install with dev dependencies
pip install -e ".[dev,notifications]"pytest# Format code
black src/
isort src/
# Lint
ruff check src/
mypy src/This tool is for personal use only. Please:
- Use responsibly and respect Service NSW's terms of service
- Don't abuse the system with excessive requests
- Keep check intervals reasonable (30+ seconds recommended)
- Only use for your own legitimate bookings
The author is not responsible for any misuse of this tool.
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
Note: This project is not affiliated with Service NSW or Roads and Maritime Services.