This project fetches World of Warcraft character data for all members of a specified guild using Blizzard's Battle.net API. It stores the data in a DuckDB database and provides a Dash-based analytics dashboard to visualize Midnight-era roster demographics, item levels, faction and race trends, and progression.
- Python 3.13+
- uv (package manager)
- An active Battle.net API key (CLIENT_ID and CLIENT_SECRET)
- Clone the repository.
- Navigate to the project directory and sync the environment:
uv sync- Create a Blizzard developer application and obtain a
CLIENT_IDandCLIENT_SECRETfrom the Battle.net developer portal. - Create a
.envfile in the project root directory with the following content:
CLIENT_ID=your_client_id
CLIENT_SECRET=your_client_secretReplace your_client_id and your_client_secret with the actual values obtained in step 3.
To fetch character information for a specific realm and guild, run the import.py script:
uv run python import.py <realm> <guild>Replace <realm> and <guild> with the desired realm and guild names. This will store the fetched data in characters.duckdb.
To import data from the curated realm and guild list in import_top_guilds.sh:
bash import_top_guilds.shThe batch list includes a mix of verified US progression guilds and larger community-heavy guilds.
If you want a clean refresh of the local dataset before re-importing, delete the existing database first:
rm characters.duckdb
bash import_top_guilds.shStart the analytics dashboard with:
uv run app.pyOpen your browser and navigate to http://127.0.0.1:8050.
- Roster Analytics: View class, spec, race, and faction breakdowns.
- Progression Tracking: View level distribution for the current Midnight level cap of 90 and compare item level against achievement points.
- Filtering: Filter by Guild, Class, and current-cap characters.
- Interactive Drilldowns: Click class, faction, and race charts to filter the rest of the dashboard.
- Theme: A refreshed Midnight-inspired dashboard layout with improved mobile behavior.
Build and run the container:
docker build -t wow-fetcher .
docker run -p 8000:8000 --env-file .env wow-fetcher