Browser Extensions for Zwifters: ZwiftPower ZRS (Improved Racing Score Visibility)

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!

Eric Schlange
Eric Schlangehttps://zwiftinsider.com
Eric runs Zwift Insider in the spare time he finds between riding his bike and managing various business interests. He lives in Northern California with his beautiful wife Monica. Follow on Strava

40 COMMENTS

Subscribe
Notify of
guest

40 Comments
Oldest
Newest Most Voted
Paul Himes
Paul Himes
11 months ago

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.

Gjermund Torp [ZU4R]
Gjermund Torp [ZU4R]
11 months ago

On a different note Eric, I would like to see the actual age of the riders and not only +50, +60.

L M
L M
11 months ago

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.

Gjermund Torp
Gjermund Torp
11 months ago
Reply to  L M

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.

Eric Jensen
Eric Jensen
11 months ago
Reply to  L M

I don’t see the need for anonymity

…unless people are doing some sort of e-cheating that I also don’t understand.

Harry Roberts
Harry Roberts
11 months ago

What discord server does he mention?

Peter
Peter
11 months ago
Reply to  Harry Roberts

Zwifty Zwifters discord a.k.a. the Kaboom discord.

Martial
Martial
11 months ago

Are there any plans to improve this ZRS?

  • Sandbag is very too easy (you just have to finish last to decrease your ZSR and quickly reach your bottom)
  • If you have a very old CP5 you are “locked” forever in upper category unless you use sandbag technique of loosing races
  • If you do not race for a while, your ZRS do not decrease, you need to do many races to redure your ZRS
  • Etc.

Why Zwift has not just simply used ZriftRacing.app vElo, it would have been so much better.

Andrew
Andrew
11 months ago

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

int
int
11 months ago
Reply to  Andrew

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.

Andre
Andre
11 months ago
Reply to  int

Thanks for adding the column indicating pre-race expected finishes! Loved seeing that yesterday after my race.

Canta
Canta
11 months ago

Just installed it on Chrome and it didn’t work.

dan
dan
11 months ago
Reply to  Canta

it does work. are you looking at a current race? give it time to update.

dan
dan
11 months ago
Reply to  dan

i think it has to be a ZRS race, I could be wrong, but i noticed it doesnt show up on (grade) events

Tom
Tom
11 months ago
Reply to  dan

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.

int
int
11 months ago
Reply to  Tom

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.

Andre
Andre
11 months ago

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.

Steven Walker
Steven Walker
11 months ago

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

int
int
11 months ago
Reply to  Steven Walker

This is the endpoint for Eric’s race from the post: us-or-rly101.zwift.com/api/race-results/entries?event_id=5061096

G. R. V.
G. R. V.
11 months ago

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.

Mark C
Mark C
11 months ago

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!

dan
dan
11 months ago

i iuse BRAVE browser. its based off chrome, and this works fine. love it.

Michael Thorne
Michael Thorne
11 months ago

This is great, thanks.

Sad that the $200 annual fee to Zwift can’t even get them to add basic functionality like this themselves.

Eddy Van de Walle
Eddy Van de Walle
11 months ago

I would love to see this added to my personal race overview page (as mentioned above).

Last edited 11 months ago by Eddy Van de Walle
steve c
steve c
11 months ago

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.

Andrew
Andrew
11 months ago

Is there a browser extension that automatically filters out from the results racer who have a 400w FTP and are over 60 years old?

The alt-queer magazine
The alt-queer magazine
11 months ago

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.

Dr. AL
Dr. AL
11 months ago

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.

Nick Taylor
Nick Taylor
11 months ago

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.

poopy pants
poopy pants
8 months ago

I would be cautious, using this (by disclosing your zwift api key) is probably not wise and likely against ToS

r.michaelemerson
r.michaelemerson
8 months ago

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

Kasper
Kasper
8 months ago

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?

Roel
Roel
8 months ago

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

Mike Madore
Mike Madore
8 months ago

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.

Jon
Jon
7 months ago

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?

Jon
Jon
7 months ago
Reply to  Jon

Figured it out on my own, seems like it’s from the previous race.

Aaron
Aaron
5 months ago

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?

Get Started on Zwift

Newest Featured Posts

Support This Site

Write a post, shop through us, donate or advertise. Learn more

NEWSLETTER SIGNUP

Zwift tips and news every 2 weeks! Click to subscribe.

More Posts