Last week, a comment from an astute reader alerted me to a browser extension I’d never heard of: ZwiftPower ZRS.
Available for Chrome, Edge, and Firefox, the extension delivers a simple but useful upgrade to the ZwiftPower experience for racers by adding Zwift Racing Score results to event pages. Here how it works…
Installation
Installation is easy – just navigate to the ZwiftPower ZRS page for your browser (Chrome, Edge, or Firefox) and click to add it to your browser. Done! It will automagically function when viewing event results on ZwiftPower.
Usage
Visit any event results page on ZwiftPower to see the extension at work. Here’s one such page, the results for a race I wrote about losing just this week.
ZwiftPower ZRS adds a “ZRS” column to the results, as shown below:
The number in black is the ZRS result for the race, while the smaller superscript number tells you how much the rider’s score changed with this result.
If a rider’s score increased due to a power PR that resulted in a seed score boost, you’ll see an upward arrow ⇡. You may also see an up tack ⊥ next to the score, which indicates that the rider’s ZRS floor has been reached.
From the Creator
I reached out to the creator of ZwiftPower ZRS, who prefers to go by the nickname “int” for online anonymity. Here’s what they shared:
The project started when I noticed Sauce4Zwift showing ZRS scores in their app. At the time, it was a feature the racing community was really missing. I thought it would be great to have the same thing directly on ZwiftPower – the one website every racer already uses – so there’d be no need to check anywhere else just for ZRS.
Curious how they managed it, I checked their source code and discovered that ZRS data is actually accessible via the official Zwift API. The problem: even though I’m a software engineer, I had never built a browser extension before and barely knew JavaScript. Still, I figured someone had to do it (hence my nickname SomebodyHasToDoIt in the webstore). So I dove in, looked things up, and with a bit of AI help had a basic version working in about 3 hours.
I uploaded it to the Chrome Web Store, and while it was under review, I shared the source code in the Zwifties Discord #nerd-corner to gather feedback. A few people there offered great suggestions, which I quickly implemented.
Since then, the extension got approved and has only needed small fixes. I never promoted it anywhere, yet word spread – and today it’s used by around 200 people each week.
I’ve had requests to add more features (like a ZRS history graph), but I hesitated because of rumors that Zwift might replace ZwiftPower. Looking back, I kind of regret not expanding it further for the community – maybe your post will give the project new life.
Two quick facts:
- First released: Feb 16, 2025
- Privacy: No data collection, analysis, or tracking
Feature Requests for Zwift
We could discuss potential improvements to the ZRS algorithm all day long, but for this post, I want to stay focused on what the ZwiftPower ZRS extension does: make it easier to view ZRS information.
A ZRS column should already be built into ZwiftPower, of course. This extension, like other brilliant community projects over the years, just adds functionality Zwift should have already built!
I would also love to see the score change number showing up on the event results page at zwift.com as well (for example, at zwift.com/events/view/5061096).
And my bigger ask – which Zwift has said is coming – is some sort of historical view of a rider’s ZRS, as int mentions above. I want to see how my score has tracked over time, and I want to see that for others as well. Please make it so, Zwift!
Questions or Comments?
Have you used this browser extension? Would you like Zwift to make ZRS information more available, and if so, how specifically? Share your thoughts below!

Even though I’ve done 20+ races since mid-May (and another 20+ group rides, which rightly don’t count), all of them are either Ladder Races or in series that don’t get figured into the ZRS (mainly ZRL Summer Showdown and Herd Summer Racing League).
As a result, my ZRS hasn’t changed since mid-May even though I’ve been racing once or twice a week, which seems to be a pretty severe failing of ZRS, which, if you want it to be accurate should be tracking ALL of the races we do on the platform.
I would be very excited to see a similar browser extension to this that uses vELO instead because that’s what I track since it uses almost all of my races (less TTT races).
Please don’t see this as an insult to this extension. I’m glad so see that the developer put the time in to create this thing that could be useful for those who use ZRS. It’s more of a critique of the ZRS as currently calculated and a request thrown out into the universe for someone to make a similar extension for a similar (but more useful to me) metric.
On a different note Eric, I would like to see the actual age of the riders and not only +50, +60.
For what purpose?
I appreciate that there is a big difference between a 51 year old and a 59 year old but why erode my anonymity just so you can feel a bit better about losing in your age category?
I’m not being facetious, I just don’t understand the need to see an actual age.
Maybe, narrow the groups further by 51-55, 56-60, etc but a specific age is pointless.
There is no need for anything. And it’s not about feeling better, or worse, it’s about knowing.
If you race on Zwift you can see all ages per year in Zwift Companion already.
I just want to be able to see the ages by a quick glance in ZwiftPower.
I don’t see the need for anonymity
…unless people are doing some sort of e-cheating that I also don’t understand.
What discord server does he mention?
Zwifty Zwifters discord a.k.a. the Kaboom discord.
Are there any plans to improve this ZRS?
Why Zwift has not just simply used ZriftRacing.app vElo, it would have been so much better.
A good addition would be to have the ZRS column showing on upcoming events pages against those who have signed up (unless it already does that, but doesn’t seem so), so that you can get an idea of the strength of your competition before the race starts
Agreed!
That’s a great suggestion! Unfortunately, the API endpoint only becomes available after the race has finished. It should still be possible to fetch the current ZRS for each rider, but it would require a dedicated call per rider to retrieve their score, which might not be very performant depending on the number of entries.
Thanks for adding the column indicating pre-race expected finishes! Loved seeing that yesterday after my race.
Just installed it on Chrome and it didn’t work.
it does work. are you looking at a current race? give it time to update.
i think it has to be a ZRS race, I could be wrong, but i noticed it doesnt show up on (grade) events
Yes, it has to be a race that causes ZRS changes. Most, but not all, races using ZRS for pen allocation will cause ZRS changes. And similarly some races using Pace Group pens will cause ZRS changes too.
As far as I know there isn’t any way to know for sure until the race is finished.
The Zwift API does provide ZRS data even for non-ZRS events. However, there’s no flag indicating whether the event actually counts toward ZRS.
The extension works around this by checking if at least one rider’s ZRS has changed to determine if the event affected scores.
That said, for non-ZRS events the API’s ZRS values were often inaccurate or random. Because of this inconsistency, the extension disables itself for non-ZRS events.
I love the extension and learned about it on a /zwift subreddit post. Like others, I imagine, I record and plot various ZP metrics and ZRS in an Excel sheet. Nonetheless, I too would love it if Zwift could provide us with a visual of ZRS history.
Eric, if you go back to races before the ZRS era, the extension still provides a ZRS, and I’m curious what those numbers represent.
He mentions discovering its exposed through the Zwift API and having something up and running a few hours later. I thought there was no publicly exposed Zwift API? I’d be interested for more detail as I think that opens up a huge raft of community led innovative solutions
This is the endpoint for Eric’s race from the post: us-or-rly101.zwift.com/api/race-results/entries?event_id=5061096
Great! Installed and working. That’s something I was really missing from zwiftpower. Thanks, “int”.
In time: I hope that we never lose zwiftpower. A replacement must have everything zwiftpower has, no less. Including how it’s easy to navigate.
This is The Bomb! Wow, thank you very much for bringing this to our attention. This is why Zwiftinsider is the best Zwift info source. Okay, you’re the only one AFAIK but you’re still the best!
i iuse BRAVE browser. its based off chrome, and this works fine. love it.
This is great, thanks.
Sad that the $200 annual fee to Zwift can’t even get them to add basic functionality like this themselves.
I would love to see this added to my personal race overview page (as mentioned above).
Been using it for months to see how basic, flawed and easily manipulated ZRS is. I see what Coolhand, Georg Sauer and many others do every week.
Is there a browser extension that automatically filters out from the results racer who have a 400w FTP and are over 60 years old?
It’s a masterclass in efficiency at Zwift: a total JavaScript novice cracks it in three hours, while their seasoned pros have been heroically ignoring it for a whole year. Truly inspiring.
Just compiled the extension for macOS Safari and it works with no tweaks needed. Other than needing a valid paid developer account with Apple to make it available to anyone else, which I do not currently have. But was able to build it for myself for “developing” purposes.
There seems to be a linitation in that this doesn’t show “non-ZRS” events. What distinguishes a ZRS from a Non-ZRS event? And how can I tell the difference? If my ZRS hasn’t changed for months then might it be that I’ve only done “Non-ZRS” events.
I would be cautious, using this (by disclosing your zwift api key) is probably not wise and likely against ToS
Why is Zwiftpower such garbage? So useless. arbitrary results that make absolutely no sense most of the time. It would almost be insulting, if I could really care. But the results are usually so ridiculous that it forces one to take it with a grain of salt
What do you mean? I find ZwiftPower results to be quite reliable. Post a more precise example with a URL?
It’s not working for me? In the top right corner of the browser it says:
“A new authentication token is required!
If you’re not logged in to Zwift, please check the background tab and log in.”
What do I do?
Hi,
I installed the ZRS extension on Chrome and can see it next to the ZP logo, but I don’t see any further changes on the ZP site. I do keep getting this pop-up:
A new authentication token is required!
If you’re not logged in to Zwift, please check the background tab and log in
So why do I have a “ZRS Extension is temporarily disabled. Zwift now requires authentication for their API, which prevents the extension from fetching ZRS data. GG.” message on my Zwift Power page? I do not see any way to get what you are describing.
I do not have the “ZRS” above the rider category as you show.
Why do I have this message and not the info you show? I’d like to see it.
Sounds like you’re running the old version of the extension? Maybe uninstall and reinstall it?
Does anyone know on the dashboard, where is it getting the information for the power source from (smart, pmeter, etc)? Is it from the last recorded race?
Figured it out on my own, seems like it’s from the previous race.
Feature request: bring dual recording data onto the front page. Maybe a small block indicating if a rider dual records, if they have recently and how close the numbers are. Also could the extension so percentage difference for each metric on the analysis list page so that you don’t have to drill into every entry to see it?