A dependency-free tool to list Gametime ticket prices and alert on price drops
Project description
Gametime ticket-price watcher
Note: This project was primarily generated and maintained with the assistance of AI (GitHub Copilot).
A small, dependency-free (standard-library only) Python tool that lists current gametime.co ticket prices for an event and alerts you when a desired number of seats in chosen sections drops below a target per-ticket price.
It answers questions like:
Tell me when 2 seats in the 200s are available for under $100 each for this game.
python -m gametime_watcher https://gtix.co/ymvO3hz2xGfg --sections 200-299 --quantity 2 --max-price 100
Pittsburgh Pirates at Athletics @ 2026-06-17T18:40:00
Criteria: 2 seat(s) in [200-299] <= $100.00/ticket
Found 0 of 97 listings:
(At the time of writing the cheapest 2-seat pair in the 200s is $101/ticket, so
nothing matches yet — run it with --watch to be alerted when one drops below
your threshold.)
How it works
Gametime server-renders the full set of listings for an event into the event page HTML. This tool:
- Resolves an event id from whatever you give it — a short link
(
https://gtix.co/...), a full event/listing URL, or a bare 24-character id. - Downloads
https://gametime.co/events/<id>(no API key required). - Parses every listing's section, row, seats, purchasable lot sizes, and all-in per-ticket price (the price shown on the site, fees included).
- Filters by your section / price / quantity criteria and prints the cheapest matches first.
⚠️ This reads Gametime's public web page. It's intended for personal use; be respectful with polling intervals (the default is 5 minutes) and check Gametime's Terms of Service. Page structure may change over time.
Usage
Scan all games for a team (search + filter in one command)
python -m gametime_watcher scan-all <query> [filter options] [--home-only] [--json]
<query> Team or performer name (e.g. "Athletics")
-s, --sections SPEC Section filter (may be repeated)
-p, --max-price N Max all-in price PER TICKET, in dollars
-q, --quantity N Seats wanted together (default 1)
--allow-larger Also keep larger lots
--home-only Only scan home games
--json Output JSON instead of text
Example: find all Athletics home games with Solon Club tickets, 2 seats, under $100 each:
python -m gametime_watcher scan-all Athletics --home-only -s "Solon Club" -q 2 -p 100
Los Angeles Angels at Athletics @ 2026-06-21T13:05:00 — 2 match(es):
$ 95.00/tkt sec 201 (Solon Club) row 2 seats[1,2,3,4] lots:2/4, face $144.50
$ 98.00/tkt sec 203 (Solon Club) row 6 seats[5,6] lots:2, face $170.00
Athletics at Detroit Tigers @ 2026-07-07T18:40:00 — no matches
...
Search for events (find game links)
python -m gametime_watcher search <query> [--home-only] [--json]
<query> Team or performer name (e.g. "Athletics")
--home-only Show only home games
--json Output JSON instead of text
Example: find all upcoming Athletics home games:
python -m gametime_watcher search Athletics --home-only
Found 55 upcoming home event(s) for 'Athletics':
2026-06-14T12:05:00 Colorado Rockies at Athletics from $9
https://gametime.co/events/68af57d5bf6276ee588dd924
2026-06-15T18:40:00 Pittsburgh Pirates at Athletics from $20
https://gametime.co/events/68af5b70f2def3b1e914a475
...
Watch a single event
python -m gametime_watcher <event> [options]
<event> Gametime event/listing URL, short link, or 24-char id
-s, --sections SPEC Section filter. Comma-separated tokens, each one of:
200-299 an inclusive numeric range
A-D an inclusive alphabetic range
119 an exact section
"Solon Club" a section-group / section name
May be given multiple times to combine filters (OR).
Default: all sections.
-p, --max-price N Maximum all-in price PER TICKET, in dollars.
-q, --quantity N Seats wanted together (default 1). Only listings that
offer this exact lot size are kept.
--allow-larger Also keep listings that only offer a larger lot.
--json Emit JSON instead of text.
--watch Poll repeatedly, alerting only on newly-seen matches.
--interval SECONDS Polling interval for --watch (default 300).
--webhook URL POST a JSON payload to URL on new matches.
--command CMD Run CMD on new matches (JSON payload sent on stdin).
--user-agent UA Override the HTTP User-Agent.
--timeout SECONDS HTTP timeout (default 30).
The one-shot mode exits 0 when matches are found and 1 when none are, which
makes it easy to drive from cron or shell scripts.
Examples
Flexible by design — change sections and price freely:
# 4 seats in the lower bowl (sections 100-130) under $75 each
python -m gametime_watcher 68af5b72c95bdeed8553f07f -s 100-130 -q 4 -p 75
# Any 2 seats in a named club section
python -m gametime_watcher <url> -s "Solon Club" -q 2
# Letter sections A through D
python -m gametime_watcher <url> -s A-D -q 2 -p 50
# Mix ranges, exact sections, and names (comma-separated or repeated -s)
python -m gametime_watcher <url> -s "200-299,119,Field Level" -q 2 -p 120
python -m gametime_watcher <url> -s 200-299 -s 119 -s "Field Level" -q 2 -p 120
Watch and get notified (every 2 minutes) via a webhook:
python -m gametime_watcher https://gtix.co/ymvO3hz2xGfg \
-s 200-299 -q 2 -p 100 \
--watch --interval 120 --webhook https://hooks.example.com/my-endpoint
Or run a local notifier on each new match (payload arrives on stdin):
python -m gametime_watcher <url> -s 200-299 -q 2 -p 100 \
--watch --command "python my_notifier.py"
Library API
from gametime_watcher import (
search_events, extract_event_id, fetch_event_html,
parse_event, parse_listings, filter_listings,
)
# Find all upcoming Athletics games
events = search_events("Athletics")
for ev in events:
print(ev.name, ev.datetime_local, ev.extra["url"])
# Then check a specific event for deals
event_id = extract_event_id("https://gtix.co/ymvO3hz2xGfg")
html = fetch_event_html(event_id)
event = parse_event(html)
listings = parse_listings(html)
deals = filter_listings(listings, sections="Solon Club", quantity=2, max_price_dollars=100)
for l in deals:
print(l.section, l.row, f"${l.price_total_dollars:.2f}/ticket", l.available_lots)
Listing.price_total is the all-in price per ticket in cents;
Listing.available_lots lists the group sizes you may buy (e.g. [2, 4]).
Development
pip install pytest
python -m pytest
Tests are fully offline: parsing and CLI tests run against
tests/fixtures/event_page.html, and the network is stubbed in the CLI tests.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file gametime_watcher-0.0.5.tar.gz.
File metadata
- Download URL: gametime_watcher-0.0.5.tar.gz
- Upload date:
- Size: 24.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
33a1dbfbea4c8e8eea76f319308078661ff9c697e950bc1a5c137d652545bc55
|
|
| MD5 |
fd8f451f99588892ad6d1a93d140d777
|
|
| BLAKE2b-256 |
b2034d60b528f1c4ca1730ab87562dca3d735b0b72f2a7da4c36d72b3a73cfd6
|
File details
Details for the file gametime_watcher-0.0.5-py3-none-any.whl.
File metadata
- Download URL: gametime_watcher-0.0.5-py3-none-any.whl
- Upload date:
- Size: 18.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
95694425a578b56d35ba758b9ca5c83b45206711b1a0f7b166da7423401135ce
|
|
| MD5 |
9cb9f537977f52c2a7b334cb5a839296
|
|
| BLAKE2b-256 |
c7935c8f0a78ddafcf1b3cf2e81f45608f9d7e0cebc01f70d9fb51ed69f617a4
|