Wire up Ticketmaster, SeatGeek, Telegram, scoring, Playwright stubs. Deduplicate events with fuzzy venue/name matching. Retry calendar updates on transient failures. Backlog tasks marked complete. Made-with: Cursor
2.3 KiB
2.3 KiB
Project: EventRate
Purpose
Maximize Airbnb hosting revenue by automatically detecting high-demand dates in Toronto and adjusting nightly pricing accordingly.
Problem
Toronto hosts major events (Raptors, Leafs, Blue Jays, concerts, festivals) that drive short-term rental demand. Manually tracking these events and updating Airbnb prices is tedious and error-prone. Missing a single large event can mean hundreds of dollars in lost revenue.
Solution
A local Python application that:
- Fetches upcoming Toronto events from free public APIs (Ticketmaster, SeatGeek).
- Normalizes events into a common model and deduplicates across sources.
- Scores events based on likely pricing impact (venue size, event type).
- Alerts the host via Telegram with a summary of flagged dates.
- Optionally automates Airbnb calendar price updates using Playwright.
Scope
In scope (v1)
- Ticketmaster Discovery API integration
- SeatGeek API integration
- Event normalization and deduplication
- Simple rule-based impact scoring
- Telegram notifications (primary output)
- Playwright-based Airbnb calendar automation (opt-in, fragile)
- CLI with dry-run / alerts-only / full modes
- Docker support
Out of scope (v1)
- Web UI
- Cloud deployment / hosted service
- Database / persistent storage
- Paid API integrations
- Sophisticated pricing algorithms (ML, dynamic pricing)
- Multi-city support
- Multi-listing support
Technical constraints
- Python 3.11+
- Runs locally first, cron later
- Configuration via environment variables
- Minimal external dependencies
- Structured logging
- Idempotent where possible
Key risks and assumptions
| # | Item | Type | Notes |
|---|---|---|---|
| 1 | Airbnb has no public pricing API | Assumption | Must use browser automation; inherently fragile |
| 2 | Airbnb UI selectors will change | Risk | Selectors isolated behind a dedicated module; manual fallback is Telegram-only |
| 3 | Free API tiers have rate limits | Risk | Weekly/monthly runs stay well within limits |
| 4 | Ticketmaster/SeatGeek cover major Toronto events | Assumption | May need additional providers later |
| 5 | 2FA/CAPTCHA on Airbnb login | Risk | Handled by one-time manual login with saved storage state |
| 6 | Event data quality varies across providers | Assumption | Deduplication is best-effort by date + venue + fuzzy name |