A Windows tool that monitors the US Visa scheduling website for available appointment slots, sending desktop alerts when slots appear before a configured date threshold.
The script connects to an already-running Chrome instance via the Chrome DevTools Protocol (CDP). It periodically reloads the scheduling page, selects a consulate, and intercepts the API response that returns available appointment dates. When a date earlier than your threshold appears, it fires a Windows desktop notification and plays a system alert sound.
- Windows 10/11
- Python 3.10+
- Google Chrome
- A valid session on the visa scheduling site (you log in manually)
pip install -r requirements.txtrun_chrome.batThis opens Chrome with a separate profile and exposes the DevTools Protocol on port 9222. Do not close this window.
In the Chrome window that opened, navigate to the visa scheduling site and log in with your credentials.
python main.py --discoverDumps the API response from the scheduling page so you can confirm the connection is working and see what data is being returned.
python main.py --monitorThe script polls on the configured interval and prints status to the terminal. When a slot earlier than alert_threshold is found, it shows a Windows toast notification and plays an alert sound.
Edit config.json:
{
"cdp_url": "http://localhost:9222",
"target_url": "https://www.usvisascheduling.com/...",
"poll_interval_seconds": 60,
"alert_threshold": "2026-04-07"
}| Key | Description |
|---|---|
cdp_url |
Chrome DevTools Protocol endpoint |
target_url |
Full URL of the scheduling/reschedule page |
poll_interval_seconds |
How often to check (seconds) |
alert_threshold |
Alert fires for any slot dated before this date (YYYY-MM-DD) |
You can also point to a different config file:
python main.py --monitor --config my_config.jsonIf your session expires mid-run, the monitor detects the login redirect, pauses polling, and automatically resumes once you log back in through the open Chrome window.
- Desktop notifications require
winotifyand only work on Windows. - The Chrome profile used by
run_chrome.batis separate from your normal Chrome profile, so it won't interfere with your existing sessions.