Complete High School Sports Data Toolkit

Powerful Python scraping tools and Flutter UI components for building comprehensive high school athletics applications

2 Core Packages
5+ Data Sources
MIT Licensed

Project Overview

🔧

HS Scraper Toolkit

Python package for scraping athletic data from MaxPreps and Athletic.net. Extract roster information, schedules, and athlete statistics with ease.

Learn More →
🎨

Frontend Package

Flutter UI components and theme system for building beautiful, responsive school athletics apps with customizable branding.

Learn More →
🏗️

Complete Ecosystem

Built to work together seamlessly, providing everything needed to create professional high school sports applications.

Get Started →

HS Scraper Toolkit

A comprehensive Python toolkit for scraping high school sports data from various athletic websites

MaxPreps Integration

Scrape detailed roster information including player names, numbers, positions, grades, and more from MaxPreps team pages.

  • Complete roster data extraction
  • Multiple sports support
  • Season and level filtering
  • Grade and position information

Athletic.net Support

Extract track & field and cross country data including athlete rosters and comprehensive event schedules.

  • Athlete roster scraping
  • Event schedule extraction
  • Meet location data
  • Cross country & track support

Easy Integration

Simple Python classes with pandas DataFrame outputs make it easy to integrate into any data pipeline.

  • Pandas DataFrame output
  • Flexible filtering options
  • Production-ready code
  • PyPI distribution

Quick Start Example

# Install the package
pip install hs-scraper-toolkit

# Import and use
from hs_scraper_toolkit import MaxPrepRoster, AthleticNetTrackField

# MaxPreps roster scraping
scraper = MaxPrepRoster("https://www.maxpreps.com/il/chicago/northside-mustangs")
roster_data = scraper.scrape()

# Athletic.net data scraping
athletic_scraper = AthleticNetTrackField("https://www.athletic.net/team/19718")
athletes = athletic_scraper.scrape_athletes(['cross-country'])
events = athletic_scraper.scrape_events(['cross-country'], [2024])

print(f"Found {len(roster_data)} athletes from MaxPreps")
print(f"Found {len(athletes)} athletes and {len(events)} events from Athletic.net")

API Reference

View Complete API Reference

MaxPrepRoster

Constructor: MaxPrepRoster(url)

Main Method: scrape(sports=None, genders=None, seasons=None, levels=None)

Returns: pandas DataFrame with athlete information

Columns:
  • name - Athlete name
  • number - Jersey number
  • sport - Sport type
  • season - Season (fall/winter/spring)
  • level - Competition level
  • gender - Gender (boys/girls)
  • grade - Grade level
  • position - Player position

AthleticNetTrackField

Constructor: AthleticNetTrackField(url)

Methods:

  • scrape_athletes(sports=['cross-country', 'track-and-field-outdoor', 'track-and-field-indoor'])
  • scrape_events(sports=['cross-country'], years=[2024, 2025])

Requirements: ChromeDriver for Selenium WebDriver

Frontend Package

Flutter UI components and theme system for building beautiful, responsive school athletics apps

Reusable Widgets

Collection of common UI elements like headers, sheets, and cards, ready to use in any Flutter app.

  • SharedHeader with customizable titles
  • ArticleDetailSheet for content display
  • LoginSheet with authentication flow
  • WebViewSheet for embedded content

Customizable Theme

Easily configure colors, fonts, and styles to match your school's brand identity.

  • School brand color customization
  • Responsive design constants
  • iOS-style animations
  • Consistent shadow system

Responsive Design

Optimized for different screen sizes with special attention to narrow screens like Samsung Galaxy S9.

  • Adaptive text sizing
  • Screen-aware layouts
  • TextHelper utilities
  • Cross-device compatibility

Installation & Usage

# Add to pubspec.yaml
dependencies:
  flutter:
    sdk: flutter
  
  frontend_package:
    git:
      url: https://github.com/NCP-Stampede/frontend-package.git
      ref: main
// Basic widget usage
import 'package:flutter/material.dart';
import 'package:frontend_package/widgets/shared_header.dart';

class MyScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: [
          SharedHeader(title: 'My Awesome Screen'),
          // ... rest of your screen
        ],
      ),
    );
  }
}
// Custom theme application
import 'package:frontend_package/core/theme/app_theme.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'My School App',
      theme: AppTheme.buildTheme(
        primaryColor: Color(0xFFB71C1C),    // Your school colors
        secondaryColor: Color(0xFFFFEB3B),
        backgroundColor: Color(0xFFF5F5F5),
      ),
      home: YourHomePage(),
    );
  }
}

Available Components

SharedHeader

Customizable header with title and optional trailing action

SharedHeader(title: 'Page Title', onTrailingTap: () {})

ArticleDetailSheet

Draggable sheet for displaying article content with markdown link support

ArticleDetailSheet(article: myArticle)

LoginSheet

Login form with email/password fields and custom styling

LoginSheet(onLogin: () {})

WebViewSheet

Embedded web view with external browser option

WebViewSheet(url: 'https://example.com')

TextHelper

Responsive text utilities for different screen sizes

TextHelper.responsiveText('Text', context: context)

DesignConstants

Consistent spacing, radius, and shadow constants

DesignConstants.get24Radius(context)

Getting Started

Get up and running with the NCP Stampede toolkit in minutes

1

Install Dependencies

Set up your Python and Flutter environments with the necessary packages.

# Python toolkit
pip install hs-scraper-toolkit

# Flutter dependencies (add to pubspec.yaml)
# See frontend package section for details
2

Data Scraping

Start collecting athletic data from MaxPreps and Athletic.net.

from hs_scraper_toolkit import MaxPrepRoster

# Initialize with your school's MaxPreps URL
scraper = MaxPrepRoster("https://www.maxpreps.com/il/chicago/northside-mustangs")

# Scrape all available data
data = scraper.scrape()

# Filter specific sports
basketball_data = scraper.scrape(
    sports=['basketball'],
    genders=['boys'],
    seasons=['winter'],
    levels=['varsity']
)
3

Build Your App

Create beautiful Flutter interfaces using the frontend package components.

import 'package:frontend_package/widgets/shared_header.dart';
import 'package:frontend_package/core/theme/app_theme.dart';

class AthleticsScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: [
          SharedHeader(title: 'Athletics'),
          // Your app content here
        ],
      ),
    );
  }
}

System Requirements

Python Toolkit

  • Python 3.7 or higher
  • ChromeDriver (for Athletic.net)
  • Internet connection
  • Dependencies: beautifulsoup4, requests, pandas, selenium

Flutter Package

  • Flutter 3.0 or higher
  • Dart 2.17 or higher
  • Internet connection for git dependencies
  • Platform-specific requirements for target devices

⚠️ Important Disclaimer

Ethical Use & Terms of Service

  • This toolkit is designed for educational and research purposes
  • Please respect the terms of service of websites you scrape (MaxPreps, Athletic.net)
  • Implement appropriate rate limiting and ethical scraping practices
  • Use scraped data responsibly and in compliance with applicable laws
  • Consider contacting website owners for permission for large-scale scraping
  • The toolkit is provided "as-is" without warranty of any kind

Users are responsible for ensuring their use complies with all applicable laws and website terms of service.