A reservation sniper for Resy that helps you book hard-to-get restaurant reservations.
- Web Interface - Modern dark-themed UI for managing restaurants and reservations
- Smart Sniping - Wakes up at exact release time with connection pre-warming
- Fuzzy Time Matching - Books the closest available time within your preferred window
- Pre-loaded NYC Restaurants - Popular restaurants with release schedules from NYC RSVPs
- Background Daemon - Runs scheduled snipes automatically
# Create and activate virtual environment
python3 -m venv venv
source venv/bin/activate
# Install requirements
pip install -r requirements.txtpython main.pyOpen http://127.0.0.1:8080 in your browser.
- Go to Settings in the web UI
- Enter your Resy email and password
- Click Login to authenticate
- Go to Restaurants
- Click Browse Popular NYC for pre-configured restaurants, or
- Click Add Custom and search for any restaurant
- Go to Schedule
- Click Schedule Snipe
- Select restaurant, date, party size, and preferred time
- The bot will automatically attempt to book at release time
# Run the web UI (default)
python main.py
# Run on a custom port
python main.py --port 3000
# Test your credentials
python main.py --test
# Run daemon only (headless, for production)
python main.py --daemon
# Test booking flow without actually booking
python test_booking.py --dry-runImportant: This bot runs locally on your machine. For a snipe to work, the web server must be running and your computer must be awake at the scheduled release time. Plan accordingly—if you schedule a snipe for 9:00 AM tomorrow, make sure your laptop isn't asleep or shut down at that time.
Tip (macOS): Run
caffeinatein a terminal window to prevent your Mac from sleeping. Press Ctrl+C to stop it when you're done.
-
Release Time Calculation: The bot calculates when reservations are released based on the restaurant's schedule (e.g., 14 days in advance at 9:00 AM).
-
Pre-warming: 5 seconds before release, the bot wakes up and establishes HTTP connections.
-
Aggressive Polling: At exact release time, it polls every 100ms for available slots.
-
Smart Matching: Finds the best slot within your preferred time window (e.g., ±1 hour of 7:00 PM).
-
Instant Booking: Immediately books when a matching slot is found.
Key settings in config.py:
| Setting | Default | Description |
|---|---|---|
SNIPE_EARLY_WAKE_SECONDS |
5 | Seconds before release to wake up |
POLL_INTERVAL_SECONDS |
0.1 | Polling interval (100ms) |
SNIPE_WINDOW_SECONDS |
10 | How long to retry after release |
resy_bot/
├── main.py # Entry point
├── config.py # Configuration
├── requirements.txt # Dependencies
├── resy/ # Resy API client
├── scheduler/ # Background job scheduling
├── storage/ # SQLite database
├── web/ # FastAPI web interface
└── data/ # Runtime data (database, logs)
- Python 3.10+
- A valid Resy account
This tool is for personal use only. Use responsibly and in accordance with Resy's terms of service.
