ilia c8a82e264c Add tests, geo search, noise filtering, sports scoring, and dedup improvements.
Tests cover providers, dedup, Telegram, scoring, main runner, and Airbnb stubs.
Ticketmaster and SeatGeek use configurable lat/lon/radius (Thornhill default).
Pipeline filters noise listings, merges same-day sports duplicates, optional
MIN_ALERT_SCORE, and Telegram severity summary.

Made-with: Cursor
2026-04-04 15:25:35 -04:00

EventRate

Local Python application that identifies upcoming Toronto events likely to increase Airbnb demand, sends Telegram alerts, and optionally adjusts nightly prices via Playwright automation.

Quick start

# 1. Clone and enter
git clone https://git.levkin.ca/ilia/AtAnyRate.git
cd AtAnyRate

# 2. Create a virtual environment
python3 -m venv .venv
source .venv/bin/activate

# 3. Install dependencies
pip install -r requirements.txt
playwright install chromium

# 4. Configure
cp .env.example .env
# Edit .env with your API keys (see below)

# 5. Run
python -m src.main --dry-run        # preview only, no side effects
python -m src.main --alerts-only    # fetch events + send Telegram
python -m src.main                  # full flow (alerts + Airbnb update)

Environment variables

Variable Required Description
TICKETMASTER_KEY Yes Ticketmaster Discovery API key (free tier)
SEATGEEK_CLIENT_ID Yes SeatGeek API client ID (free tier)
TELEGRAM_BOT_TOKEN Yes Telegram bot token from @BotFather
TELEGRAM_CHAT_ID Yes Your Telegram chat/user ID
AIRBNB_LISTING_ID No Airbnb listing ID for calendar automation
AIRBNB_BASE_PRICE No Base nightly price (CAD)
PRICE_INCREASE_PCT No Price increase percentage for event dates (default: 20)
LOOKAHEAD_DAYS No Days ahead to scan for events (default: 30)
LOG_LEVEL No Logging level (default: INFO)

Airbnb session setup (one-time)

python scripts/airbnb_login.py

This opens a headed browser. Log in manually, complete any 2FA, then press Enter in the terminal. Your session is saved to state.json for reuse in headless runs.

Running on cron

# Weekly Monday 8 AM
0 8 * * 1 cd /path/to/AtAnyRate && .venv/bin/python -m src.main --alerts-only >> /var/log/eventrate.log 2>&1

Docker

docker build -t eventrate .
docker run --rm --env-file .env -v $(pwd)/state.json:/app/state.json eventrate

Project docs

Description
No description provided
Readme 43 KiB
Languages
Python 99.3%
Dockerfile 0.7%