Epic Pass Ski Tracker

15 seasons of skiing visualized from reverse-engineered API data

Python Chart.js JavaScript API Data Viz
Back to Projects

Project Overview

Curious about my lifetime skiing stats, I reverse-engineered the Vail Resorts Epic Pass mobile app API by intercepting HTTPS traffic with Proxyman. This uncovered an undocumented stats endpoint that returns day-by-day ski history including vertical feet, lift rides, and GPS data. I extracted 256 day records spanning December 2010 through January 2025 across four Colorado resorts: Vail, Breckenridge, Keystone, and Beaver Creek. A Python script processes the raw JSON into a clean CSV, and the interactive charts below are powered by Chart.js loading the data directly from the source.

Objectives

Key Results

Lifetime Stats

Loading...

Best Skiing Day

Loading ski data...

Days by Resort

Days at Each Resort

Resort Distribution

Vertical Feet Over Time

Total Vertical Feet by Season

Days Skied by Season

Average Vertical per Day by Season

Lift Rides & Activity

Total Lift Rides by Season

Day of Week Distribution

Monthly Patterns

Days Skied by Month (All Seasons)

Methodology

Skills Demonstrated

Technologies Used

Python JavaScript Chart.js API Data Viz

Updating the Data

The Epic Pass API uses short-lived Bearer tokens (~1.5 hours), so automated refresh isn't practical. To update the dataset:

  1. Open the Epic Pass mobile app while Proxyman (or a similar HTTPS proxy) is intercepting traffic.
  2. Navigate to your stats/history in the app to trigger the API call.
  3. Copy the Authorization: Bearer <token> header from the intercepted request.
  4. Make a GET request to the stats endpoint with the fresh token:
    curl -H "Authorization: Bearer YOUR_TOKEN" \
      "https://api.vailresorts.com/digital/stats/statsapi/v3/Stats/ResortDayStat/YOUR_USER_ID?Limit=1000&MinDate=2010-01-01T00:00:00Z" \
      -o ski_day_data.json
  5. Replace data/ski_day_data.json with the new response.
  6. Re-run python process_ski_data.py to regenerate the CSV.

GitHub Repository

View on GitHub