Inspiration
Going to the movies in NYC means checking multiple movie sites to find the best seats with the best price: AMC, Regal, and indie theater sites one by one. Each has its own layout, seat map, and ticket flow, and there’s no public showtimes API (Fandango’s is partner-only). We wanted one search that works across all of them, and an agent that handles the tedious part, picking seats, securely handling the money.
What it does
You enter a movie, an NYC zip code, a date, a party size (1 to 6), and a seat preference, and ShowTime returns showtimes and booking links for up to 8 theaters, sorted by distance and time. Click Book and a cloud browser opens the booking link with its live view embedded in the app. An agent picks adjacent seats by your preference, selects Adult tickets, skips add-ons, and continues as a guest, then stops at Fandango’s guest checkout and reads back your seats and subtotal. The embedded browser becomes clickable and you enter your email and pay yourself. You can also choose “I’ll pick” to select your own seats before the agent handles checkout. The agent never receives card data or passwords, a read-only watcher pauses it on any payment signal, and every browser session is capped at 15 minutes.
Built-in safeguards:
The agent is never given payment details. A code-level guard ends the run the moment a card field or payment URL appears. A human approves every purchase by taking over the same browser. No account creation and no stored passwords.
How we built it
The server is Node, TypeScript, and Express, the web app is React and Vite, and shared TypeScript types plus zod validate every API request and every agent and model output. The Finder opens Fandango in an Anchor Browser cloud session through an NYC proxy, matches your input to a listed title (locally first, then with one Claude Haiku call), and reads showtimes and booking links straight from the page, caching results for 5 minutes. The Booker opens a fresh Anchor session per booking, embeds the live view, and runs an Anchor agent task for seats, tickets, and guest checkout, with Claude Haiku reading the seats and subtotal at the end. A read-only watcher on a second CDP connection checks the page every 1.5 seconds, and a MOCK=1 mode replays fixtures with no network or keys.
Challenges we ran into
The hardest part was stopping at payment reliably, since a prompt instruction alone wasn’t enough, so we added an independent watcher that pauses the agent on payment URLs, visible card or password fields, and visible payment-processor iframes. Fandango also loads PayPal and Braintree frames in the background on the seat map, so we had to ignore hidden and zero-size frames to avoid false alarms. Seat availability varies on real maps, so we made preference a ranking instead of a rule to keep nearly sold-out shows bookable. We also had to handle sign-in walls, slow runs, and ambiguous titles with clean handoffs and “Did you mean…” suggestions. Because everything depends on a live third-party site, mock mode with test inputs (zzz, fail, sold, login) let us exercise every path without it.
What we learned
A browser agent is the right tool when no API exists, but the guardrails matter as much as the agent itself. Human handoff is a feature, not a limitation, because letting the user take over the same browser builds trust and keeps the agent out of payment entirely. Layered defenses, meaning instructions, a watcher, and session caps, work better than prompt rules alone. Real pages are noisy, so telling a visible payment frame from a hidden background one took real care, and a mock mode made a one-day build on a flaky third-party site manageable.
Next Steps for Anchor
Next we want more ticketing sources and theater chains beyond Fandango, and more cities beyond NYC. We plan to add a demand signal per showing, such as seat fill read from the seat map, and a Watch mode that monitors sold-out or not-yet-on-sale showings and alerts you when they open up. We’d also like smarter seat preferences like aisle or accessible seating, group booking where friends share preferences, and eventually official integrations with theater chains.
Built With
- anchor
- antrophic
- arize
- react
- typescript
- vite

Log in or sign up for Devpost to join the conversation.