Skip to content
Business
Skill

/ticketsatwork

Search TicketsAtWork (EBG corporate perks) for hotels, theme park tickets, attractions, and rental cars via Patchright. Often beats portals by 10-30%. Use when comparing hotel or ticket prices for a trip.

BOOST
From plugin
travel-hacker
69748 skills1 agent6 MCP
Install
$ npx -y skills add borski/travel-hacking-toolkit --skill ticketsatwork --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/ticketsatwork

Context preview

The summary Claude sees to decide when to auto-load this skill.

Search TicketsAtWork (EBG corporate perks) for hotels, theme park tickets, attractions, and rental cars via Patchright. Often beats portals by 10-30%. Use when comparing hotel or ticket prices for a trip.

SKILL.md

ticketsatwork.SKILL.md
name: ticketsatwork
description: Search TicketsAtWork (EBG corporate perks) for hotels, theme park tickets, attractions, and rental cars via Patchright. Often beats portals by 10-30%. Use when comparing hotel or ticket prices for a trip.
category: hotels
summary: TicketsAtWork (EBG) corporate-perks portal. Hotels, theme park tickets, attractions, live events. Often beats portals by 10-30%.
api_key: None (requires TaW account + Patchright)
docker_image: ghcr.io/borski/ticketsatwork
allowed-tools: Bash(docker *), Bash(python3 *)

TicketsAtWork

Scrapes inventory from [ticketsatwork.com](https://www.ticketsatwork.com), a corporate employee perks platform operated by Entertainment Benefits Group (EBG). Members access negotiated rates through their employer's account.

**No public API.** Patchright (undetected Playwright fork) is required because TaW is behind bot protection that blocks `requests`, vanilla Playwright, and headless Chrome.

Why TaW matters for travel hacking

TaW aggregates inventory from EBG's negotiated wholesale pool (similar inventory feeds as Costco Travel, AAA, etc.). On the same property + dates, TaW often beats:

  • The hotel's direct booking
  • Booking.com / Hotels.com / Expedia
  • Chase Travel (UR portal) and Amex Travel (MR portal)
  • Even Amex FHR / THC and Chase Edit on properties not in those programs

Discount badges are typically genuine: the "Save $X" amount is computed against the hotel's published rate at search time.

**Tradeoff:** No portal credits, no card-program elite benefits, no points earning on the stay. You earn TaW "Funlife" loyalty points usable at ~1 cpp on future TaW bookings only.

Capabilities

| Subcommand | What it does | Status | |------------|--------------|--------| | `hotels` | Hotel search by city + date range. Returns ~10-200+ properties with prices, savings vs strike rate, lat/lng, ratings, distance | Stable | | `cars` | Rental car search by pickup location + date/time range | **Experimental.** TaW resolves the autocomplete latlng but not always the airport code their car backend needs. Some valid-looking searches return "no cars at this location" even for major airports. See "Known limitations" below. | | `tickets` | Browse a category landing page (e.g. `disneyland`, `wdw`, `usf`) or keyword-search via Reflektion | Stable. Returns deal title, savings claim, description, image, detail URL. **Prices are not on the listing**, they appear on the detail page. |

Prerequisites

  • Docker running locally (for the published image) OR Patchright installed locally (`pip install patchright && patchright install chromium`)
  • A TaW account (created via your employer's TaW URL or corporate code)
  • TaW email + password set as `TAW_USER` and `TAW_PASS` environment variables

Authentication

Form-based email + password. The skill submits the login form via JavaScript directly. Each script run uses a fresh browser profile, so each run logs in fresh.

The visible "Sign in / Register" UI requires modal interactions that Patchright handles unreliably (cookie banner overlap, modal trigger visibility issues). The login form (`#member_login_form`) is in the DOM at all times, so we set values via JS and click the form's submit button.

Docker Usage

docker pull ghcr.io/borski/ticketsatwork:latest

# Hotels
docker run --rm -e TAW_USER -e TAW_PASS \
  ghcr.io/borski/ticketsatwork hotels \
  --city "Carlsbad, CA" --checkin 2027-03-04 --checkout 2027-03-07 \
  --rooms 1 --adults 2 --json

# Tickets / attractions (category)
docker run --rm -e TAW_USER -e TAW_PASS \
  ghcr.io/borski/ticketsatwork tickets \
  --category disneyland --json

# Tickets / attractions (keyword)
docker run --rm -e TAW_USER -e TAW_PASS \
  ghcr.io/borski/ticketsatwork tickets \
  --keyword "universal studios" --json

# Live events in destination cities (concerts, theater, sports)
docker run --rm -e TAW_USER -e TAW_PASS \
  ghcr.io/borski/ticketsatwork tickets \
  --section events --json

# Rental cars (experimental)
docker run --rm -e TAW_USER -e TAW_PASS \
  ghcr.io/borski/ticketsatwork cars \
  --pickup "San Diego Airport, CA" \
  --pickup-date 2026-06-15 --pickup-time 12:00 \
  --dropoff-date 2026-06-18 --dropoff-time 12:00 \
  --age 30 --json

Local Usage (opens a Chrome window briefly)

# Hotels
TAW_USER=you@example.com TAW_PASS=yourpass \
  python3 scripts/search_hotels.py --city "Carlsbad, CA" \
  --checkin 2027-03-04 --checkout 2027-03-07 --json

# Tickets
TAW_USER=you@example.com TAW_PASS=yourpass \
  python3 scripts/browse_tickets.py --category disneyland --json

# Cars
TAW_USER=you@example.com TAW_PASS=yourpass \
  python3 scripts/search_cars.py \
  --pickup "San Diego Airport, CA" \
  --pickup-date 2026-06-15 --pickup-time 12:00 \
  --dropoff-date 2026-06-18 --dropoff-time 12:00 --json

Hotels: arguments and output

Arguments

| Flag | Required | Default | Description | |------|----------|---------|-------------| | `--city` | yes | | City or address. Goes into the destination autocomplete. | | `--checkin` | yes | | Check-in date in `YYYY-MM-DD`. | | `--checkout` | yes | | Check-out date in `YYYY-MM-DD`. | | `--rooms` | no | 1 | Number of rooms. | | `--adults` | no | 2 | Adults per room. | | `--children` | no | 0 | Children per room. | | `--json` | no | off | Structured JSON instead of a human-readable table. | | `--debug` | no | off | Save screenshots + HTML at each step to `/output` (Docker) or `/tmp/taw_debug/` (local). | | `--raw-html-out` | no | | Write the raw results HTML to a file for offline analysis. |

Output schema (JSON mode)

{
  "city": "Carlsbad, CA",
  "checkin": "2027-03-04",
  "checkout": "2027-03-07",
  "rooms": 1,
  "adults": 2,
  "children": 0,
  "display_pages": 14,
  "listing_count": 134,
  "listings": [
    {
      "id": "hotel_NNNNNN_x",
      "name": "Property Display Name",
      "name_normalized": "property display name",
      "rating": 4.5,
      "guest_rating": 9.0,
      "price
Read more
Ships withtravel-hacker

AI-powered travel hacking with points, miles, and award flights. Drop-in skills and MCP servers for OpenCode, Claude Code, and Codex. Ask your AI to find you a 60,000-mile business class flight to Tokyo.

Get the whole plugin

Other skills on travel-hacker.