A comprehensive database and web dashboard for tracking 306 Greater Toronto Area tennis clubs with automated data collection and elegant Wimbledon-inspired UI.
This project centralizes tennis club information across the GTA, tracking 9 key data fields:
- Club Name
- Location
- Club Type (Private/Community/Public)
- Membership Status (Open/Waitlist/Full)
- Current Waitlist Length
- Number of Courts
- Court Surface (Hard/Clay/Grass/Indoor)
- Operating Season (Year-round/Seasonal)
Tennis club information is scattered across hundreds of individual websites with inconsistent formats. This makes it difficult to:
- Find clubs with open memberships
- Compare waitlist lengths
- Identify clubs by specific criteria (court type, location, season)
A centralized database with:
- Automated web scraping for baseline data
- AI-powered extraction using Claude for complex parsing
- Email monitoring system for membership status updates
- Professional web dashboard for data visualization and export
- Live Statistics: Real-time progress tracking (306 total, 80 processed, 226 remaining)
- Four Main Views:
- Overview with quick actions
- Processed clubs table with search
- Remaining clubs list
- Data quality report with completion metrics
- Batch Scraping: Click-to-copy URLs for AI-assisted extraction
- CSV Export: One-click data download
- Responsive Design: Works on desktop and mobile
- Tennis Ontario Directory: Official structured data (primary source)
- Individual Club Websites: AI-powered extraction via Claude
- Email Campaigns: Manual outreach for sensitive data (waitlist, membership)
- Backend: Flask (Python)
- Data Processing: Pandas, OpenPyXL
- Frontend: Vanilla JavaScript, HTML5, CSS3
- AI Assistant: Anthropic Claude (via API for scraping)
- Data Storage: Excel (.xlsx) with dual-sheet structure
python 3.8+
pip (Python package manager)- Clone the repository
git clone https://github.com/YFC-ophey/GTA-tennis-clubs-waitlist.git
cd GTA-tennis-clubs-waitlist- Install dependencies
pip install -r requirements.txt- Verify data file
Ensure
data/GTA_Tennis_clubs_data_.xlsxexists with two sheets:
data: All 306 clubs (Club Name, Website URL)run: Processed clubs with complete data
- Run the application
python app.py- Access dashboard Open your browser to: COMING SOON
Sheet: data
| Club Name | Website URL |
|---|---|
| 10XTO | https://www.10xto.com/tennis |
| A Love of Tennis | http://www.aloveoftennis.org/ |
| ... | ... |
Sheet: run
| Club Name | Location | Club Type | Membership Status | Waitlist Length | Number of Courts | Court Surface | Operating Season | Website URL | Date Scraped | URL Status |
|---|
- Total Clubs: 306
- Processed: 80 (26.1%)
- Data Completeness:
- Location: 67.5%
- Email: 33.8%
- Club Type: 45.0%
- Court Surface: 28.7%
- Membership Status: 33.8%
- Click "Get Next 10 Clubs" in the dashboard
- Copy a club URL using the copy button
- Ask Claude to scrape it:
Please scrape this club: http://www.clubname.ca/ - Claude extracts all 9 fields automatically
- Data is added to your spreadsheet
- Refresh dashboard to see updates
For clubs requiring phone calls or email outreach:
- Contact the club directly
- Collect the 9 required fields
- Manually update the Excel file
- Refresh dashboard
Click "Export CSV" in the dashboard to download current data in CSV format.
GTA-tennis-clubs-waitlist/
βββ app.py # Flask application
βββ templates/
β βββ dashboard.html # Wimbledon-themed dashboard
βββ data/
β βββ GTA_Tennis_clubs_data_.xlsx # Main database
βββ docs/
β βββ SETUP.md # Detailed setup instructions
β βββ API.md # API documentation
β βββ SCRAPING_GUIDE.md # Web scraping methodology
βββ requirements.txt # Python dependencies
βββ .gitignore # Git ignore file
βββ README.md # This file
- Database schema design
- Excel file structure
- Basic web dashboard
- Manual scraping workflow
- Wimbledon-themed UI redesign
- Batch scraping system
- Claude API integration for automated scraping
- Gmail monitoring for email responses
- Automated Tennis Ontario directory scraping
- Database migration to PostgreSQL
- User authentication system
- Public search interface
- Email campaign management
- Automated reminder system for stale data
- Mobile app (React Native)
Contributions welcome! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Tennis Ontario for official club directory
- Anthropic Claude for AI-powered data extraction
- Wimbledon for design inspiration
- All GTA tennis clubs for their public information
Ophelia Chen
- GitHub: @YFC-ophey
- Project Link: https://github.com/YFC-ophey/GTA-tennis-clubs-waitlist
β Star this repo if you find it useful!
