Stop refreshing BookMyShow. Start watching the seats that actually matter.
Seat Watcher is a private seat-availability radar for BookMyShow. Give it a show, the rows you care about, and the number of adjacent seats your group needs. It keeps checking the live layout, reconstructs the seat map, and alerts you the moment a matching block appears.
Caution
Seat Watcher is an independent, personal, non-commercial project. It is not affiliated with or authorized by BookMyShow. Automated access may be restricted by BookMyShow's terms, and public source code is not permission to access its service. Read the Legal and Responsible Use Notice and Privacy Notice before running or distributing this software.
Note
No behavioral tracking: Seat Watcher contains no advertising, analytics, fingerprinting, or cross-site profiling code. It does not request or store BookMyShow credentials or payment details. It processes only the account, watch configuration, seat result, and extension-status data required to provide the service. See PRIVACY.md for the exact data flow.
The frustrating part of booking a popular show is not finding a seat. It is finding three or four good seats together without spending the evening refreshing a seat chart.
Seat Watcher turns that repeated manual check into one quiet rule:
Tell me when at least 3 adjacent seats open in rows H, J, or K.
Until that happens, it stays out of the way. When it does, the watch card lights up, the live seat map shows exactly where the opening is, and the browser raises an alert.
- Row-level targeting - watch only the rows you would genuinely book.
- Contiguous-seat detection - distinguish a real group opening from scattered singles.
- Live visual seat maps - inspect available and sold seats without decoding a table.
- Two monitoring modes - local Playwright checks or a paired Edge/Chrome companion.
- Private watchlists - JSON locally, or Azure Cosmos DB with Easy Auth in the cloud.
- Immediate alerts - in-page audio plus native browser-extension notifications.
- No BookMyShow password - the watcher reads the public seat-layout page.
flowchart LR
A[Choose a show, rows, and group size] --> B[Open the BookMyShow seat layout]
B --> C[Read the rendered Konva seat canvas]
C --> D[Rebuild rows and test adjacent runs]
D --> E[Update the private watchlist]
E --> F[Sound and native notification on a match]
- You define the match. Add a BookMyShow seat-layout URL, row letters, a seat count, and whether those seats must be together.
- A browser checks the real page. Locally, Playwright runs headless Chromium. In a hosted setup, the Edge/Chrome companion checks through your own browser and internet connection.
- Seat Watcher reads the canvas model. BookMyShow renders its map with Konva. The checker reads seat rectangles, labels, positions, and colors from that scene graph and reconstructs each requested row.
- The rule engine looks for a useful opening. It counts available seats and the longest adjacent run. A match updates the dashboard and triggers an alert.
The browser companion opens each layout in an inactive background tab, reads the map, sends only the normalized result back to Seat Watcher, and closes the tab. It checks once per minute while the browser is running.
The hosted mode guides users through downloading, loading, and privately pairing the companion extension.
The popup keeps pairing and manual checks compact. Monitoring continues in the background after it is connected.
- Node.js 22 or newer
- npm
- Microsoft Edge or Chrome for the optional companion mode
git clone https://github.com/madhus1025/SeatWatcher.git
cd SeatWatcher
npm install
npx playwright install chromium
npm startOpen http://localhost:8080. Local watches are saved to
watches.json, which is intentionally excluded from Git.
- Open a movie on BookMyShow and choose a theater and showtime.
- Continue until the URL contains
/seat-layout/, then copy that URL. - In Seat Watcher, choose Add a show to watch.
- Enter rows such as
H, J, K, the number of seats needed, and whether they must be together. - Enable sound once if you want the in-page alarm.
The companion is useful for cloud deployments where BookMyShow blocks data center traffic, and it keeps checks on the user's own connection.
-
Start the app in companion mode:
SERVER_MONITORING=0 npm start
-
Download the extension from the setup panel, or use the
browser-extension/directory directly. -
Open
edge://extensionsorchrome://extensions. -
Enable Developer mode, choose Load unpacked, and select the extracted extension folder.
-
Generate a pairing code in Seat Watcher and paste it into the extension.
Keep Edge or Chrome running while monitoring is active.
| Variable | Default | Purpose |
|---|---|---|
PORT |
8080 |
HTTP port |
CHECK_INTERVAL |
15 |
Seconds between server-side checks |
MAX_CONCURRENT |
3 |
Parallel server-side checks |
CHECK_TIMEOUT |
45000 |
Per-check timeout in milliseconds |
HEADLESS |
1 |
Set to 0 to show Playwright's browser |
DATA_FILE |
./watches.json |
Local watchlist path |
SERVER_MONITORING |
1 |
Set to 0 for companion-only checks |
AUTH_REQUIRED |
0 |
Require the hosting platform's authenticated user headers |
LOCAL_USER_ID |
local-user |
User partition used in local development |
COSMOS_ENDPOINT / COSMOS_KEY |
unset | Enable Cosmos DB persistence when both are set |
COSMOS_DATABASE |
seatwatcher |
Cosmos DB database name |
COSMOS_CONTAINER |
watches |
Cosmos DB container name, partitioned by userId |
APP_BASE_URL |
hosted app URL | Public URL encoded into extension pairing codes |
EXTENSION_TOKEN_SECRET |
random per process | HMAC secret for durable companion pairings |
For a hosted deployment, set a stable EXTENSION_TOKEN_SECRET; otherwise
pairing codes stop working after a server restart.
The included Dockerfile installs Chromium and runs the Express app on port
8080. A production Azure setup normally uses:
- Azure App Service or Container Apps for the web app
- App Service Authentication (Easy Auth) for private user identity
- Cosmos DB for durable, user-partitioned watchlists
SERVER_MONITORING=0so the paired browser performs BookMyShow checks- A stable
EXTENSION_TOKEN_SECRETstored as an application secret
The container needs at least 1 GB of memory when server-side Playwright monitoring is enabled.
server.js Express API, monitoring loop, auth, and pairing
storage.js Local JSON and Azure Cosmos DB stores
public/ Dashboard, live seat maps, alarms, and setup UI
browser-extension/ Manifest V3 Edge/Chrome monitoring companion
scripts/ Help and README screenshot capture
Dockerfile Chromium-ready production image
With the app running on port 8080 and Microsoft Edge installed:
npm run screenshotsThe script uses synthetic demo responses, so screenshots never expose a local watchlist or a real BookMyShow session URL.
Region cookies are currently mapped for Hyderabad and Visakhapatnam, including
the hyd, hyderabad, visa, visakhapatnam, and vizag URL slugs. Unknown
slugs fall back to Hyderabad.
Seat Watcher is not affiliated with, authorized by, sponsored by, or endorsed by BookMyShow or Bigtree Entertainment. BookMyShow's current Terms and Conditions describe the website as intended for personal use and impose restrictions relevant to automated extraction and reuse. You are responsible for obtaining any required permission and complying with applicable terms and law.
Do not use this project to bypass CAPTCHAs, access controls, rate limits, or blocks; access account or payment data; run commercial or large-scale monitoring; republish third-party content; or impair the service. Use conservative intervals and stop if the service objects or blocks access.
See LEGAL.md for the complete project notice and PRIVACY.md for the local, hosted, and browser-extension data flow. These notices provide transparency but do not eliminate legal or contractual risk. Written permission from the service operator is the lowest-risk route.
This is a good-faith, personal, non-commercial engineering project. It is not intended to access customer accounts, payment data, private information, or booking inventory. If any code, content, name, or operation raises a concern, please contact the owner through the madhus1025 GitHub profile or open a repository issue identifying the affected material and requested action. Sensitive security details can be submitted through GitHub private vulnerability reporting. The owner intends to review the request promptly and, where reasonably appropriate, disable or remove disputed functionality or content while the concern is evaluated.
Where appropriate, direct notice and a reasonable opportunity to address the concern before escalation would be appreciated. This is a good-faith request, not a waiver of anyone's rights and not a guarantee against legal action, damages, costs, or penalties.


