Alright folks, lemme tell you about this little project I cooked up the other day – an Overwatch tracker. It ain’t pretty, but it gets the job done, you know?

So, it all started when I was, like, rage-quitting Overwatch matches because my stats were in the toilet. I wanted to see if I was actually getting worse, or if it just felt that way, right? That’s when I thought, “Hey, why not build something to track my games?”.
First thing I did, I spent a whole afternoon digging around for an Overwatch API. Turns out, Blizzard doesn’t exactly make it easy. They used to have a public API, but they shut it down a while back. Bummer! But, where there’s a will, there’s a way, right?
Next, I ended up using web scraping. Not ideal, I know, but it was the only thing I could find. I picked Python because, well, it’s Python. Plus, I figured I could use some libraries like BeautifulSoup
to parse the HTML and requests
to actually grab the data. Installed those using pip, simple stuff.
I started by targeting my own Overwatch profile page. You know, the one on the official Overwatch website where it shows your career stats. I messed around with requests
to GET the page and then started trying to parse the HTML with BeautifulSoup
. That part was a bit of a pain. The HTML is a mess, all sorts of nested divs and classes with names that make no sense. It was basically a scavenger hunt.
Once I figured out how to snag the stats I cared about (wins, losses, damage, healing, that kinda stuff), I needed somewhere to store it. I went super simple and just used a CSV file. Quick, dirty, and good enough for this project. I wrote a little function to append the new data to the CSV each time I ran the script.
I had to clean the data too. The scraped data wasn’t always clean, so I added some data cleaning to make the figures useable. This included things like removing commas from numbers, converting strings to integers, and just generally making sure everything was in the right format.
Next up was getting the thing to run automatically. I didn’t want to have to manually run the script every time I played a game. That’s no fun! So, I set up a simple cron job on my computer to run the script every hour. That way, it would automatically grab my stats in the background.
Finally, I wanted to see the data in a way that wasn’t just a bunch of numbers in a CSV file. I used matplotlib
to generate some basic charts. I was able to generate some charts to see my progress over time. It isn’t pretty, but it works.

Here are some lessons I learned during this project:
- Web scraping can be a pain, especially if the website you’re scraping changes its layout.
- Data cleaning is super important. Garbage in, garbage out, you know?
- Cron jobs are awesome for automating tasks.
- Even simple data visualization can be really helpful.
Overall, this was a fun little project. It helped me understand my own Overwatch performance a bit better. Plus, I got to practice my Python skills. Not bad for a weekend project, eh?
I’m thinking about taking it a step further and adding some more features, like tracking my SR (Skill Rating) or even integrating with the Overwatch API (if they ever bring it back). But for now, I’m happy with what I’ve got.
So, there you have it. That’s how I built my own Overwatch tracker. It’s not perfect, but it’s mine. And it’s helping me suck a little less at Overwatch. Maybe.